컴퓨터 공부/📚 Baekjoon(백준)

[백준/알고리즘/python/java] 2309번 - 일곱 난쟁이

letzgorats 2022. 9. 27. 21:24

이미지를 누르면 문제 링크를 보실 수 있습니다.
이미지를 누르면 문제 링크를 보실 수 있습니다.

단순한 그리디 문제였다.

맨 처음에는 그리디가 아니라 dp문제인가 싶었다. 이전에도 풀었던 기록이 있어서 단순한 그리디로도 풀릴 듯해서 바로 푼 문제였다.

 

코드는 아래와 같다.

import sys
input = sys.stdin.readline

height = []
for _ in range(9):
    height.append(int(input()))

diff = sum(height)-100  # 9명의 난쟁이 키의 합과 100의 차이를 구한다
find_two_false = False  # find_two_false라는 초기변수를 False로 설정한다.

for i in height:
    for j in height[1:]:
        if i + j == diff: # height를 돌면서 두 난쟁이의 합이 diff와 같으면
            height.remove(i)  # 그 난쟁이들은 가짜 난쟁이이므로 제거
            height.remove(j)  
            find_two_false = True # 두 가짜 난쟁이를 찾았으니 find_two_false라는 초기변수를 True로 설정한다.
            break
    if find_two_false == True:  # 두 가짜 난쟁이를 찾았으면
        height.sort()           # 정렬하고
        print(*height,sep="\n") # 한 줄에 하나씩 출력, *를 사용할 때는 sep 사용
        break

for문을 통해 print()로 한 줄에 하나씩 출력하는 방법이 아닌

unpacking operator인 *를 사용해서 리스트를 구분자(sep)를 넣어 바로 출력하는 방법을 배웠다.

이전에도 사용했던 방식인데, 다시 감을 살려야 겠다.


*를 사용해서 unpacking한 데이터로 전달해야 sep를 적용할수 있다.

반응형