๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€

[BAEKJOON] 17299 | ์˜ค๋“ฑํฐ์ˆ˜

by flowing1ife 2024. 11. 21.

๐Ÿ”Ž 17299 | ์˜ค๋“ฑํฐ์ˆ˜

https://www.acmicpc.net/problem/17299


๐Ÿ’ก Solution

Callout Box
โœ๐Ÿป
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]))

Toggle Example
โ–ถ ๐Ÿ“Œ 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)