본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 6차 7번 - Up and Down 게임하기

by 우공80 2022. 11. 18.
728x90

Up and Down 게임하기

문제 지문 #7


UP AND DOWN 게임은 다음과 같은 규칙에 따라 진행하는 게임입니다.

  • 먼저 출제자가 1 이상 ~ K 이하인 자연수 중 하나를 마음속으로 생각합니다.
  • 게임 참가자는 1 이상 ~ K 이하인 자연수 중 아무거나 하나를 말합니다.
    • 만약, 참가자가 말한 숫자가 출제자가 생각한 숫자보다 작다면 출제자는 "UP"이라고 말합니다.
    • 만약, 참가자가 말한 숫자가 출제자가 생각한 숫자보다 크다면 출제자는 "DOWN"이라고 말합니다.
  • 참가자는 출제자가 말하는 "UP", "DOWN" 힌트를 잘 활용해서 출제자가 처음에 생각한 숫자를 맞추면 됩니다.

출제자가 처음에 생각할 수 있는 자연수 범위 K, 게임 참가자가 말한 숫자가 순서대로 담긴 배열 numbers, 게임 출제자가 참가자가 말한 각 숫자에 대해 답한 내용이 순서대로 담긴 배열 UpDown이 매개변수로 주어집니다. 배열에 주어진 순서대로 게임이 진행됐다고 했을 때, 현재 정답이 될 수 있는 숫자는 몇 개인지 return 하도록 solution 메서드를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.


#####매개변수 설명
출제자가 처음에 생각할 수 있는 자연수 범위 K, 게임 참가자가 말한 숫자가 순서대로 담긴 배열 numbers, 게임 출제자가 참가자가 말한 각 숫자에 대해 답한 내용이 순서대로 담긴 배열 UpDown이 solution 메서드의 매개변수로 주어집니다.

  • K는 1 이상 10,000 이하인 자연수입니다.
  • numbers 배열의 길이는 1 이상 10 이하입니다.
  • numbers 배열의 원소는 1 이상 K 이하인 자연수입니다.
  • UpDown 배열의 길이는 numbers 배열의 길이와 같습니다.
  • UpDown 배열은 문자열 "UP", "DOWN", "RIGHT"으로만 이루어져 있습니다.
  • "RIGHT"이 나오면 정답을 맞혔다는 것이며, 게임은 더는 진행되지 않습니다.
  • 항상 올바르게 게임이 진행된 경우만 입력으로 주어집니다.

#####return 값 설명
배열에 주어진 순서대로 게임이 진행됐다고 했을 때, 현재 정답이 될 수 있는 숫자는 몇 개인지
return 해주세요.

  • 출제자가 "RIGHT"을 말한 상태로 게임이 끝났다면 정답을 맞힌 것이므로 1을 return 하면 됩니다.

#####예제

10 [4, 9, 6] ["UP", "DOWN", "UP"] 2
10 [2, 1, 6] ["UP", "UP", "DOWN"] 3
100 [97, 98] ["UP", "RIGHT"] 1

#####예제 설명
예제 #1

4 "UP" 5, 6, 7, 8, 9, 10
9 "DOWN" 5, 6, 7, 8
6 "UP" 7, 8

따라서 현재 상황에서 가능성 있는 숫자는 2개입니다.
예제 #2

2 "UP" 3, 4, 5, 6, 7, 8, 9, 10
1 "UP" 3, 4, 5, 6, 7, 8, 9, 10
6 "DOWN" 3, 4, 5

따라서 현재 상황에서 가능성 있는 숫자는 3개입니다.
예제 #3

97 "UP" 98, 99, 100
98 "RIGHT" 98

따라서 정답을 맞혔으므로 1을 return 하면 됩니다.

728x90

 

혼자 풀이


빈칸을 채우는 문제입니다. 초보분들은 입력값이 "Up", "Down"이 String이므로 비교하기 위해 equals() 함수를 사용하는 것만 보시면 되고, 알고리즘 상 특별한 것은 없습니다.

class Main {
    public int solution(int K, int[] numbers, String[] UpDown) {
        int left = 1;//left는 답이 될 가능성이 있는 작은 수
        int right = K;//right는 답이 될 가능성이 있는 가장 큰 수
        for(int i = 0; i < numbers.length; i++){
            int num = numbers[i];
            if(UpDown[i].equals("UP"))
                // left = @@@;
                left = Math.max(left,num+1);   //UP이면 left를 num+1로 대체한다. (num보다 큰 수 이므로)
            else if(UpDown[i].equals("DOWN"))
                // right = @@@;
                right=Math.min(right,num-1); //DOWN이면 right를 num-1로 대체한다. (num보다 작은 수 이므로)
            else if(UpDown[i].equals("RIGHT")) 
                return 1;
        }
        return right-left+1; //개수를 구하려면 빼서 1을 더해야 함
    }

    // 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
    public static void main(String[] args) {
        Main sol = new Main();
        int K1 = 10;
        int[] numbers1 = {4, 9, 6};
        String[] UpDown1 = {new String("UP"), new String("DOWN"), new String("UP")};
        int ret1 = sol.solution(K1, numbers1, UpDown1);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret1 + " 입니다.");

        int K2 = 10;
        int[] numbers2 = {2, 1, 6};
        String[] UpDown2 = {new String("UP"), new String("UP"), new String("DOWN")};
        int ret2 = sol.solution(K2, numbers2, UpDown2);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret2 + " 입니다.");

        int K3 = 100;
        int[] numbers3 = {97, 98};
        String[] UpDown3 = {new String("UP"), new String("RIGHT")};
        int ret3 = sol.solution(K3, numbers3, UpDown3);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret3 + " 입니다.");
    }
}

 

정답


혼자 풀이와 정답이 동일합니다.

실습은 아래 참고


2022.10.25 - [Programming/Cos Pro 1급] - Cos Pro 1급 공부 사이트 추천 - 구름 에듀(https://edu.goorm.io/)

 

Cos Pro 1급 공부 사이트 추천 - 구름에듀(https://edu.goorm.io/)

구름 EDU??? YBM 공식 사이트에서 받은 문제 지문/문제 코드/정답 코드를 intellij에서 공부하다가 후배 추천으로 구름 에듀를 알게 되었습니다. 문제 지문 따로 문제 코드 따로 열어보는 게 여간 불

woogong80.tistory.com

728x90

댓글