본문 바로가기
알고리즘/Programmers

[TIL] 2023.06.04 Programmers_수 조작하기 2

by heereal 2023. 6. 4.

수 조작하기 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 함수를 완성해 주세요.

 

 

입출력 예

numLog result
[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1] "wsdawsdassw"

 

 

나의 풀이

function solution(numLog) {
    let answer = '';
    for (let i = 0; i <= numLog.length - 2; i++) {
        let minus = numLog[i + 1] - numLog[i];
        if (minus === 1) answer += 'w';
        if (minus === -1) answer += 's';
        if (minus === 10) answer += 'd';
        if (minus === -10) answer += 'a'; 
    }
    return answer;
}

if문을 이용해서 다음 인덱스에서 현재 인덱스를 뺀 값인 minus를 이용해서 문자열을 추가한다.

 

 

다른 사람의 풀이 01

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('')
}

문자열을 value로 가지는 객체를 생성해서 이 객체의 key로 접근해서 문자열을 return 한다. 너무 신기하고 멋진 풀이 방법이었다 👍👍

 

 

다른 사람의 풀이 02

function solution(numLog) {
    return numLog.map((v, i) => {
        if (i === 0) return ''
        const prevV = numLog[i-1]
        if (prevV + 1 === v) return 'w'
        if (prevV - 1 === v) return 's'
        if (prevV + 10 === v) return 'd'
        if (prevV - 10 === v) return 'a'
        return ''
    }).join('')
}

다음 인덱스에서 현재 인덱스를 뺀 값이 아니라 이전 인덱스 하나에만 접근해서 문자열을 구하는 방법의 풀이.

 

 

댓글