https://www.acmicpc.net/problem/2309

이 문제는 주어진 아홉 명의 키가 주어졌을 때, 아홉 명 중에서 일곱 명의 키의 합이 100이 되는 경우를 찾는 문제입니다.
문제를 해결하기 위해서는 브루트포스(Brute Force) 알고리즘을 사용할 수 있습니다.
일곱 명의 키의 합이 100이 되는 경우는 아홉 명의 키에서 두 명의 키를 빼면서 가능한 모든 경우를 확인하는 방식으로 문제를 해결할 수 있습니다.
1.아홉 명의 키를 입력받습니다.
2.아홉 명의 키를 오름차순으로 정렬합니다.
3.이중 반복문을 사용하여 아홉 명 중에서 두 명의 키를 선택합니다.
4.첫 번째 선택한 난쟁이의 인덱스를 i로 설정합니다. (0 ≤ i < 9)
5.두 번째 선택한 난쟁이의 인덱스를 j로 설정합니다. (i + 1 ≤ j < 9)
6.선택한 두 명의 키를 뺀 나머지 키들의 합이 100이면, 선택한 난쟁이들의 키를 출력하고 종료합니다.
7.모든 경우를 확인했음에도 일곱 명의 키의 합이 100이 되는 경우가 없다면, 잘못된 입력이 주어진 것이므로 문제의 조건을 충족하는 경우가 존재하지 않는다는 메시지를 출력합니다.
이렇게 함으로써 아홉 명 중 일곱 명의 키의 합이 100이 되는 경우를 찾을 수 있습니다.
코드 구현에 있어서는 위 알고리즘을 바탕으로 적절한 조건문과 반복문을 사용하여 문제를 해결할 수 있습니다.
a = []
def solve(a):
a.sort()
answer = []
# 9명의 키 중, 7명의 합이 100인 경우 탐색
for i in range(9):
for j in range(i+1, 9):
# 두 난쟁이의 키를 뺀 나머지 키의 합이 100이 되는지 확인
total = sum(a) - (a[i] + a[j])
if total == 100:
for idx, x in enumerate(a):
if idx != i and idx != j:
answer.append(x)
answer.sort()
for height in answer:
print(height)
return
# 일곱 난쟁이를 찾을 수 없는 경우
print("일곱 난쟁이를 찾을 수 없습니다.")
# 아홉 명의 키 입력 받기
for _ in range(9):
height = int(input())
a.append(height)
# 문제 해결 함수 호출
solve(a)
enumerate() 함수는 파이썬의 내장 함수로,
순서가 있는(iterable) 자료형(예: 리스트, 튜플, 문자열 등)을 입력받아 인덱스와 값을 포함하는 enumerate 객체를 반환합니다.
각 요소에 대해 인덱스와 값을 쌍으로 순회하면서 접근할 수 있도록 도와줍니다.
enumerate() 함수는 일반적으로 for 루프와 함께 사용됩니다.
fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits):
print(index, fruit)
출력
0 apple
1 banana
2 orange
enumerate() 함수는 각 요소의 인덱스와 값을 반환하는데, 이를 위해 for 루프에서 두 개의 변수(index와 fruit)를 사용하였습니다.
fruits 리스트의 첫 번째 요소는 인덱스 0과 값 'apple'을 가지며, 두 번째 요소는 인덱스 1과 값 'banana'을 가지게 됩니다.
이런 식으로 모든 요소에 대해 인덱스와 값을 순차적으로 반환합니다.
enumerate() 함수는 주로 인덱스 값을 사용해 요소를 수정하거나 특정 조건에 따라 처리할 때 유용합니다.
또한, 순회하면서 요소의 인덱스를 기록하는 등의 작업에도 활용될 수 있습니다.