수 조작하기 1
https://school.programmers.co.kr/learn/courses/30/lessons/181926
class Solution {
public int solution(int n, String control) {
int answer = n;
for(int i = 0; i < control.length(); i++){
switch (control.charAt(i)){
case 'w':
answer++;
break;
case 's':
answer--;
break;
case 'd':
answer += 10;
break;
case 'a':
answer -= 10;
break;
default:
break;
}
}
return answer;
}
}
switch ( ) {
case value :(콜론)
조건;
break;
case value :(콜론)
조건;
break;
default :(콜론)
조건;
break;
}
class Solution {
public int solution(int n, String control) {
return control.chars().reduce(n, (acc, c) -> acc + (c == 'w' ? 1 : c == 's' ? -1 : c == 'd' ? 10 : -10));
}
}
이 코드는 Java 스트림 API를 사용하여 control 문자열의 각 문자를 순회하면서 n 값에 특정 값을 누적하여 최종 결과를 반환하는 방식입니다. 이 코드는 간결하고 함수형 프로그래밍 스타일을 채택하고 있습니다. 각 문자가 'w', 's', 'd', 'a'일 때 각각 다른 값을 더하거나 빼는 작업을 수행합니다.
control.chars():
control 문자열의 각 문자를 IntStream으로 변환합니다. 이 스트림은 control 문자열의 각 문자의 유니코드 값을 포함합니다.
reduce(n, ...):
reduce 메서드는 누적 연산을 수행하여 스트림의 요소를 하나의 값으로 결합합니다. 첫 번째 인수는 초기값으로, 여기서는 n입니다.
두 번째 인수는 누적 함수를 정의하는 람다 표현식입니다. 이 람다 표현식은 두 개의 인수를 받습니다: acc (현재 누적 값)와 c (현재 스트림의 요소).
람다 표현식 (acc, c) -> acc + ...:
람다 표현식에서 c는 현재 스트림의 요소를 나타내며, control 문자열의 각 문자의 유니코드 값을 가집니다.
삼항 연산자를 사용하여 현재 문자가 'w', 's', 'd', 'a'인지 확인합니다:
c == 'w'인 경우 1을 더합니다.
c == 's'인 경우 -1을 뺍니다.
c == 'd'인 경우 10을 더합니다.
그 외의 경우 (즉, 'a') -10을 뺍니다.
이 결과를 acc에 더합니다.
이렇게 계산된 값을 반환하여 다음 요소와 함께 다시 누적합니다.
class Solution {
public int solution(int n, String control) {
for(char c : control.toCharArray()){
n += c == 'w' ? 1 : c == 's' ? -1 : c == 'd' ? 10 : -10;
}
return n;
}
}
문자열.toCharArray() : char[]
class Solution {
public int solution(int n, String control) {
int answer = n;
// 문자에 대한 동작 값을 인덱스로 매핑하는 배열
// 배열의 인덱스는 ASCII 코드에 따라 문자에 대응됩니다.
// a: -10, d: 10, s: -1, w: 1 이므로, 각 문자의 ASCII 값을 기준으로 오프셋을 두고 배열 크기를 설정합니다.
int[] controlMap = new int[128];
controlMap['w'] = 1;
controlMap['s'] = -1;
controlMap['d'] = 10;
controlMap['a'] = -10;
// control 문자열을 순회하면서 answer 값을 업데이트
for (int i = 0; i < control.length(); i++) {
char c = control.charAt(i);
answer += controlMap[c];
}
return answer;
}
}