문제 설명
가위는 2 바위는 0 보는 5로 표현합니다. 가위 바위 보를 내는 순서대로 나타낸 문자열 rsp
가 매개변수로 주어질 때, rsp
에 저장된 가위 바위 보를 모두 이기는 경우를 순서대로 나타낸 문자열을 return하도록 solution 함수를 완성해보세요.
제한사항
- 0 < rsp
의 길이 <= 100
- rsp
와 길이가 같은 문자열을 return 합니다.
- rsp
는 숫자 0, 2, 5로 이루어져 있습니다.
입출력 예
rsp | result |
---|---|
"2" | "0" |
"205" | "052" |
입출력 예 설명
입출력 예 #1
- "2"는 가위이므로 바위를 나타내는 "0"을 return합니다.
입출력 예 #2
- "205"는 순서대로 가위, 바위, 보이고 이를 모두 이기려면 바위, 보, 가위를 순서대로 내야하므로 "052"를 return합니다.
이 문제에 대해 접근할 때, 나는 rsp
를 char배열로 바꾸어서 for
문을 순회하며 배열에 있는 원소 하나씩 바꾸어 주도록 생각을 하였다.
그래서 아래와 같이 작성하였다.
import java.util.Arrays;
class Solution {
public String solution(String rsp) {
String answer = "";
char[] arr = new char[rsp.length()];
char[] answerArr = new char[rsp.length()];
for (int i = 0; i < rsp.length(); i++) {
arr[i] = rsp.charAt(i);
if (arr[i] == '0') {
answerArr[i] = '5';
} else if (arr[i] == '2') {
answerArr[i] = '0';
} else if (arr[i] == '5') {
answerArr[i] = '2';
}
}
answer = new String(answerArr);
System.out.println(answer);
return answer;
}
}
for
문을 순회하며 배열에 있는 원소를 하나씩 찾으면서 0
은 5
로, 2
는 0
으로, 5
는 2
로 바꾸는 과정이다.
다른 사람의 풀이를 한 번 살펴보자
import java.util.Arrays;
import java.util.stream.Collectors;
class Solution {
public String solution(String rsp) {
return Arrays.stream(rsp.split("")).map(s -> s.equals("2") ? "0" : s.equals("0") ? "5" : "2").collect(Collectors.joining());
}
}
스트림을 사용하여 매우 간단하게 표현하였다.
rsp.split("")
- split("")
은 문자열을 한 글자씩 쪼개어 문자열 배열로 변환한다.
- 예 : "205"
→ ["2", "0", "5"]
Arrays.stream()
- rsp.split("")
로 생성된 배열을 스트림으로 변환하여 각 문자에 대해 처리를 수행한다.
.map(s -> ...)
- 스트림의 각 요소(문자)를 변환한다.
- 변환 규칙은 조건문을 사용하여 정의된다.
.collect(Collectoros.joining())
- 변환된 문자 스트림을 다시 하나의 문자열로 합친다.
- 예: ["0", "5", "2"]
→ "052"
마지막으로 최종적으로 변환된 문자열을 반환한다.
여기에서 사용되는 스트림이 무엇인지 정확히 모르겠어서 찾아보았다.
Stream이란 데이터의 흐름을 추상화한 객체로, 데이터를 순차적으로 처리할 수 있도록 도와주는 API이다. 특히 컬렉션, 배열, 또는 I/O 작업에서 데이터를 처리하는 데 효과적이라고 한다.
스트림은 데이터의 생성, 변환, 필터링, 정렬, 집계 등을 선언적이고 간결하게 처리할 수 있도록 설계되었다.
스트림에 대해 더 찾아보고 알고리즘을 푸는데에 있어서 스트림을 사용하면 보다 더 효과적으로 풀 수 있을 것 같아 앞으로 공부해나가야겠다.
'problem solving' 카테고리의 다른 글
[프로그래머스] 대문자와 소문자 (0) | 2024.11.28 |
---|---|
[프로그래머스] 두 수의 연산값 비교하기 (0) | 2024.11.27 |
[프로그래머스] 배열 비교하기 (0) | 2024.11.26 |
[프로그래머스] 뒤에서 5등까지 (0) | 2024.11.21 |
[프로그래머스] 문자열 정수의 합 (0) | 2024.11.21 |