๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

BOJ 1092 : ๋ฐฐ (Python) ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ ํ’€์ด

BOJ 1092 : ๋ฐฐ (Python)

adorableco 2023. 2. 20. 22:28
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

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

 

1092๋ฒˆ: ๋ฐฐ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๊ฐ ํฌ๋ ˆ์ธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๊ฐ’์€ 1,000,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ์…‹์งธ ์ค„์—๋Š” ๋ฐ•์Šค์˜ ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. M์€ 10,000๋ณด

www.acmicpc.net

 

 

์ฝ”๋“œ

import sys

n = int(sys.stdin.readline()) #ํฌ๋ ˆ์ธ ์ˆ˜
limit = [[0 for i in range(2)] for j in range(n)] #๊ฐ ํฌ๋ ˆ์ธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์„ 0์—ด์—, ๊ฐ ํฌ๋ ˆ์ธ์ด ์ด๋™์‹œํ‚จ ๋ฐ•์Šค์˜ ์ˆ˜๋ฅผ 1์—ด์— ๋„ฃ๋Š” ๋ฐฐ์—ด

array = list(map(int, sys.stdin.readline().split())) #ํฌ๋ ˆ์ธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ

for i in range(n):
    limit[i][0] = array[i]
    
limit.sort(reverse = True) #limit ๋ฐฐ์—ด์„ ๋‚ด๋ฆผ์ฐจ ์ˆœ์œผ๋กœ ์ •๋ ฌ

m = int(sys.stdin.readline()) #์ƒ์ž ์ˆ˜
weight = list(map(int, sys.stdin.readline().split()))
weight.sort(reverse = True) #weight ๋ฐฐ์—ด์„ ๋‚ด๋ฆผ์ฐจ ์ˆœ์œผ๋กœ ์ •๋ ฌ

i = 0
q = 0
for i in range(m-1):
    limit.sort(reverse = True)
    if weight[i] <= limit[(i+n-q)%n][0]: #์ƒ์ž์˜ ๋ฌด๊ฒŒ๊ฐ€ ํฌ๋ ˆ์ธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
        limit[(i+n-q)%n][1] += 1 #ํฌ๋ ˆ์ธ์œผ๋กœ ์ƒ์ž๋ฅผ ์ด๋™
    else:
        for j in range((q+n)%n,(i+n-q)%n): #๊ฐ€๋Šฅํ•œ ์™ผ์ชฝ ํฌ๋ ˆ์ธ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋งค์นญ ์‹œ์ž‘
            if weight[i] <=limit[j][0]: #์ƒ์ž์˜ ๋ฌด๊ฒŒ๊ฐ€ ํฌ๋ ˆ์ธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด
                limit[j][1] += 1 #ํฌ๋ ˆ์ธ์œผ๋กœ ์ƒ์ž๋ฅผ ์ด๋™
                q+=1 # ๋‹ค์‹œ else๋ฌธ์— ๋“ค์–ด์™”์„ ๋•Œ ๊ฐ€๋Šฅํ•œ ์™ผ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ๋ฏธ๋ฃจ๊ธฐ ์œ„ํ•ด ๋„ฃ์Œ
                break

if limit[limit.index(max(limit,key = lambda x:x[1]))][1] == 0: #1์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ€์žฅ ํฐ ๊ฐ’
    print(-1)
else:
    print(limit[limit.index(max(limit,key = lambda x:x[1]))][1])

 

 

ํ’€์ด

ํฌ๋ ˆ์ธ๊ณผ ๋ฐ•์Šค๋“ค์„ ๋‚ด๋ฆผ์ฐจ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๋’ค์— ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํฌ๋ ˆ์ธ์— ๋ฐ•์Šค๋ฅผ ํ•˜๋‚˜์”ฉ ๋งค์นญ์‹œํ‚จ๋‹ค.

 

ex)

3
6 8 9
5
2 5 2 4 7

์œ„์™€ ๊ฐ™์ด ์ž…๋ ฅ์„ ๋ฐ›์•˜๋‹ค๋ฉด

 

ํฌ๋ ˆ์ธ์€ 9 8 6

๋ฐ•์Šค๋Š” 7 5 4 2 2

 

9 8 6
7 5 4

ํ•˜๋‚˜์”ฉ ๋งค์นญ์„ ์‹œํ‚ค๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•˜๋ฉด ๋‹ค์‹œ 0๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๋งค์นญ์‹œํ‚จ๋‹ค.

 

9 8 7
7 5 4
2 2  

ํ•œ ํฌ๋ ˆ์ธ์ด ๊ฐ€์ง„ ์›์†Œ๋“ค์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 2๊ฐœ์ด๋ฏ€๋กœ ๋‹ต์€ 2๊ฐ€ ๋œ๋‹ค. 

 

๋งŒ์•ฝ ๋งค์นญ ์ค‘์— ํฌ๋ ˆ์ธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ๋ณด๋‹ค ๋ฐ•์Šค์˜ ๋ฌด๊ฒŒ๊ฐ€ ๋” ํฐ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋งค์นญ์„ ์‹œ์ž‘ํ•œ๋‹ค.

else:
        for j in range((q+n)%n,(i+n-q)%n):
            if weight[i] <=limit[j][0]:
                limit[j][1] += 1
                q+=1
                break

 

 

๋ฐ˜๋ก€... ์˜ค๋ฅ˜...

4
4 3 2 1
8
1 1 2 2 3 3 4 4

์œ„์™€ ๊ฐ™์ด ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ์— ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์€ 2์ธ๋ฐ ๋งˆ์ง€๋ง‰ 1์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์˜ ์ธ๋ฑ์Šค์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ณ  ๋‹ค์‹œ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ๋งค์นญ์„ ์‹œ์ž‘ํ•ด์„œ 3์œผ๋กœ ์ž˜ ๋ชป ๋‚˜์˜จ๋‹ค...

 

 

 

์˜ฌ๋ฐ”๋ฅธ ํ’€์ด

ํฌ๋ ˆ์ธ๊ณผ ๋ฐ•์Šค๋“ค์„ ๋‚ด๋ฆผ์ฐจ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

๋ฐ•์Šค๊ฐ€ ๋‚จ์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ ์•„๋ž˜์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

ํฌ๋ ˆ์ธ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๋ฐ•์Šค๋ฅผ ๋‹ด๊ณ  ๋‹ค์Œ ํฌ๋ ˆ์ธ์œผ๋กœ ๋„˜์–ด๊ฐ€์„œ ๋‹ค์‹œ ๋˜ ํฌ๋ ˆ์ธ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํฐ ๋ฐ•์Šค๋ฅผ ๋‹ด๊ณ .... x ๋ฌดํ•œ๋ฐ˜๋ณต

→ํฌ๋ ˆ์ธ์— ๋‹ด์€ ๋ฐ•์Šค๋Š” ๋ฐ•์Šค ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•