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

Cos Pro 1급 - 샘플 문제 풀이 1차 6번

by 우공80 2022. 10. 7.
728x90

계단에서 가위바위보 후 위치찾기

문제 지문 #6

두 학생 A와 B는 계단 게임을 하였습니다.
계단 게임의 규칙은 아래와 같습니다.

1. 계단 제일 아래에서 게임을 시작합니다. (0번째 칸)
2. 가위바위보를 합니다.
3. 이기면 계단 세 칸을 올라가고, 지면 한 칸을 내려가고, 비기면 제자리에 있습니다.
4. 계단 제일 아래에서 지면 제자리에 있습니다.
5. 2~4 과정을 열 번 반복합니다.

A와 B가 계단 게임을 완료한 후에, A가 계단 위 몇 번째 칸에 있는지 파악하려고 합니다.

A와 B가 낸 가위바위보 기록이 순서대로 들어있는 배열 recordA와 recordB가 매개변수로 주어질 때, 게임을 마친 후의 A의 위치를 return 하도록 solution 메소드를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 _한 줄_만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.


매개변수 설명

A와 B가 낸 가위바위보 기록이 순서대로 들어있는 배열 recordA와 recordB가 매개변수로 주어집니다.

  • recordA와 recordB의 원소는 0, 1, 2중 하나이고 순서대로 가위, 바위, 보를 의미합니다.
  • recordA와 recordB의 길이는 10입니다.

 

return 값 설명
solution 메소드는 계단 게임을 마친 후에 A가 계단 위 몇 번째 칸에 위치하는지를 return 합니다.

  • 계단 제일 아래 칸은 0번째 칸입니다.

예시

recordA recordB return
[2,0,0,0,0,0,1,1,0,0] [0,0,0,0,2,2,0,2,2,2] 14

예시 설명

                     
recordA 가위 가위 가위 가위 가위 바위 바위 가위 가위
recordB 가위 가위 가위 가위 가위
result 0 0 0 0 +3 +6 +9 +8 +11 +14

혼자 풀이

문제를 잘 읽으면 쉽게 풀 수 있는 문제입니다.
첫번째 계단에서 졌다고 땅파고 들어가지 않으므로 0인 경우에는 지더라도 -1을 안하면 됩니다.
그런데, 문제 지문에서는 한 줄만 고치라고 했는데, 실제 정답은 여러 줄을 고쳤네요. ㅎㅎ

/*===============================================
    1차 6번 계단에서 가위바위보게임 후 위치 찾기
 ================================================*/

class MySolution{
    public int func(int record){
        if(record == 0) return 1;
        else if(record == 1) return 2;
        return 0;
    }

    public int solution(int[] recordA, int[] recordB){
        int cnt = 0;
        for(int i = 0; i < recordA.length; i++){
            if(recordA[i] == recordB[i])
                continue;
            else if(recordA[i] == func(recordB[i]))
                cnt = cnt + 3;
//          else
            else if(cnt>0) //수정한 부분
                cnt = cnt - 1;
        }
        return cnt;
    }

    // The following is main method to output testcase. The main method is correct and you shall correct solution method.
    public static void main(String[] args) {
        MySolution sol = new MySolution();
        int[] recordA = {2,0,0,0,0,0,1,1,0,0};
        int[] recordB = {0,0,0,0,2,2,0,2,2,2};
        int ret = sol.solution(recordA, recordB);

        // Press Run button to receive output.
        System.out.println("Solution: return value of the method is " + ret + " .");
    }
}

정답

class CorrectSolution {
    public int func(int record){
        if(record == 0) return 1;
        else if(record == 1) return 2;
        return 0;
    }

    public int solution(int[] recordA, int[] recordB){
        int cnt = 0;
        for(int i = 0; i < recordA.length; i++){
            if(recordA[i] == recordB[i]) continue;
            else if(recordA[i] == func(recordB[i])) cnt += 3;
            else cnt = Math.max(0, cnt - 1);
        }
        return cnt;
    }
}

# 첨부 파일

프로젝트 파일 전체를 첨부합니다.
Solution 이 문제, CorrectSolution 이 정답, MySolution이 제가 푼 것입니다.
"Project from existing sources..." 메뉴에서 불러다 쓰시면 됩니다.

FirstQuestion6.zip
0.01MB

 

728x90

댓글