https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
stack = []
ans = []
result = []
for i in range(9):
num = int(input())
stack.append(num) # num이라는 배열에 입력값 받기
for i in range(9): # 9가지 중 2가지 수를 빼서 나머지 들의 합이 100이 되는지 확인
for j in range(9):
if i == j: # 같은 수를 뺄 때는 continue로 건너뛰기
continue
temp_i = stack[i] # 임시 변수에 받아두기
temp_j = stack[j]
stack[i] = 0
stack[j] = 0
if sum(stack) == 100: # 나머지 수들의 합이 100이 될 경우
ans.append(i) # 두 개의 값을 ans 리스트에 넣어놓고
ans.append(j)
else:
stack[i] = temp_i # 다시 그 자리에 넣기
stack[j] = temp_j
stack[ans[0]] = 0 # 스택에 빼야 되는 수 2개를 넣기
stack[ans[1]] = 0
for s in stack:
if s != 0:
result.append(s) # 빼야되는 수들을 빼고 정답 리스트에 넣고 출력
result = sorted(result)
for s in result:
print(s)
- 접근방식: 맨 처음에는 9가지 수들 중 7가지를 더해줘야하니 재귀로 풀어야 하나 싶었지만, 반대로 생각하여 9가지 중 2가지를 뺐을 때 합이 100이 된다는 것이므로 2가지를 빼줬을 때 합이 100이 되는지 확인하여 풀었다.
- 느낀점: 생각이 막힐 땐 반대로 생각해보자
'자료구조, 알고리즘 > 브루트포스' 카테고리의 다른 글
[백준] 2961 도영이가 만든 맛있는 음식(브루트포스) - Python (0) | 2023.04.18 |
---|---|
[백준] 1436 영화감독 숌(브루트포스) - Python (0) | 2023.04.14 |
[백준] 10974 모든 순열(브루트포스) - Python (0) | 2023.04.05 |