본문 바로가기
개발/개발 공부

[프로그래머스] 코딩테스트 입문 : 가위 바위 보

by 하모예 2024. 10. 3.

| 문제

가위는 2 바위는 0 보는 5로 표현합니다.

가위 바위 보를 내는 순서대로 나타낸 문자열 rsp가 매개변수로 주어질 때,

rsp에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return 하도록 solution 함수를 완성해 보세요.

| 제한 사항

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

| 입출력 예

rsp result
"2" "0"
"205" "052"

| 힌트

가위 바위 보에서 핵심은 항상 승자와 패자가 고정되어 있다는 사실입니다. 

그 어떤 상황에서도 가위와 바위가 싸우면 바위가 이기죠.

다시 말해서 이 문제는 복잡한 가위, 바위, 보 연산을 하는 문제가 아니라,

2(가위)는 0(바위)으로, 0(바위)는 5(보)로, 5(보)는 2(가위)로 바꿔주는 문제입니다.

주어진 문자열에서 하나씩 문자를 꺼내서 값을 바꿔주세요.

| 풀이 1

늘 그렇듯이 문자열을 자르고 재조합할 때는 StringBuilder를 사용하면 좋습니다.

그리고 문자열을 잘라서 하나씩 대조할 때는 split으로 잘라서 문자열 배열로 쓸 수 있지요.

public class Solution {
	public String solution(String rsp) {
		StringBuilder sb = new StringBuilder();
		for(String r : rsp.split("")) {
			int num = Integer.parseInt(r);
			switch(num) {
            			case 2 : sb.append(0); break;
            			case 0 : sb.append(5); break;
            			case 5 : sb.append(2); break;
			}
		}
		return sb.toString();
	}
}

| 풀이 2

혹은 인덱스를 기준으로 문자열 안의 문자들을 조회할 수 있다는 것을 활용할 수도 있습니다.

public class Solution{
	public String solution(String rsp){
    	StringBuilder sb = new StringBuilder();
        for(int i = 0 ; i < rsp.length() ; i++){
        	switch(rsp.charAt(i)){
            	case '2' : sb.append('0'); break;
                case '0' : sb.append('5'); break;
                case '5' : sb.append('2'); break;
            }
        }
        return sb.toString();
    }
}

| 해설

풀이 1에서 굳이 문자열을 숫자로 바꿔서 switch문을 쓴 이유는 그냥 큰따옴표가 쓰기 귀찮아서입니다.

아시다시피 JDK 7 버전(JDK 1.7) 이후부터는 switch문에 조건식으로 문자열 사용이 가능합니다.

switch문에는 정수, 문자, 문자열 모두 가능하니 얼마든지 문자열을 조건식으로 사용하셔도 됩니다.

또한 switch문으로 구현 가능한 모든 식은 if문으로도 사용할 수 있답니다.

여러분이 작성한 답과 풀이에 적힌 코드가 다르다고 해서 절대 틀린 게 아니에요.

정상적으로 동작한다면 여러분이 작성한 코드가 바로 정답입니다.

댓글