[백준 문제풀이] 18870 - 좌표 압축
풀이
실행속도를 높이기위해 sys.stdin.readline
을 사용했는데 이상한 문제점이 생겼다.
1
2
3
4
5
6
7
8
9
10
import sys
input = sys.stdin.readline
print = sys.stdout.write
N = int(input())
arr = [0] * N
for i in range(N):
arr[i] = list(map(int, input().split(" ")))
이렇게 코드를 짰을 때 다른 문제에서는 이상없이 동작했는데 띄어쓰기로 구분해 변수에 입력된 값을 저장하지않고 개행으로 변수에 값이 저장되어서, rstrip()
, 메모리 할당을 하지 않고 arr.append()
까지 사용했지만 결과가 똑같았다. 그래서 그냥 values 변수에 미리 저장해놓고 for 문을 돌려 값을 저장했다.
좌표 압축 테크닉은 ‘알고리즘 테크닉 - 좌표 압축이란?’ 에 따로 포스팅해놓았다. 처음에는 list를 사용해 문제를 풀려고했는데 코드가 더러워지는 느낌이 들었다. 그래서 인덱스를 활용할 수 있는 dict를 사용해 좌표 압축(중복된 값 제거 > 오름차순 정렬 > 인덱스로 원래 배열 바꾸기)을 진행했더니 코드가 깔끔해졌다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
input = sys.stdin.readline
print = sys.stdout.write
N = int(input())
values = list(map(int, input().split()))
arr = [0] * N
for i in range(N):
arr[i] = values[i]
setArr = list(set(arr)) # 중복된 값 제거
setArr.sort() # 정렬
dictArr = {
value: i for i, value in enumerate(setArr)
} # 새로운 배열 setArr에 인덱스를 부여한 dictArr을 만듬
for value in arr:
print("".join(str(dictArr.get(value))) + " ")
댓글남기기