[알고리즘]/BOJ

[백준/Python] 3040번: 백설 공주와 일곱 난쟁이 (완전탐색)

개발새발주발 2023. 3. 6. 10:04
728x90

1. 문제 

 

3040번: 백설 공주와 일곱 난쟁이

매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다.

www.acmicpc.net

 

 

2. 해결 

- 완전탐색 (Brute-Force)를 사용하여 풀었다. 

- 우선 아홉난쟁이 중 합이 100인 난쟁이 7명을 찾아야하는데 7명을 찾기보다는 아닌 2명을 제외하는 것이 더 간단해보인다. 

- (전체 합 - 아닌 두명의 숫자 합)을 통해서 구할 수 있다. 

- 나머지 2명이 중복되지 않게 2중 for 문을 사용해주었다. (아래에 예시 코드를 작성하였다) 

    - 완전탐색을 하며 i,j를 찾아도 9C2 = 36으로 충분히 작은 수가 나오므로 완전 탐색을 사용해도 된다 !! 

for i in range(4):
    for j in range(i+1,4):
        print(i,j)

결과 코드

 

 

 

3. 코드 

dwarfs = [int(input()) for _ in range(9)]

sum_dwarfs = sum(dwarfs)
# print(sum_dwarfs)


for i in range(9):
    for j in range(i+1,9):
        if sum_dwarfs - dwarfs[i] - dwarfs[j] == 100:
            ### 배열에서 삭제가 어려울 땐 그냥 바로 정답 출력해버리기
            for k in range(9):
                if k not in [i,j]:
                    print(dwarfs[k])

어렵지 않은 완전탐색 문제였다. 다만 처음 한 생각은 dwarfs배열에서 del을 사용하여 i,j 인덱스를 삭제하려고 했는데 계속 오류가 떠서 바로 답을 출력하도록 하였다. 이렇게 코테를 칠 때 내가 안되는 부분이 있다면 얼른 다른 방법을 찾는것이 중요할 것 같다..