"w" : n이 1 커집니다.
"s" : n이 1 작아집니다.
"d" : n이 10 커집니다.
"a" : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.
제한사항
control
을 charAt()
를 사용하여 문자 하나씩 나눴다.class Solution {
public int solution(int n, String control) {
int answer = 0;
for(int i = 0; i < control.length(); i++) {
char a = control.charAt(i);
if (a == 'w') {
n += 1;
} else if (a == 's') {
n -= 1;
} else if (a == 'd') {
n += 10;
} else if (a == 'a') {
n -= 10;
}
}
return n;
}
}
맨 처음에 위 처럼 작성했는데 다른 사람들의 코드를 참고하여 이렇게 작성하는 것 보다 switch~case
를 사용하는것이 코드 길이나 가독성 면에서도 좋다는 것을 깨달았다.
switch~case
를 사용하면 아래와 같다.
class Solution {
public int solution(int n, String control) {
int answer = 0;
for(int i = 0; i < control.length(); i++) {
char a = control.charAt(i);
switch (a) {
case 'w' : n += 1; break;
case 's' : n -= 1; break;
case 'd' : n += 10; break;
case 'a' : n -= 10; break;
}
}
return n;
}
}
numLog
가 주어집니다. 처음에 numLog[0]
에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다."w" : 수에 1을 더한다.
"s" : 수에 1을 뺀다.
"d" : 수에 10을 더한다.
"a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog
입니다. 즉, numLog[i]
는 numLog[0]
로부터 총 i
번의 조작을 가한 결과가 저장되어 있습니다.
주어진 정수 배열 numLog
에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.
numLog
의 길이 ≤ 100,000numLog[0]
≤ 100,000numLog
의 길이인 모든 i에 대해 |numLog[i] - numLog[i - 1]|
의 값은 1 또는 10입니다.골자는 수 조작하기 1과 똑같다. 다만 이걸 거슬러 올라가서 result를 리턴해야된다.
두 수의 차이가 +1이면 : "w"
두 수의 차이가 -1이면 : "s"
두 수의 차이가 +10이면 : "d"
두 수의 차이가 -10이면 : "a"
이렇게 거꾸로 하면 된다.
numLog[i]
, numLog[i-1]
이라고 한다면 for 문은 i부터 시작해야한다 (인덱스는 0부터 시작)class Solution {
public String solution(int[] numLog) {
String answer = "";
for (int i = 1; i < numLog.length; i++) {
int j = numLog[i] - numLog[i-1]; // 두 수의 차이
switch(j) {
case 1 : answer+='w'; break;
case -1 : answer+='s'; break;
case 10 : answer+='d'; break;
case -10 : answer+='a'; break;
}
}
return answer;
}
}