알고리즘/백준

[백준] js 18870

프흐프좋아 2024. 2. 12. 19:31

문제이해하는게 약간 시간이 걸렸다

 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. << 라는 표현을 잘 이해해보면

결국 문제의 예제에 있는

2 4 -10 4 -9

라는 값을 크기 순위로 나타낸다는 것과 같은 의미다

2 3 0 3 1

-10은 꼴찌니까 0 .. 뭐 이런느낌으로 말이다

 

근데 이제 서로 다른 좌표 Xj의 개수와 같아야 한다 라는 표현이 있는데 이는,

1000 999 1000 999 1000 999

같은 값이 있다면 1번만 개수를 세야한다

1 0 1 0 1 0

 

요런 개념을 이해하고 문제를 풀어보자


요기서 필요한건 dictionary 개념이 추가로 필요하다

php 같은 경우 array가 원래 key value인 경우도 있고 아닌 경우도 있는데,,

js는  key value인 경우의 형태가 dictionary 개념 인듯?

// readline 모듈보다는 fs를 이용해 파일 전체를 읽어 들여 처리하기
const fs = require('fs')

const getInput = (filePath) => {
    return fs
        .readFileSync(filePath)
        .toString()
        .trim()
        .split(/\n/);
    }

const input = getInput('/dev/stdin'); // 제출시 여기 '/dev/stdin' 으로 변경

let count = Number(input[0]);
let dataOrg = input[1].split(' ').map(Number);

// 중복제거
data = [...new Set(dataOrg)]; // 중복제거

data.sort(function(a,b){
    if(a>b) return 1;
    else if(a<b) return -1;
    else return 0;
});

// dictionary 형태로 mapping
let myMap = new Map();
for(let i = 0; i < data.length ; i++){
    myMap.set(data[i],i);
}

let answer= "";
for(p of dataOrg)
{
    answer += myMap.get(p) + " ";
}

console.log(answer);