알고리즘 공부/파이썬(Python)

백준 2309번 일곱 난쟁이 파이썬

마달랭 2024. 6. 24. 21:14

리뷰

브론즈1 문제 치고는 생각보다 어려웠다. 브루트포스 알고리즘 문제를 많이 연습해야 겠다.

문제 풀이

입력될 난쟁이의 수는 9명으로 고정, 난쟁이 7명의 키를 더했을때 정확히 100이 일치한다면 해당 값을 리턴해주면 된다.

즉 9명의 난쟁이 키의 합에서 겹치지 않는 두 난쟁이를 선택하여 해당 난쟁이들의 키를 빼주면 된다.

2중 for문을 사용했기에 위 조건을 만족할 경우 해당 난쟁이를 리스트에서 제거해 주고 break를 통해 for문을 빠져나왔다.

 

주의 : 여기서 실수한 점은 lst[i]와 lst[j]의 값을 a, b와 같은 변수로 초기화 해준 후 remove를 해주어야 한다. 그렇지 않고 lst.remove(lst[i])와 같이 실행했을 경우 lst.remove(lst[j])는 엉뚱한 난쟁이를 리스트에서 제거할 것이다.

추천 반례

없음

정답 코드

def q2309():
    # 백준 2309번 일곱 난쟁이 파이썬
    lst = [int(input()) for _ in range(9)]
    s = sum(lst)
    for i in range(9):
        flag = False
        for j in range(i + 1, 9):
            if s - (lst[i] + lst[j]) == 100:
                a, b = lst[i], lst[j]
                lst.remove(a)
                lst.remove(b)
                flag = True
                break
        if flag:
            break
    print(*sorted(lst))
q2309()
728x90