왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.
아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.
아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.
📌 문제 탐색하기
우리가 문제를 이해해가는 과정을 작성하시면 됩니다.
- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정
- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정
- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정 등을 작성해주시면 됩니다.
알고리즘 선택
- 완전탐색 알고리즘
📌코드 설계하기
위의 문제 탐색하기에서 고민한 과정을 토대로 문제 풀이에 대한 실마리를 잡으셨을 것 같습니다.
이제 문제 풀이를 본격적으로 하기 전, 이 문제를 풀기 위한 로드맵을 그려보겠습니다.
어떤 순서로 코드를 작성해야 할지, 어떤 함수들을 작성해야 할지 등을 작성해주시면 됩니다.
처음에는 어려울 수 있지만, 문제를 풀기 전 미리 지도를 그린다라는 생각으로 적어나가 보시면 좋을 것 같습니다 :)
- 9명의 난쟁이 키를 입력 받는다. (inputs)
- 9명의 난쟁이 키를 100에서 뺀다. (remain = sum(inputs) - 100) → inputs의 합이 100보다 클 수 밖에 없다.
- 9명의 난쟁이 키를 순서대로 정렬한다. (sorted)
- 정렬된 난쟁이 키 리스트에서 순서대로 2개씩 더했을때 2번의 계산 값이 나오면 리스트에서 지워야 하는 값으로 저장한다. (del_value)
- 저장된 제외 값들을 정렬된 9명 난쟁이 키 리스트에서 지워준다.
📌 시도 회차 수정 사항 (Optional)
- 무문별하게 “맞았습니다”가 나올때 까지 수정하는 형태의 문제 풀이를 반복하면 , 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 됩니다.
- 틀렸습니다를 받았다면 왜 틀렸는지 고민해보고 , 어떻게 수정할 수 있는지 고민하는 과정을 작성해주시면 됩니다.
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검해보세요
- 한번에 맞출수도 있기 때문에 이 칸은 Optional입니다.
실수1
- for문 안에서 list 요소를 지움 → for문에서 리스트 요소가 변경되면 인덱스 불일치 문제가 발생할 수 있다.
- 결과를 출력할 때 리스트로 출력..
📌정답 코드
import sys
# get inputs
n = 9
inputs = [int(sys.stdin.readline().strip()) for _ in range(n)]
# sum(inputs) - 100
remain = sum(inputs) - 100
sort_input = sorted(inputs)
for i in range(n):
for j in range(i + 1, n):
if sort_input[i] + sort_input[j] == remain:
del_value = [sort_input[i], sort_input[j]]
break
for value in del_value:
sort_input.remove(value)
# print the result
for num in sort_input:
print(num)
반응형
'Study > Algorithm' 카테고리의 다른 글
[코테 챌린지] 3일차. 단어 정렬 (0) | 2024.08.07 |
---|---|
[코테 챌린지] 2일차. 나이순 정렬 (0) | 2024.08.06 |
[Optical Flow] 옵티컬 플로우3 - Optical Flow 개념 이해 (0) | 2023.07.03 |
[Optical Flow] 옵티컬 플로우2 - Motion field 개념 이해 (0) | 2023.07.02 |
[Optical Flow] 옵티컬 플로우 (0) | 2023.06.30 |