[BOJ]๋ฐฑ์ค€#1092 Gold 5 ๋ฐฐ ๐Ÿ‹ (Python, ํŒŒ์ด์ฌ)

์ž„์ค€์„ฑยท2022๋…„ 5์›” 24์ผ
0

๋ฐฑ์ค€ Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
13/59
post-thumbnail

๋ฐฑ์ค€ 1092๋ฒˆ
https://www.acmicpc.net/problem/1092


๋ฌธ์ œ



ํ›„๊ธฐ

โฐ ํ’€์ด์‹œ๊ฐ„ 6์‹œ๊ฐ„ ++โฐ

์‹œ๊ฐ„ ์ดˆ๊ณผ, Value Error, Index Error, ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค

๋ชจ๋“  ์˜ค๋‹ต์„ ๋‹ค ๊ฒช์€ ๋ฌธ์ œ์˜€๋‹ค.

์–ด๋– ํ•œ ๋ฐ•์Šค๋„ ๋“ค ์ˆ˜ ์—†๋Š” ํฌ๋ ˆ์ธ์€ ์“ธ๋ชจ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ ์ œ๊ฑฐํ•˜๊ณ ,

ํฌ๋ ˆ์ธ์„ ๊ฐ€์žฅ ํฐ ์ˆœ์„œ๋ถ€ํ„ฐ ์ •๋ ฌํ•œ ํ›„, ๋ฐ•์Šค์˜ list ์•ˆ์—์„œ ๋“ค ์ˆ˜ ์žˆ๋Š”

๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ๋ฐ•์Šค๋ถ€ํ„ฐ ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ–ˆ๋‹ค.

ํ•ด๋‹น ๋ฐ•์Šค๋ฅผ ๋“ค๊ณ ๋‚˜๋ฉด ๋ฐ•์Šค๋ฅผ pop ํ•˜๊ณ , ๋‹ค์Œ ํฌ๋ ˆ์ธ์œผ๋กœ ๋„˜์–ด๊ฐ€๋ฉฐ,

๋‹ค์Œ ํฌ๋ ˆ์ธ์ด ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐ•์Šค๊ฐ€ ์—†์œผ๋ฉด, ๊ทธ ํฌ๋ ˆ์ธ์€ pop ํ•œ๋‹ค.

ํฌ๋ ˆ์ธ์„ 1๋ฐ”ํ€ด ๋‹ค ์“ฐ๋ฉด time ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๊ณ 

์˜ˆ์ œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ๋ชจ๋‘ ๋‚˜์˜ ๋‹ต๊ณผ ์ผ์น˜ํ–ˆ๋‹ค. ๊ทธ๋ฆฌํ•˜์—ฌ ์ •๋‹ต์ด๋ผ ์ƒ๊ฐํ•˜๊ณ  ์ œ์ถœํ•˜์˜€๋‹ค.


ํ•˜์ง€๋งŒ ํฌ๋ ˆ์ธ๊ณผ ๋ฐ•์Šค์˜ ๋ฌด๊ฒŒ๋ฅผ ๊ณ„์† ๋น„๊ตํ•˜๊ณ  ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ณผ์ •์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

๊ฒฝํ—˜์ƒ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์›ฌ๋งŒํ•˜๋ฉด ์ ‘๊ทผ ๋ฐฉ์‹ ์ž์ฒด๊ฐ€ ์ž˜๋ชป ๋œ ๊ฒƒ์ด์—ˆ๋‹ค.



์ฝ”๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜์ •ํ•˜์˜€์ง€๋งŒ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๊ณ , ์•„์˜ˆ ์ „๋ถ€ ์ง€์šด ํ›„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

์ผ์ผ์ด ๋น„๊ตํ•˜๋ฉด์„œ ๋ฐ•์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

for๋ฌธ ์•ˆ์—์„œ ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ๋ฐ•์Šค๋ถ€ํ„ฐ ํฌ๋ ˆ์ธ์˜ ๋ฌด๊ฒŒ์™€ ๋น„๊ตํ•˜์—ฌ

๋“ค ์ˆ˜ ์žˆ์œผ๋ฉด ๋“ค๋ฉด ๋˜๋Š”๊ฒƒ์ด์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฐ•์Šค๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋‹ค์Œ ํฌ๋ ˆ์ธ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

ํ’€๊ณ  ๋‚˜๋‹ˆ ํ—ˆ๋ฌดํ–ˆ์ง€๋งŒ, ์˜ค๋žœ ์‹œํ–‰ ์ฐฉ์˜ค๋กœ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋‚˜์˜ค๋ฉด ์ตœ๋Œ€ํ•œ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•˜๋Š”

๋ฐฉํ–ฅ์„ ๋จผ์ € ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๋ฅผ ์–ป์€ ๊ฒƒ ๊ฐ™๋‹ค..

๋‚˜์˜ ์ž˜๋ชป๋œ ํ’€์ด

import sys

input = sys.stdin.readline

box = []

n= int(input())

crain = sorted(list(map(int,input().split())))

m= int(input())

box =(sorted(list(map(int,input().split()))))

crain.reverse()
box.reverse()


k= min(box)
remove_list = []

for i in crain:

    if i<k:

        remove_list.append(i)

for i in remove_list:

    if i in crain:

        crain.remove(i)

#์–ด๋– ํ•œ ๋ฐ•์Šค๋„ ๋“ค์ˆ˜์—†๋Š” ํฌ๋ ˆ์ธ์€ ์ผ๋‹จ ์ œ๊ฑฐํ•˜๊ณ  ์‹œ์ž‘ํ•œ๋‹ค.



#์•ž์—์„œ ๋ถ€ํ„ฐ 1๊ฐœ์”ฉ ๋น„๊ตํ•ด ๊ฐ€๋ฉด์„œ ํšŒ์ „ํ•œ๋‹ค
#crain์˜ ๊ธธ์ด๋งŒํผ ๋‹ค ๋Œ๋ฉด pass ํ•˜๋ฉด์„œ box๋ฅผ cnt๋งŒํผ popํ•œ๋‹ค. 
#crain์˜ ๊ธธ์ด๋ฅผ ๋‹ค ๋Œ๊ธฐ ์ „์— ํ•ด๋‹น list๊ฐ€ ๋ง‰ํžˆ๋ฉด crain์„ ์ธ๋ฑ์Šค ๊ฐ’๋งŒํผ popํ•œ๋‹ค.  ๋‹ค์‹œ ๋ฐ˜๋ณต์‹œ์ž‘ 
time = 0
cnt = 0

while True:


    max_box = 0
    new_max_box = 0

    for i in range(len(crain)):

        error = 0  #ํฌ๋ ˆ์ธ ์ฒดํฌ์šฉ 

        for j in box: #๋ฐ•์Šค์•ˆ์—์„œ 

            if j<= crain[i]:  #ํฌ๋ ˆ์ธ์ด ํ•ด๋‹น ๋ฐ•์Šค๋ณด๋‹ค ํฌ๋‹ค๋ฉด 

                max_box=j  #์ด ๋ฐ•์Šค๋Š” ํ•ด๋‹น ํฌ๋ ˆ์ธ์œผ๋กœ ๋“ค์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค. 

                error +=1 #์ด ํฌ๋ ˆ์ธ์€ ์“ธ๋ชจ์žˆ์Šต๋‹ˆ๋‹ค. 
            
            if max_box>new_max_box:  # ๋“ค์ˆ˜์žˆ๋Š” ๋ฐ•์Šค์ค‘ ๊ฐ€์žฅ ํฐ ๋ฐ•์Šค๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•จ 

                new_max_box = max_box

        if error ==0:  #ํฌ๋ ˆ์ธ์ด ์“ธ๋ชจ์—†์œผ๋ฉด  

            crain.pop(i) #์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. 
            
        box.remove(new_max_box) #1๋ฃจํ‹ด์„ ๋Œ๊ณ  crain[i]๋กœ ๋“ค์ˆ˜์žˆ๋Š” ๊ฐ€์žฅ ๋ฌด๊ฑฐ์šด ๋ฐ•์Šค๊ฐ€ ์ œ๊ฑฐ๋จ 

        if len(box)==0:   #๋”์ด์ƒ ์˜ฎ๊ธธ ๋ฐ•์Šค๊ฐ€ ์—†์œผ๋ฉด 

            print(time+1)  #์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š”๋ฐ, ์ง„ํ–‰์ค‘์ธ ์ƒํ™ฉ์—์„œ ์ข…๋ฃŒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์€ 1 ์ฆ๊ฐ€ํ•ด์„œ ์ถœ๋ ฅ 
            exit()        

        max_box=0
        new_max_box = 0

        cnt +=1 #ํฌ๋ ˆ์ธ์„ 1๊ฐœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 

        if cnt == len(crain):  #ํฌ๋ ˆ์ธ์„ ํ•œ๋ฐ”ํ€ด ๋‹ค ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด 

            time +=1 # ์†Œ์š”์‹œ๊ฐ„ 1 ์ฆ๊ฐ€ 

            cnt = 0 #ํฌ๋ ˆ์ธ ์‚ฌ์šฉํšŸ์ˆ˜ ์ดˆ๊ธฐํ™”




๋‚˜์˜ ํ’€์ด

import sys

input = sys.stdin.readline

box = []

n= int(input())

crain = sorted(list(map(int,input().split())))

m= int(input())

box =(sorted(list(map(int,input().split()))))

crain.reverse()
box.reverse()

if box[0] > crain[0]:  #๋“ค์ˆ˜์žˆ๋Š”๊ฒŒ ์—†์œผ๋ฉด -1์ถœ๋ ฅํ›„ ์ข…๋ฃŒ 
    print(-1)
    exit()

time = 0

while len(box) > 0: #๋ฐ•์Šค๊ฐ€ ์ „๋ถ€ ์˜ฎ๊ฒจ์งˆ๋•Œ๊นŒ์ง€ 

    time += 1

    # ํฌ๋ ˆ์ธ์„ ๋Œ๋ฉด์„œ ๋ฐ•์Šค๋ฅผ ์˜ฎ๊ธด๋‹ค. 
    for i in crain:

        for j in range(len(box)):

            if i >= box[j]: #์˜ฎ๊ธธ์ˆ˜ ์žˆ๋‹ค๋ฉด 

                del box[j]  #๊ทธ ๋ฐ•์Šค๋ฅผ ์ง€์šด๋‹ค. 

                break # ๊ทธ ๋‹ค์Œ crain์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค. 

print(time)
profile
์•„๋ฌด๋ตํฌ ์žˆ์ด

0๊ฐœ์˜ ๋Œ“๊ธ€