| 문제
가위는 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문으로도 사용할 수 있답니다.
여러분이 작성한 답과 풀이에 적힌 코드가 다르다고 해서 절대 틀린 게 아니에요.
정상적으로 동작한다면 여러분이 작성한 코드가 바로 정답입니다.
'개발 > 개발 공부' 카테고리의 다른 글
[프로그래머스] 코딩테스트 입문 : 구슬을 나누는 경우의 수 (1) | 2024.10.08 |
---|---|
[프로그래머스] 코딩테스트 입문 : 모스부호(1) (8) | 2024.10.02 |
[프로그래머스] 코딩테스트 입문 : 개미군단 (0) | 2024.10.01 |
[프로그래머스] 코딩테스트 입문 : 순서쌍의 개수 (2) | 2024.09.30 |
[프로그래머스] 코딩테스트 입문 : 진료순서 정하기 (2) | 2024.09.20 |
댓글