dogo_ day

JavaScript 코딩테스트 10. 문제(백준 18870번) 본문

IT/코딩테스트_

JavaScript 코딩테스트 10. 문제(백준 18870번)

dogo_ 2023. 5. 7. 22:01

🔅알고리즘 난이도 Lv. 2

🌈문제풀이

문제를 이해하기가 조금 난해했다.

N개의 좌표 Xn을 좌표 압축을 적용했을 때 새로운 좌표 X`n이 생성된다.

X'n의 좌표는 새로운 특징을 가지고 있다.

X' i번째 좌표의 값은 i번째 X좌표 > j번째 X좌표 를 만족하는 개수이다.

즉, X좌표에서 가장 작은 값은 새로운 좌표에서는 0의 값을 가진다.

그 다음 작은 값은 새로운 좌표에서느 1의 값을 가진다.

정렬을 이용하면 해결할 수 있는 알고리즘이다.

Set과 Map을 활용하면 문제를 해결 할 수 있다.

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');

let n = Number(input[0]);

let arr = input[1].split(' ').map(Number);

let uniqueArray = [...new Set(arr)];
uniqueArray.sort((a, b) => a - b)

let myMap = new Map();
for(let i = 0; i < uniqueArray.length; i++)
    myMap.set(uniqueArray[i], i);

let result = '';

for(const x of arr)
    result += myMap.get(x) + ' ';

console.log(result);

참고자료

패스트캠퍼스 - JavaScript 코딩테스트 131개 예재 & CS지식으로 끝내기