하나씩 알아가기

[BOJ_2309] 일곱 난쟁이 본문

알고리즘

[BOJ_2309] 일곱 난쟁이

clearwater 2021. 1. 24. 16:29
728x90
반응형

틀린 부분이 있을 경우, 지적해 주시면 감사하겠습니다.

아홉 개의 input이 들어오는데 이 중 두 개의 input은 fake고, 일곱 개의 input의 합이 100인 것들만 오름차순으로 출력하면 되는 간단한 문제입니다.

 

브루트 포스(Brute Force)

조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 문제를 해결하는 방법

 

브루트 포스라 이름은 거창한데 원시적인 방법으로 문제를 풀어야 할 경우 사용하는 것 같습니다. 그런데 모든 문제에서 사용되지 않나요?.. 사실 이런 용어가 잘 와닿지는 않네요ㅠ 조금 더 내공이 쌓이면 어떤 경우에 브루트 포스 방법이 사용되는 지 파악이 되는 날이 오면 좋겠네요

 

문제로 돌아와서 9개의 데이터 중 2개의 데이터만 뽑아서 100이 되면 출력하는 식으로 문제를 풀겠습니다.

 

itertools라는 라이브러리가 있는데 파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있습니다.

이것을 사용하면 조합이나 순열을 구하는 클래스를 import하여 사용할 수 있습니다.

두 난쟁이를 뽑는 경우는 순서를 고려하지 않으므로 combinations를 import 하였습니다.

 

일곱 난쟁이의 키를 합한 값이 100이면 출력할 result에서 해당 난쟁이들을 remove로 삭제 해주고

정렬해서 출력하면 됩니다.

 

from itertools import combinations

people = []

for _ in range(9):
    people.append(int(input()))

combList = list(combinations(people, 2))
for x, y in combList:
    result = sum(people) - x - y
    if result == 100:
        people.remove(x)
        people.remove(y)
        people.sort()
        break

for person in people:
    print(person)

 

www.acmicpc.net/problem/2309

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

 

728x90
반응형

'알고리즘' 카테고리의 다른 글

[BOJ_3085] 사탕 게임  (0) 2021.01.24
[BOJ_1476] 날짜 계산  (0) 2021.01.24
[BOJ_15990] 1, 2, 3 더하기 5  (0) 2021.01.23
[BOJ_9095] 1, 2, 3 더하기  (0) 2021.01.22
[BOJ_11727] 2xn 타일링 2  (0) 2021.01.22