본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 3040 백설 공주와 일곱 난쟁이 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 9. 17.
728x90
반응형

BaekJoon BOJ 백준 3040 백설 공주와 일곱 난쟁이 문제는 일곱 난쟁이는 광산으로 일을 하러 간다. 어느 날 광산에서 돌아온 아홉 명의 난쟁이는 각각 자신이 백설공주의 일곱 난쟁이라고 우기고 있다. 일곱 난쟁이의 모자에 쓰여 있는 숫자의 합이 100일 때, 진짜 일곱 난쟁이를 구하는 문제이다. 난이도는 Bronze 2이다.

 

BaekJoon 3040 백설 공주와 일곱 난쟁이 문제 정보

출처

- https://www.acmicpc.net/problem/3040

알고리즘 분류

- 브루트 포스 알고리즘 (brute force algorithm)

난이도

- 브론즈 2 / Bronze 2

 

백설 공주와 일곱 난쟁이 문제 요약

  • 매일매일 일곱 난쟁이는 광산으로 일을 하러 간다.
  • 어느 날 광산에서 아홉 난쟁이가 돌아왔다. (왜 그리고 어떻게 아홉 난쟁이가 돌아왔는지는 아무도 모른다) 아홉 난쟁이는 각각 자신이 백설공주의 일곱 난쟁이라고 우기고 있다.
  • 백설공주는 이런 일이 생길 것을 대비해서, 난쟁이가 쓰고 다니는 모자에 100보다 작은 양의 정수를 적어 놓았다. 사실 백설 공주는 공주가 되기 전에 매우 유명한 수학자였다. 따라서, 일곱 난쟁이의 모자에 쓰여 있는 숫자의 합이 100이 되도록 적어 놓았다.
  • 아홉 난쟁이의 모자에 쓰여 있는 수가 주어졌을 때, 일곱 난쟁이를 찾아 모자에 쓰여 있는 수를 출력한다.
  • 모든 숫자는 서로 다르다. 또, 항상 답이 유일한 경우만 입력으로 주어진다.

 

문제 풀이 과정

  1. 아홉 난쟁이의 모자에 적혀있는 정수의 합을 구한다.
  2. 아홉 난쟁이 중 2명의 난쟁이를 선택한다.
  3. 아홉 난쟁이의 정수의 합에서 두 난쟁이의 모자의 정수를 빼서 100이 되면 나머지 일곱 난쟁이들의 모자에 쓰여 있는 수를 출력한다.

 

코드 및 설명
  • num [] - 아홉 난쟁이의 모자에 적혀있는 정수가 저장된 리스트
  • numSum - 아홉 난쟁이의 모자에 적혀있는 정수의 합
num = [int(input()) for _ in range(9)]
numSum = sum(num)
for faker1 in range(8):
    for faker2 in range(faker1 + 1, 9):
        if numSum - num[faker1] - num[faker2] == 100:
            f1, f2 = num[faker1], num[faker2]
            num.remove(f1)
            num.remove(f2)
            for t in sorted(num):
                print(t)
            break
    if len(num) == 7:
        break

BaekJoon 백준 BOJ 3040 백설 공주와 일곱 난쟁이 문제를 파이썬 python 브루트 포스 알고리즘으로 풀어보았다. 난이도는 Bronze 브론즈 2이다. 

728x90
반응형

댓글