백준 18870번 좌표압축-JS

yugyeongKim·2021년 11월 15일
0

백준

목록 보기
41/52
post-custom-banner

사실 문제 자체를 이해못해서 문제이해를 구글링 많이했다;;
문제설명
좌표압축: 해당 좌표값보다 작은 좌표값들의 개수로 좌표값을 대체한다는 의미

- 첫 시도(시간초과)

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let N = Number(input.shift());
let arr = input[0].split(' ').map(x=>+x);
let uniq = [];

arr.forEach(e => {
    if(!uniq.includes(e)) {
        uniq.push(e);
    }
})

uniq.sort(function (a,b) {
    return a - b;
})
console.log(uniq);
let dic = {};
uniq.forEach((e, index) => {
    dic[e] = index;
})
console.log(dic);
let answer = '';
arr.forEach(e => {
    for (var key in dic) {
        if (e === Number(key)) {
            answer += dic[key] + ' ';
        }
    }
})
console.log(answer);

그럴만두....^^

- 두 번째 시도(또한 시간초과)

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let N = Number(input.shift());
let arr = input[0].split(' ').map(x=>+x);
let uniq = [];
arr.forEach(e => {
    if(!uniq.includes(e)) {
        uniq.push(e);
    }
})


uniq.sort(function (a,b) {
    return a - b;
})

console.log(uniq);
let answer = '';
for(let i=0; i < arr.length; i++) {
    for(let j=0; j < uniq.length; j++) {
        if(arr[i] === uniq[j]) {
            answer += j + ' ';
        }
    }
}
console.log(answer);

왜지? 뭐가 문제지?

- 세 번째(성공)

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let N = Number(input.shift());
let arr = input[0].split(' ').map(x=>+x);

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

let dic = {};
uniq.forEach((e, index) => {dic[e] = index;})
console.log(dic);
let answer = '';
for(let i=0; i < arr.length; i++) {
    answer += dic[arr[i]] + ' ';
}

console.log(answer);

다른분 코드 좀 참고

문제를 풀이하자면
1. set으로 중복제거 후 sort로 정렬
2. 정렬한 배열의 각 요소를 key로 인덱스 값을 value로 하는 딕셔너리 생성
3. arr배열의 요소를 key값으로 가지고 있는 dic의 value값을 answer에 추가

post-custom-banner

0개의 댓글