try 5 times / 난이도 : ★★★★★ (난이도는 제가 느끼는 매우 주관적인 난이도입니다.)
문제 확인
코드 깃허브 확인
정답 해설
9명중에 두 명(one,two)를 빼서 100이 된다면 그 원소들을 리스트에서 빼준다.
그 후, 일곱 난쟁이의 키를 오름차순으로 출력한다.
one이 1인 경우, two는 1을 제외한 2부터 for문으로 반복되어야 하기 때문에 범위는 range(i+1,9)와 같다.
import sys
heights = []
for i in range(9):
heights.append(int(sys.stdin.readline())) # 한줄에 여러 입력 값
total = sum(heights)
one = 0
two = 0
for i in range(9):
for j in range(i+1, 9):
if total - (heights[i] + heights[j]) == 100:
one, two = heights[i], heights[j]
break
heights.remove(one)
heights.remove(two)
heights.sort() # 오름차순 정렬
# 출력
for i in heights:
print(i)
공부한 내용
1. sys.stdin.readline()
sys 라이브러리를 불러와주었다.
아홉 난쟁이의 키를 아홉 개의 줄에 걸쳐 입력값을 받는 문제이다.
여러줄을 입력 받아야할 때는 input()으로 입력 받는다면 시간초과가 발생할 수 있다. 그런 경우, sys.stdin.readline()을 사용한다.
sys.stdin.readline()은 한 줄 단위로 입력 받으므로 for문을 9번 반복했음을 확인할 수 있다.
# 방법1
heights = []
for i in range(9):
heights.append(int(sys.stdin.readline())) # 한줄에 여러 입력 값
# 방법2
data = lambda: sys.stdin.readline().rstrip() # 오른쪽 공백 삭제
heights = [int(data()) for _ in range(9)]
## 함수를 딱 한 줄로 만들게 해주는 lambda
## lambda 매개변수 : 표현식
# 방법3
heights = [int(input()) for i in range(9)]
- 방법1 : 빈 리스트에 sys.stdin.readline()으로 생긴 입력값을 int변환하여 append
- 방법2 : sys.stidin.readline.rstrip() + int + for문
- 방법3 : input() + int + for문
결과는 모두 동일! heights list 형태!
2. 다른 풀이 이해하기
1. 가짜 난쟁이의 인덱스를 직접 지정하여 삭제하기
bool 타입의 변수 finish를 만든다.
가짜 난쟁이 두명을 찾으면 변수 finish 변수를 False에서 True로 지정하여 for문을 탈출하도록 한다.
새로운 리스트 save를 만들어 가짜 난쟁이들의 인덱스를 따로 저장해준다.
save[0]에는 i의 값이, save[1]에는 j의 값이 저장되어 있다. save[0]을 삭제하면 원소 한 개가 없어지기 때문에 정확한 가짜 난쟁이의 인덱스를 찾기 위해서는 save[1]에서 1을 빼줘야한다.
finish = False
for i in range(8):
for j in range(i + 1, 9):
if (heights[i] + heightts[j] == sum - 100):
save = [i, j]
finish = True
break
if (finish):
break
1
del heights[save[0]]
del heights[save[1] - 1]
2. itertools의 combinations 사용하기
from itertools import combinations
heights = [int(input()) for _ in range(9)]
occation = list(combination(hieights,7)) #9개중에 7개만 선택하는 조합 저장하기
for i in occation:
if sum(i) is 100:a
answer = list(i) # 합이 100이면, list로 저장하기
break
answer.sort()
for i in answer:
print(i)
레퍼런스
- sys.stdin.readline() 설명
- itertools 설명
'Algorithm > 구현' 카테고리의 다른 글
[Python3] 백준 8958번 OX퀴즈 (0) | 2022.01.27 |
---|---|
[Python3] 백준 2609번 최대공약수와 최소공배수 (0) | 2022.01.02 |
[Python3] 백준 10870번 피보나치 수 5 (0) | 2021.12.31 |
[Python3] 백준 2460번 지능형 기차 2 (0) | 2021.12.29 |
[Python3] 백준 10818번 최소, 최대 (0) | 2021.12.28 |
댓글