[프로그래머스] 수 조작하기 2
문제
정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다.
- "w" : 수에 1을 더한다.
- "s" : 수에 1을 뺀다.
- "d" : 수에 10을 더한다.
- "a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog 이다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있다.
주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 메서드를 완성하라
나의 답안
- StringBulider 선언
- 발생할 수 있는 경우의 수가 4가지 (1, -1, 10, -10) 이므로 switch 문을 사용
- numLog[i]의 값은 numLog[i-1] 값을 w, a, s, d에 따라 조정한 숫자이므로,
numLog[i] - numLog[i-1] 값을 통해 w, a, s, d 여부를 판단하여
sb에 순서대로 저장했다.
class Solution {
public String solution(int[] numLog) {
StringBuilder sb = new StringBuilder();
for (int i=1; i<numLog.length; i++) {
switch (numLog[i] - numLog[i-1]) {
case 1: sb.append("w");
break;
case -1: sb.append("s");
break;
case 10: sb.append("d");
break;
case -10: sb.append("a");
break;
default: break;
}
}
return sb.toString();
}
}
모범 답안
class Solution {
public String solution(int[] numLog) {
String answer = "";
for(int i=1; i<numLog.length; i++){
int j = numLog[i-1] - numLog[i];
switch(j){
case -1 : answer+='w'; break;
case 1 : answer+='s'; break;
case -10 : answer+='d'; break;
case 10 : answer+='a'; break;
}
}
return answer;
}
}
- StringBuilder 대신 String을 선언하여 문자를 추가했다.
- String을 통해 값을 추가할 경우, 추가할 때마다 프로그램 내부적으로 매번 변수 선언을 반복하여
비효율적일 수 있어 StringBuilder 사용함. (책에서 봤음) - switch문 마지막에 default는 생략해도 무방하다는 것을 깨달았다.
복습
switch문 구조
- switch (입력 변수) {
case 입력값 1: 수행할 문장 1;
break;
case 입력값 2: 수행할 문장 2;
break;
....
default: 수행할 문장 n;
break;
} - 입력 변수의 값이 각 case의 입력값과 같을 경우 해당 case의 수행할 문장을 수행한다.