새소식

알고리즘 테스트 ⏲/백준

[백준] 18870. 좌표 압축 / Python, JavaScript

  • -
 

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. 원본 배열을 순회하여 각 원소 키에 해당하는 값 출력

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.