본문 바로가기
Coding Test

230921 가위 바위 보 - Level 0

by mmm- 2023. 9. 21.

문제 설명

가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때, rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.

 

제한사항

  • 0 < rsp의 길이 ≤ 100
  • rsp와 길이가 같은 문자열을 return 합니다.
  • rsp는 숫자 0, 2, 5로 이루어져 있습니다.

 

입출력 예

 

입출력 설명

입출력 예 #1

  • "2"는 가위이므로 바위를 나타내는 "0"을 return 합니다.

입출력 예 #2

  • "205"는 순서대로 가위, 바위, 보이고 이를 모두 이기려면 바위, 보, 가위를 순서대로 내야하므로 “052”를 return합니다.

코드

class Solution {
    public String solution(String rsp) {
        String answer = "";
        
        char[] rsp_array = rsp.toCharArray(); // 문자열을 문자형배열로 변환
        
        for(int i=0; i<rsp_array.length; i++) { // rsp_array 길이만큼 반복
            if(rsp_array[i] == '0') { // 바위일 경우 
                answer += '5'; // answer에 문자 5 추가
            } else if(rsp_array[i] == '2') { // 가위일 경우
                answer += '0'; // answer에 문자 0 추가
            } else if(rsp_array[i] == '5') { // 보일 경우
                answer += '2'; // answer에 문자 2 추가
            }
        }
        
        return answer;
    }
}

 

풀이

String rsp를 문자형배열로 변환하여 반복문을 이용해 배열에 있는 문자형 숫자에 따라 answer에 문자의 형태로 숫자를 추가한 후 리턴한다.


다른 코드와 풀이

아래의 코드는 다른 사람들이 작성한 것들로, 내 코드와 비교, 참고하기 위해 가져왔다.

 

class Solution {
    public String solution(String rsp) {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < rsp.length(); i++) {
            if (rsp.charAt(i) == '2') {
                sb.append(0);
            }

            if (rsp.charAt(i) == '0') {
                sb.append(5);
            }

            if (rsp.charAt(i) == '5') {
                sb.append(2);
            }
        }

        return sb.toString();
    }
}

StringBuilder를 생성 후, 반복문을 통해 rsp 문자열을 하나씩 문자로 변환 후 하나씩 비교하면서 상황에 맞는 수를 StringBuffer에 추가한다. 반복문이 끝나면 이를 문자열로 변환하여 리턴한다.


import java.util.HashMap;
import java.util.Map;

class Solution {
    public String solution(String rsp) {
        //2 - 가위, 0 - 바위, 5 - 보
        Map<String, String> winNumbers = new HashMap<>();
        winNumbers.put("2", "0");
        winNumbers.put("0", "5");
        winNumbers.put("5", "2");

        StringBuilder answer = new StringBuilder();

        for (int i = 0; i < rsp.length(); i++) {
            answer.append(winNumbers.get(rsp.substring(i, i+1)));
        }

        return answer.toString();
    }
}

들어온 가위, 바위, 보와 그에 따른 결과 값들을 HashMap을 이용해 추가해준다. substring()을 통해 rsp문자열을 잘라서 얻은 문자를 winNumbers에서 찾아 그에 맞는 value 값을 StringBuilder answer에 추가해주는 것을 rsp의 길이만큼 반복한다. 그 후 반복문이 종료되면 answer를 string으로 변환하여 반환한다.


정리

substring()

: 문자열의 특정 부분을 잘라내는 데 사용

 

형태

  • substring(int startIndex)
  • substring(int startIndex, int endIndex)

문제에서 사용한 2번째 형태의 경우, substring(2,3) 이라고 하면 2번째부터 3번째 전까지이기 때문에 2번째자리에 있는 문자를 의미한다.