[Problem Solving] 수 조작하기 2

Sean·2023년 8월 26일
0

Problem Solving

목록 보기
39/130

문제

정수 배열 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[i]에서 numLog[i-1]을 뺀 값을 key값으로 사용하여 'w', 's', 'd', 'a' 중 하나를 value로 받을 수 있는 객체가 있으면 좋겠다고 생각해서 이들을 매핑해주는 객체를 만들었다.
  • numLog 배열을 index 1부터 순회하면서 numLog[i-1]을 뺀 값을 key값으로 사용하여 위의 객체에 접근하여 문자를 얻어낸다. 얻어낸 문자는 answer 문자열에 하나씩 붙여준다.
const charMap = {
    "1": 'w',
    "-1": 's',
    "10": 'd',
    "-10": 'a',
}

function solution(numLog) {
    var answer = '';
    
    for(let i=1; i<numLog.length; i++){ 
        answer += charMap[(numLog[i] - numLog[i-1]).toString()];
    }
    
    return answer;
}

눈에 들어왔던 다른 풀이

  • 객체를 만드는 것 까진 동일한 발상이었지만, 순회하는 방식과 answer를 만들어내는 방식이 다른 풀이가 있었다.
  • 나는 for loop을 이용하여 numLog를 돌았지만 numLog에 slice(1)을 해 준 배열에 map 함수를 사용하여 정답 문자들의 배열을 만들어낸 후, 그걸 join('') 하여 answer를 만들어내는 방식이었다.
function solution(numLog) {
  const convert = {
    "1": 'w',
    "-1": 's',
    "10": 'd',
    "-10": 'a',
}
  
  return numLog.slice(1).map((v, i) => {
    return convert[v - numLog[i]];
  }).join('');
profile
여러 프로젝트보다 하나라도 제대로, 깔끔하게.

0개의 댓글