import sys
sys.stdin = open("input.txt", "r") # 제거
n = int(input())
arr = list(map(int, sys.stdin.readline().split()))
table, cnt = {}, -1
for i, v in enumerate(sorted(arr)):
if v not in table:
cnt += 1
table[v] = cnt
for a in arr:
print(table[a])
작성 코드 (.js)
function solution(n, arr) {
let arr_s = [...arr].sort((a, b) => a - b);
let [table, cnt] = [{}, -1];
for (let i = 0; i < n; i += 1) {
if (table[arr_s[i]] === undefined) table[arr_s[i]] = ++cnt;
}
const result = [];
arr.forEach((a) => result.push(table[a]));
return result;
}
구현 로직
테이블 객체를 생성해 원소가 존재하지 않는 경우에만 해당 원소의 키로 cnt를 저장합니다. 이렇게 하면 원소가 중복 카운트되지 않으므로 원소 키에 해당하는 값을 출력하면 문제의 조건을 만족할 수 있습니다.
1. 좌표 개수 저장할 객체 생성
2. 입력 배열 오름차순 정렬
3. 정렬된 배열 순회하여 현재 원소가 객체의 키에 저장되어 있지 않은 경우 카운트를 증가하고 이 값을 저장