[백준] 2309번: 일곱 난쟁이 (sol.5)

임정규·2024년 8월 6일
0

백준풀이

목록 보기
5/13

풀이시간: 16분

1. 나의 풀이

from itertools import combinations

heights = [int(input()) for _ in range(9)]

for ks in combinations(heights, 7):
    if sum(ks) == 100:
        result = sorted(list(ks))

for i in result:
    print(i)
  • 9명 중에 7명을 뽑는 데, 키의 합을 구하므로 조합을 사용 (순서상관X)
  • tuple은 정렬이 안되므로 list로 형변환하였다. (sorted() 함수로 정렬가능)
  • 답이 여러개일 경우에도 한 변수로 담고 출력하기 때문에 하나만 출력이 된다.
    (답이 여러개인 경우 조건을 놓쳤지만 운이 좋아 맞혔다.)

2. 또다른 풀이

combinations 사용

from itertools import combinations

heights = [int(input()) for _ in range(9)]
for combi in combinations(heights, 7):
    if sum(combi) == 100:
        for height in sorted(combi):
        	print(height)
        break # 답이 여러개인경우 하나만 출력해야한다.

역발상 combinations 미사용

heights = [int(input()) for _ in range(9)]
heights.sort() # 처음부터 정렬가능
tot = sum(heights)

def f():
  for i in range(8):
      for j in range(i+1, 9):
          if tot - heights[i] - heights[j] == 100:
              for k in range(9):
                  if i != k and j != k:
                      print(heights[k])
              return

f()
  • 총합에서 2개를 뺏을 때 100이 되는 것을 찾는다.

3. 보완할 것

  • 튜플은 sorted() 안에 넣어서 정렬 가능하다. 단, 반환되는 데이터형태는 리스트이다.
  • 튜플 자체에 .sort() 메소드가 없는 것 뿐이다.
  • 문제를 끝까지 읽고 모든 조건을 만족하는 지 확인한다.
  • 문제를 역으로 풀어보는 생각도 해본다.
profile
안녕하세요.

0개의 댓글