๐ 17299 | ์ค๋ฑํฐ์
https://www.acmicpc.net/problem/17299
๐ก Solution
Logic
1. ์ค๋ฅธ์ชฝ์ ์์ผ๋ฉด์ ์์ด A์์ ๋ฑ์ฅํ ํ์๊ฐ F(Ai)๋ณด๋ค ํฐ ์ ์ค์์ ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์๋ฅผ ๊ตฌํด์ผ ํ๋ค.
2. ์์ด A์์ ๊ฐ๊ฐ์ ์๊ฐ ๋ฑ์ฅํ ํ์๋ฅผ ๋จผ์ ํ์
ํ๋ค.
3. ์คํฐ์ ๋ฌธ์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํ์ด ๋น์ด์์ง ์๊ณ stack์ top ์์ index์ ํด๋นํ๋ ์์ count๊ฐ ํ์ฌ index์ ํด๋นํ๋ ์์ count๋ณด๋ค ์์ผ๋ฉด result์ stack์ top ์์์ ํด๋นํ๋ index -> ํ์ฌ index์ ํด๋นํ๋ ์๋ฅผ ์ ์ฅํ๋ค.
4. ๊ทธ๋ ์ง ์์ผ๋ฉด stack์ index๋ฅผ pushํ๋ค.
5. ๋ค์์ ๊ณผ์ ์ ์์ด์ ๋์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
from collections import Counter
n = int(input().rstrip())
num_list = list(map(int, input().split()))
count = Counter(num_list)
def getSGNE(num_list, count) :
stack = []
result = [-1] * len(num_list)
for i in range(len(num_list)) :
while len(stack) != 0 and count[num_list[stack[-1]]] < count[num_list[i]] :
result[stack[-1]] = num_list[i]
stack.pop()
stack.append(i)
return result
result = getSGNE(num_list, count)
print(' '.join([str(num) for num in result]))
โถ ๐ Note
โ ์ค๋ช
์ฒ์์๋ list๋ฅผ ์ฌ์ฉํด์ count๋ฅผ ์ธ์๋๋ฐ, ์ด๋ฌ๋ฉด ์์ด์ด 1,3์ฒ๋ผ ์ค๊ฐ์ ์๋ฅผ ๊ฑด๋ ๋ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํด index error๊ฐ ๋ฐ์ํ๋ค.
์ดํ dictionary์ setdefault๋ฅผ ํ์ฉํ์ง๋ง ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ซ์๋ฅผ ๋ค ๋์์ผํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด๊ณผ๊ฐ ์ผ์ด๋ฌ๋ค.
์ต์ข ์ ์ผ๋ก collections์ Counter๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ์ด๊ณผ๋ฅผ ํด๊ฒฐํ๋ค.
โ setdefault(key, defaultValue) - dictionary์ ํด๋น key ๊ฐ์ด ์์ผ๋ฉด key์ ํด๋นํ๋ value๋ฅผ ๋ฐํํ๊ณ , ์๋ค๋ฉด {key: defaultValue}๋ฅผ ์ถ๊ฐํ๋ค. - ์๊ฐ ๋ณต์ก๋๊ฐ O(1)์ด๋ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด O(n)์ด ๋๋ค.
โ Counter - ๋ฐ๋ณต ๋ฐ์ดํฐ๋ฅผ ๋น๋๋ก ์์ฝํ๋ ๋ฐ ์ต์ ํ๋ ํด๋์ค - ๋น๋ ๊ณ์ฐ ์์ฒด๋ O(n), ์ถ๊ฐ๋ก ์ ๋ ฌ ์์ (most_common())์ด ํ์ํ๋ฉด O(n log k)
'์๊ณ ๋ฆฌ์ฆ ๐ฉ๐ปโ๐ป > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON] 1918 | ํ์ ํ๊ธฐ๋ฒ (0) | 2024.11.25 |
---|---|
[BAEKJOON] 1935 | ํ์ ํ๊ธฐ์ 2 (0) | 2024.11.22 |
[BAEKJOON] 17413 | ๋จ์ด ๋ค์ง๊ธฐ 2 (1) | 2024.11.20 |
[BAEKJOON] 10799 | ์ ๋ง๋๊ธฐ (0) | 2024.11.20 |
[BAEKJOON] 17298 | ์คํฐ์ (0) | 2024.11.20 |