โ๋ฌธ์
https://www.acmicpc.net/problem/18870
๋ฉ๋ชจ๋ฆฌ: 149248 KB, ์๊ฐ: 1824 ms
๊ฐ / ์ขํ ์์ถ, ์ ๋ ฌ
์์ง์ ์์ N๊ฐ์ ์ขํ X1, X2, ..., XN์ด ์๋ค. ์ด ์ขํ์ ์ขํ ์์ถ์ ์ ์ฉํ๋ ค๊ณ ํ๋ค.
Xi๋ฅผ ์ขํ ์์ถํ ๊ฒฐ๊ณผ X'i์ ๊ฐ์ Xi > Xj๋ฅผ ๋ง์กฑํ๋ ์๋ก ๋ค๋ฅธ ์ขํ Xj์ ๊ฐ์์ ๊ฐ์์ผ ํ๋ค.
X1, X2, ..., XN์ ์ขํ ์์ถ์ ์ ์ฉํ ๊ฒฐ๊ณผ X'1, X'2, ..., X'N๋ฅผ ์ถ๋ ฅํด๋ณด์.
โ๐ปํ์ด
๋ฌธ์ ๋ฅผ ์ฝ์ด๋ณด๋ฉด Xi > Xj๋ฅผ ๋ง์กฑํ๋ ์๋ก ๋ค๋ฅธ ์ขํ Xj์ ๊ฐ์๊ฐ Xi'๊ณผ ๊ฐ๋ค๊ณ ํ๋ค. ์ ๋ง ๋จ์ํ๊ฒ ์๊ฐํ๋ฉด ์ด์ค๋ฐ๋ณต๋ฌธ์ผ๋ก ํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๊ฐ ์ต์ ์ ๊ฒฝ์ฐ O(N²)์ผ๋ก N์ด ์ต๋ 1,000,000์ธ ์ด ๋ฌธ์ ์์๋ ๋น์ฐํ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
์ขํ 2, 4, -10, 4 ,-9 ๋ก ์ด ๋ค์ฏ๊ฐ ๊ฐ ์ฃผ์ด์ก๋ค. ์ฃผ์ด์ง ์ขํ๋ฅผ ๋ณด๋ฉด X๋ ์ค๋ณต๋ ๊ฐ์ด ์์ ์๋ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ฆฌ๋ set์ผ๋ก ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๊ณ ๋ค์ list๋ก ๋ฐ๊ฟ ์ ๋ ฌํ๋ค.
๊ทธ๋ผ ์ ๋ ฌ๋ list๋ -10, -9, 2, 4๊ฐ ๋ ๊ฒ์ด๋ค. -10๋ณด๋ค ์์ ์ขํ์ ์๋ฅผ ๊ตฌํ๋ฉด 0์ด๊ณ , -9๋ 1, 2๋ 2, 4๋ 3์์ ์ ์ ์๋ค. ์ฆ, ๊ฐ ์ธ๋ฑ์ค๊ฐ Xi > X๋ฅผ ๋ง์กฑํ๋ ์๋ก ๋ค๋ฅธ ์ขํ์ ๊ฐ์๊ฐ ๋จ์ ์ ์ ์๋ค. ์ด ๋, for๋ฌธ์ ์จ์ ์์ฑํ ์๋ ์์ง๋ง ๋ ๊ฐ๋จํ๊ฒ ์ฌ์ ํํ๋ก ๋ง๋ค ์ ์๋ค.
for i in range(len(S)): โก๏ธ dict(zip(S, range(len(S)))
res[s[i]] = i
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ์กด์ ์ฃผ์ด์ง ์ขํ ์์๋๋ก ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐ป์ฝ๋
import sys
input = sys.stdin.readline
N = int(input())
X = list(map(int, input().split()))
S = sorted(list(set(X)))
res = dict(zip(S, range(len(S))))
for x in X:
print(res[x], end=' ')
๐ํ๊ธฐ
N์ด 1,000,000์ธ ๊ฒ์ ๋ณด๊ณ ์ด๋ป๊ฒ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ฌ์ผ ํ๋ ๊ณ์ ๊ณ ๋ฏผํ๋ค. ๊ฐ์๋ฅผ ๊ธฐ๋กํ ์๊ฐ์ ํ์ง๋ง dict๋ ์๊ฐํ์ง ๋ชปํ๋ค. ์์ผ๋ก๋ list๋ก๋ง ๊ธฐ๋กํ๊ธฐ ์ด๋ ค์ธ ๊ฒ ๊ฐ์ ๊ฒฝ์ฐ์๋ dict๋ ๊ณ ๋ คํด์ผ๊ฒ ๋ค.
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] [1์ฐจ]์บ์/Python - Lv.2 (0) | 2025.02.21 |
---|---|
[๋ฐฑ์ค] 2206. ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ/Python - Gold 3 (0) | 2025.02.12 |
[๋ฐฑ์ค] 16928. ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์/Python - Gold5 (0) | 2025.02.10 |
[๋ฐฑ์ค] 7569. ํ ๋งํ /Python - Gold5 (1) | 2025.02.09 |
[๋ฐฑ์ค] 1012. ์ ๊ธฐ๋ ๋ฐฐ์ถ/Python - Silver 2 (0) | 2025.02.06 |