프로그래머스 Lv0 - 수 조작하기 1, 수 조작하기 2, 수열과 구간 쿼리 3, 수열과 구간 쿼리 2, 수열과 구간 쿼리 4

찐새·2023년 4월 26일
1

코딩테스트

목록 보기
33/53
post-thumbnail

수 조작하기 1

https://school.programmers.co.kr/learn/courses/30/lessons/181926

코드

function solution(n, control) {
    const controller = {
        w:1,
        s:-1,
        d:10,
        a:-10
    }
    return [...control].reduce((acc, cur)=>acc + controller[cur], n);
}

풀이

object[key]를 하면 해당 객체 내 키값을 가져올 수 있다. 그 속성을 이용해 reduce로 계산했다.

수 조작하기 2

https://school.programmers.co.kr/learn/courses/30/lessons/181925

코드

function solution(numLog) {
    const controller = {
        "1":"w",
        "-1":"s",
        "10":"d",
        "-10":"a"
    }
    return numLog.slice(1).reduce((acc, cur, idx)=>acc + controller[`${numLog[idx+1]-numLog[idx]}`],"");
}

풀이

controllerkeynumLog[idx] - numLog[idx-1]이다. 단, 초기값은 컨트롤러에서 제외해야 하기 때문에 배열을 slice하여 idx 1부터 계산했다.

reducenumLog[idx+1]cur와같고, slice 때문에 결과값 배열의 길이가 1 줄었으므로 numLog[idx]원래 배열[idx-1]과 같다.

수열과 구간 쿼리 3

https://school.programmers.co.kr/learn/courses/30/lessons/181924

코드

function solution(arr, queries) {
    for (const [i, j] of queries) {
        const [temp1, temp2] = [arr[i], arr[j]];
        arr.splice(i, 1, temp2);
        arr.splice(j, 1, temp1);
    }
    return arr;
}

풀이

splice(idx, count, items)에 인자가 3개 들어가면 배열의 idx부터 count 개수만큼 items를 변경한다.

하지만 [arr[i], arr[j]] = [arr[j], arr[i]]로도 가능한 것을 어렵게 풀이한 느낌이다. 치환이 가능함을 기억하자.

수열과 구간 쿼리 2

https://school.programmers.co.kr/learn/courses/30/lessons/181923

코드

function solution(arr, queries) {
    const answer = [];
    for (const [s, e, k] of queries) {
        const tmp = arr.filter((v, i)=> s <= i && i <= e && v > k).sort((a,b)=>a-b)[0];
        answer.push(tmp ? tmp : -1)
    }

    return answer;
}

풀이

sort에 조건을 안 넣었더니 계속 실패가 떴다. 생각해 보니, JS에서 콜백 없는 sort는 유니코드 값에 따라 정렬되었다. 추가로 오름차순이 되게끔 콜백을 넣어 정상적으로 풀었다.

수열과 구간 쿼리 4

https://school.programmers.co.kr/learn/courses/30/lessons/181922

코드

function solution(arr, queries) {
    for (const [s, e, k] of queries) {
        arr = arr.map((v,i)=> s <= i && i <= e && i % k === 0 ? v + 1 : v);
    }
    return arr;
}

풀이

조건에 맞게끔 변화한 배열을 반환하는 문제라, map을 통해 arr에 재할당했다.

profile
프론트엔드 개발자가 되고 싶다

0개의 댓글