프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 가위 바위 보(Java)

Sigfriede 2023. 4. 19. 16:12

  문제 설명

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

 

  제한사항

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

 

  입출력 예

rsp result
"2" "0"
"205" "052"
import java.lang.StringBuilder;
class Solution {
    public String solution(String rsp) {
        StringBuilder sb = new StringBuilder();
        for (String str: rsp.split("")) {
            if (str.equals("2")) {
                sb.append("0");
            } else if (str.equals("0")) {
                sb.append("5");
            } else {
                sb.append("2");
            }
        }
        String answer = sb.toString();
        return answer;
    }
}

  StringBuilder를 이용하여 풀 것입니다. sb 변수를 만들어줍니다.

  for-each문에서 split 메소드로 문자열 rsp를 문자 단위로 쪼개어, str에 할당합니다. for문이 반복되는 동안 if문을 통해 조건에 해당하면 문제 조건에 해당하는 문자를 append 메소드로 sb에 삽입합니다. 입출력 예 2번을 기준으로 진행되는 과정은 아래와 같습니다.

"205" -> "052"

if (str.equals("2"))에 해당하므로, sb.append("0") 실행
현재 sb = "0";
else if (str.equals("0"))에 해당하므로, sb.append("5") 실행
현재 sb = "05";
else에 해당하므로, sb.append("2") 실행
현재 sb = "052";

  이렇게 구한 sb 값을 정상적으로 출력하기 위해 toString()을 사용한 뒤, answer에 할당합니다. 만약 toString()을 쓰지 않고 할당한다면 원하는 값이 아닌, 객체의 메모리 주소가 할당될 것입니다.

  replace를 이용하여 푸는 생각도 해보았습니다. 그러나 이는 이미 바꾼 숫자도 다시 바꿔버리는 일이 발생합니다. 만약 이렇게 풀고자 한다면, 방문한(바꾼) 인덱스에는 다시 방문하지 않도록 제한이 필요할 듯합니다.