Algorithm Study/Python

[백준 파이썬] #2309 일곱 난쟁이

728x90
반응형

풀기 전 생각해보기😮

  • 아홉명 중 조건에 적합하지 않은 2명을 어떻게 구분할까?

풀이🛫

arr = [int(input()) for i in range(9)]
arrSum = 0
odd1, odd2 = 0, 0

# 정렬 : 버블 정렬 사용 연습
for i in range(9):
    for j in range(i+1, 9):
        if arr[i] > arr[j]:
            arr[i], arr[j] = arr[j], arr[i]

for i in arr:
    arrSum += i

for i in range(9):
    for j in range(i+1, 9):
        if arr[i]+arr[j] == arrSum-100:
            odd1, odd2 = arr[i], arr[j]

for i in arr:
    if i == odd1 or i==odd2:
        continue
    print(i)

 

핵심 정리🎁

for i in range(9):
    for j in range(i+1, 9):
        if arr[i]+arr[j] == arrSum-100:
  • 처음엔 더했을 때 100이 되는 일곱 난쟁이의 조합을 찾으려고 했다
  • 그렇지만 효율성 면에서 방해가 되는 2명의 조합을 찾는 것이 훨씬 수월하다고 한다
  • 굳이 9명의 난쟁이를 제시한 것도 이중 for문으로 난쟁이 조합을 찾을 수 있도록 한 출제자의 의도가 아닐까 싶었다
  • 일곱 난쟁이 문제의 경우 너무나도 잘 정리해둔 블로거 분이 있어서 아래에 링크를 첨부한다

 

링크💎

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net

 

 

[백준 문제집][Python 배우기 (101~150)][2309] 일곱 난쟁이

이 글에서 살펴볼 문제는 백준 2309번입니다. 주소는 아래와 같습니다. https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지

feca.tistory.com

 

후기 😎

  • 스페셜 저지는 문제의 답이 여러가지인 경우를 표시한다고 한다!
  • 구현 자체는 어느정도 손에 익어가는데, 풀이를 생각해내는 번뜩이는 아이디어를 유추하는게 쉽지 않다
  • 잘하는 분들을 보면 그저 부러움..