정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.
"w" : n이 1 커집니다.
"s" : n이 1 작아집니다.
"d" : n이 10 커집니다.
"a" : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.
function solution(n, control) {
for (let i = 0; i < control.length; i++) {
switch (control[i]) {
case "w" :
n += 1
break;
case "s" :
n -= 1
break;
case "d" :
n += 10
break;
case "a" :
n -= 10
break;
}
}
return n
}
switch문을 이용해서 해결했다.
하지만 control이 늘어난다면 case도 늘어나고 결과 값과 break문도 늘어나서 코드가 너무 길어진다.
Object의 hasOwnProperty를 사용하면 더 좋을 것 같다.
control이 늘어나는 경우, 아래 방법으로 작성하면 더 간단하게 작성할 수 있다!
function solution(n, control) {
return ex27MovePosition(n, control);
}
function ex27MovePosition(position, controls) {
const controlMap = {
w: 1,
s: -1,
d: 10,
a: -10
};
for (const control of controls) {
if (controlMap.hasOwnProperty(control)) {
position += controlMap[control];
}
}
return position;
}