[Algorithm] 백준 2309: 일곱 난쟁이 - Python(파이썬)

하이초·2022년 6월 30일
0

Algorithm

목록 보기
2/94
post-thumbnail

💡 백준 2309: 일곱 난쟁이

돌아온 아홉 난쟁이들 중 난쟁이들의 키의 합이 100이라는 단서를 토대로 스파이 2명을 제외한 일곱 난쟁이들을 순서대로 출력


🌱 코드 in Python

알고리즘: Brute Force

import sys

seven = [int(sys.stdin.readline()) for i in range(9)]
ret = sum(seven)
flag = 0
for i in range(8):
	for j in range(i + 1, 9):
		if (ret - (seven[i] + seven[j]) == 100): # 아홉 난쟁이들의 키 합에서 차례대로 선택된 두 난쟁이의 키를 뺀 값이 100일 경우 그 두명이 잡았다 요놈!
			a, b = seven[i], seven[j]
			seven.remove(a)
			seven.remove(b)
			seven.sort()
			flag = 1 # 가능한 정답이 여러가지인 경우에는 아무거나 출력하라고 되어 있으므로, 답을 찾을 경우 바로 종료할 수 있도록 flag 처리
			for k in range(7):
				print(seven[k])
			break
	if (flag == 1):
		break

🧠 기억하자

브루트포스 관련 문제로 크게 어렵지 않게 풀 수 있었던 문제였다.

이 문제를 풀면서 새롭게 알게된 건,

seven = [int(sys.stdin.readline()) for i range(0)]

바로 이 부분! 이렇게 리스트를 만들 수 있다니 😮 왕 신기 파이썬.. 정말 신기한 게 많군요?

그치만 신기한 걸로 끝낼 순 없으니까, 여기서 궁금했던 것 ☝🏼한가지.

list = list(map(int, sys.stdin.readline().split())

이 전까지 공백을 기준으로 한 줄에 입력값이 여러개 들어올 경우 위와 같이 작성을 해왔는데

list = [map(int, sys.stdin.readline().split())]

저런 형태가 가능하다면 이렇게 쓰는 것도 되나? 대괄호가 list로 형변환을 해주는건가? 하는 의문이 들었다


하지만 저렇게 작성하면 바로 뚜들뚜들 TypeError를 맞게 된다

왜? 🤔 list = [] 와 같은 식으로 선언도 가능하면서 대체 why??
대괄호가 list형으로 만들어 주는 거 아니었어? 했지만, 경기도 오산이었나보다 map으로 받은 것은 여전히 map형이었다

그렇다면 처음과 같은 입력은 어떻게 가능한 것일까?
아직 파이썬을 제대로 공부하질 않아서 자세히는 모르겠지만

list = [0 for i in range (9)]

이와 같이 대괄호 내에서 for 문으로 입력값을 채울 경우 각 요소마다 해당 값을 list.append(i) 형태로 list에 넣어주는 것 같다

결국, 대괄호 내에 iterable한 요소가 있을 경우 해당 요소들을 순회하며 append 함수가 실행되는 꼴이라고 보면 될 것 같다
내가 의문을 가진 형태는 map형으로 반환되기 때문에 iterable하지 않아서 적용이 될 수 없었던 것이다
따라서 map형과 같은 경우에는 list()와 같이 형변환을 해줘야지만 list로 사용이 가능하다는 것!
파이썬에서는 iterator 객체들에 대한 이해도가 높아야 잘 써먹을 수 있는 함수들이 많은 것 같다

이딴 것도 몰라? 할 수 있지만, 예! 저는 이딴 것도 몰랐습니다!

✌🏼 두번째로 생각해 볼 것은 삽질했던 부분.
해당하는 두 난쟁이를 찾고나서 값을 저장하지 않고 바로 seven.remove(i), seven.remove(j) 같은 멍청한 짓을 했었다
index가 바뀌잖아요 이 멍청아! 기억하자 기억하자!
풀다가 아니 이게 왜 값이 안 나오지..? 하면서 한참 고민함

for문 돌릴 때 range값도 좀 생각을 하시길..
그것때문에 얼탱이 없이 백준에서 시도 횟수가 한 번 더 늘어났다 ㅎ
내 정답률 또르륵 눈물이 흘러간다 또르륵

백준 2309 바로가기

profile
개발국대가 되는 그 날까지. 지금은 개발 응애.

0개의 댓글