18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net
작성 코드 (.py)
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. 정렬된 배열 순회하여 현재 원소가 객체의 키에 저장되어 있지 않은 경우 카운트를 증가하고 이 값을 저장
4. 원본 배열을 순회하여 각 원소 키에 해당하는 값 출력
'알고리즘 테스트 ⏲ > 백준' 카테고리의 다른 글
| [백준] 1874. 스택 수열 풀이 / Python, JavaScript (0) | 2023.04.16 |
|---|---|
| [백준] 2839. 설탕배달 풀이 / Python, JavaScript (0) | 2023.04.16 |
| [구현] 뱀 풀이 (백준 3190 / 삼성전자 SW 역량테스트) (0) | 2022.07.08 |
| [백준 18406] 럭키 스트레이트 풀이 / Python (0) | 2022.07.03 |
| [백준 C++] 알고리즘 10250. ACM 호텔 (0) | 2021.08.30 |