사이트: HackerRank
난이도: 미디움
주어진 자연수 상한선까지 일정한 차이(|pos[i] - i| = k)를 만들어주는 사전적으로 최소단위의 순열을 반환하는 문제이다.
최소 단위의 순열을 구하기 위해서는 먼저 작은 수부터 넣을 필요가 있다. 조건에 맞을 경우 반환할 순열 P에 넣어놓고, 이미 넣어놓은 값은 제외시키기 위해 Set을 이용해 기록하기로 했다.
function absolutePermutation(n, k) {
// Write your code here
const used = new Set();
const P = [];
const addP = (v) => {
P.push(v);
used.add(v);
}
// position
for (let i = 1; i <= n; i++) {
if (i - k > 0 && !used.has(i - k)) {
addP(i - k);
} else if (i + k <= n && !used.has(i + k)) {
addP(i + k);
} else {
return [-1];
}
}
return P;
}
바로 풀 수 있었던 문제들은 지금은 생략하고 추후 더 효율적인 문제 풀이법을 찾아보도록 하겠다.
(댓글로 알려주시면 정말 감사하겠습니다 ㅠㅠ)