문제
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.
X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.
입력
첫째 줄에 N이 주어진다.
둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.
출력
첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.
| 예제입력 | 예제출력 |
| 5 2 4 -10 4 -9 |
2 3 0 3 1 |
| 6 1000 999 1000 999 1000 999 |
1 0 1 0 1 0 |
❌ 풀이 (시간초과)
const input=require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const n=input.shift();
// n = 5
// input =[ '2 4 -10 4 -9' ]
let arr = input[0].split(' ').map(x=>Number(x));
// arr = [ 2, 4, -10, 4, -9 ]
let sorted = input[0].split(' ').map(x=>Number(x)).sort((a,b)=>a-b);
// sorted = [ -10, -9, 2, 4, 4 ]
let set = new Set(sorted);
let coord = [...set];
// coord = [ -10, -9, 2, 4 ]
let answer='';
for(let i=0;i<n;i++){
for(let j=0;j<coord.length;j++){
if(arr[i]===coord[j]){
answer += `${j} `;
}
}
}
console.log(answer);
입력값을 정렬해 sorted 배열로 만들고
sorted 배열을 set 메서드를 사용해 중복을 제거해주었다.
이중 반복문을 사용해 정렬되지않은 입력값배열 arr 의 값과
중복제거 정렬된 coord의 값이 같으면 coord의 인덱스 j를 answer에 넣는 방식으로 작성했다.
시간초과..
✅ 다른풀이참고
const input=require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const n=input.shift();
let arr = input[0].split(' ').map(x=>Number(x));
let sorted = input[0].split(' ').map(x=>Number(x)).sort((a,b)=>a-b);
let set = new Set(sorted);
let coord = [...set];
let answer=[];
let obj ={};
coord.forEach((a,b)=> obj[a] = b);
❗ //obj = { '2': 2, '4': 3, '-10': 0, '-9': 1 }
❗ //ex) obj[2] = 2 obj[-9] = 1 obj[5] = undefined
for(let i=0;i<n;i++){
answer.push(obj[arr[i]]);
}
console.log(answer.join(' '));
객체 초기자 {} 를 해당 값들의 인덱스를 함께 묶어주어 풀이했다.
obj[2] 를 출력하면 2, obj[-9]를 출력하면 1이나온다.
obj에 없는값은 undefined가 출력되며
해당 obj를 이용해 for문 하나만 사용해 풀이가 가능하다.
정렬되지않은 입력값 arr 배열의 값이 obj[] 에 들어가며
obj로 함께 묶여있던 해당값의 인덱스가 answer에 push된다.
객체초기자는 봐도봐도 헷갈린다..
-출처
'Algorithm > Baekjoon(Node.js)' 카테고리의 다른 글
| [JavaSrcipt] 정렬알고리즘 (퀵) (0) | 2021.10.30 |
|---|---|
| [JavaSrcipt] 정렬알고리즘 (합병) (0) | 2021.10.29 |
| [JavaSrcipt] Baekjoon - 10814 : 나이순 정렬 (0) | 2021.10.27 |
| [JavaSrcipt] Baekjoon - 1181 : 단어 정렬 (localeCompare) (0) | 2021.10.26 |
| [JavaSrcipt] Baekjoon - 11651 : 좌표 정렬하기 2 (0) | 2021.10.25 |