문제 설명
UP AND DOWN 게임은 다음과 같은 규칙에 따라 진행하는 게임입니다.
- 먼저 출제자가 1 이상 ~ K 이하인 자연수 중 하나를 마음속으로 생각합니다.
- 게임 참가자는 1 이상 ~ K 이하인 자연수 중 아무거나 하나를 말합니다.
- 만약, 참가자가 말한 숫자가 출제자가 생각한 숫자보다 작다면 출제자는 "UP"이라고 말합니다.
- 만약, 참가자가 말한 숫자가 출제자가 생각한 숫자보다 크다면 출제자는 "DOWN"이라고 말합니다.
- 참가자는 출제자가 말하는 "UP", "DOWN" 힌트를 잘 활용해서 출제자가 처음에 생각한 숫자를 맞추면 됩니다.
출제자가 처음에 생각할 수 있는 자연수 범위 K, 게임 참가자가 말한 숫자가 순서대로 담긴 배열 numbers, numbers의 길이 numbers_len, 게임 출제자가 참가자가 말한 각 숫자에 대해 답한 내용이 순서대로 담긴 배열 up_down, up_down의 길이 up_down_len이 매개변수로 주어집니다. 배열에 주어진 순서대로 게임이 진행됐다고 했을 때, 현재 정답이 될 수 있는 숫자는 몇 개인지 return 하도록 solution 함수를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.
매개변수 설명
출제자가 처음에 생각할 수 있는 자연수 범위 K, 게임 참가자가 말한 숫자가 순서대로 담긴 배열 numbers, numbers의 길이 numbers_len, 게임 출제자가 참가자가 말한 각 숫자에 대해 답한 내용이 순서대로 담긴 배열 up_down, up_down의 길이 up_down_len이 solution 함수의 매개변수로 주어집니다.
- K는 1 이상 10,000 이하인 자연수입니다.
- numbers_len은 1 이상 10 이하입니다.
- numbers 배열의 원소는 1 이상 K 이하인 자연수입니다.
- up_down_len은 numbers_len과 같습니다.
- up_down 배열은 문자열 "UP", "DOWN", "RIGHT"으로만 이루어져 있습니다.
- "RIGHT"이 나오면 정답을 맞췄다는 것이며, 게임은 더는 진행되지 않습니다.
- 항상 올바르게 게임이 진행된 경우만 입력으로 주어집니다.
return 값 설명
배열에 주어진 순서대로 게임이 진행됐다고 했을 때, 현재 정답이 될 수 있는 숫자는 몇 개인지
return 해주세요.
- 출제자가 "RIGHT"을 말한 상태로 게임이 끝났다면 정답을 맞춘 것이므로 1을 return 하면 됩니다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
int solution(int K, int numbers[], int numbers_len, char* up_down[], int up_down_len) {
int left = 1;
int right = K;
for(int i = 0; i < numbers_len; i++){
int num = numbers[i];
if(strcmp("UP", up_down[i]) == 0)
left = left>num+1?left:num+1;
else if(strcmp("DOWN", up_down[i]) == 0)
right = right<num-1?right:num-1;
else if(strcmp("RIGHT", up_down[i]) == 0)
return 1;
}
return right-left+1;
}
// 아래는 테스트케이스 출력을 해보기 위한 main 함수입니다.
int main() {
int K1 = 10;
int numbers1[] = {4, 9, 6};
int numbers_len1 = 3;
char* up_down1[] = {"UP", "DOWN", "UP"};
int up_down_len1 = 3;
int ret1 = solution(K1, numbers1, numbers_len1, up_down1, up_down_len1);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
printf("solution 함수의 반환 값은 %d 입니다.\n", ret1);
int K2 = 10;
int numbers2[] = {2, 1, 6};
int numbers_len2 = 3;
char* up_down2[] = {"UP", "UP", "DOWN"};
int up_down_len2 = 3;
int ret2 = solution(K2, numbers2, numbers_len2, up_down2, up_down_len2);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
printf("solution 함수의 반환 값은 %d 입니다.\n", ret2);
int K3 = 100;
int numbers3[] = {97, 98};
int numbers_len3 = 2;
char* up_down3[] = {"UP", "RIGHT"};
int up_down_len3 = 2;
int ret3 = solution(K3, numbers3, numbers_len3, up_down3, up_down_len3);
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
printf("solution 함수의 반환 값은 %d 입니다.\n", ret3);
}
'CODING' 카테고리의 다른 글
COS Pro 1급 C언어 모의고사 - 시험 점수 정렬 (0) | 2023.12.17 |
---|---|
[BAEKJOON] 어른 상어 (0) | 2023.12.08 |
COS Pro 1급 C언어 모의고사 - 피자 (0) | 2023.11.28 |
COS Pro 1급 C언어 모의고사 - 주식으로 최대 수익을 내세요 (0) | 2023.11.08 |
[CodeTree] 나무박멸(JAVA) (0) | 2023.04.05 |
댓글