웹찢남

[백준 1516 게임 개발 문제] PYTHON 본문

백준 Algorithm

[백준 1516 게임 개발 문제] PYTHON

harry595 2021. 4. 17. 20:09

 

이번 문제는 코드를 조금 복잡하게 구현했다. 더 좋은 방식이 있으리라 생각한다.

우선 while 문을 돌려 모든 건물을 지으면 루프가 끝나도록 했다.

그 후 for 문을 통해 건물 리스트를 계속 돈다.

이때 del_list와 build_list(dictionary)를 만들어 건물이 완공될 경우 각각 값을 넣는다.

del_list는 반복을 줄이기 위해 추가하여 for 문의 i 가 del_list 내에 있는지 확인한다.

build_list는 건물을 짓기 위해 먼저 지어져야 하는 건물의 번호들을 확인 할 수 있다.

필자는 이 부분을 set의 issubset 기능을 사용하여 구현하였다.

마지막으로 건물들이 모두 완공 된 후 build_list를 key를 기준으로 정렬하여 print한다.

 

from sys import stdin

t=int(input())
dic={}
gd=[[0]]
for _ in range(t):
    gd.append(list(map(int, stdin.readline().split())))
build_list={}
del_list=[]
while(len(del_list)!=t):
    lengd=len(gd)
    for i in range(1,lengd):
        if i in del_list:
            pass
        else:
            if( len(gd[i]) == 2):
                build_list[i]=gd[i][0]
                del_list.append(i)
            elif( set(gd[i][1:-1]).issubset(set(build_list.keys()))):
                tmp_list=[]
                for tmp in gd[i][1:-1]:
                    tmp_list.append(build_list[tmp])
                build_list[i]=max(tmp_list)+gd[i][0]
                del_list.append(i)
build_list = sorted(build_list.items(), key=(lambda x: x[0]))
for i in build_list:
    print(i[1])
Comments