문제
포켓몬 전국도감 번호->이름/이름->전국도감 번호 말하기. (입력 순서가 일단 전국도감 아니면 관동 도감같은데…)
Reference
https://blockdmask.tistory.com/556
풀이
해시는 나도 뭔지 잘 모르는데 아무튼 빠르다고 한다. 그보다 일단 18년차 포덕으로서… 몇가지 정정하고 가도록 합시다… 문제적 허용으로 봐주세요 여러분.
- 문제에 나온 도감 번호는 관동 도감으로 추정된다. (오박사가 아직 전국도감 안준듯)
- 보통 리그에서 챔피언 뚝배기 깨면 전국도감으로 업그레이드는 걍 해준다. FRLG는 도감에 일정 마리수 이상 등록도 해야 하는데 BDSP는 걍 챔피언 깨니까 업글해줌. (물론 채우면 보상이 있다)
- 7세대부터 인게임에서는 전국도감이 없어졌다. (BDSP의 경우 전국도감이 생기긴 했는데 5세대 이후로는 못 와서 의미가 없음) 7세대까지는 포켓몬 뱅크, 8세대부터는 포켓몬 홈에서 전국도감을 확인할 수 있다.
- 스타팅으로 받자마자 솔라빔 쓰는 이상해씨는 없습니다… 보통 이런 고위력기 자력기로 배우려면 5~60 넘겨야 한다. 피카츄도 번개까지 배우고 라이츄 만들려면 63인가까지 키워야 한다.
피카츄가 물몸이라 사리 많이 적립된다10만볼트 자력기로 가르치려면 라이츄 만들고 살리거나 피카츄 50대까지 쌩으로 키워야 한다. 아님 기술머신 쓰거나… - 오바람(라이벌)이 스타팅으로 이브이를 가져가는 건 피카츄 버전입니다. 그리고 피카츄 버전은 저 그래픽으로 나온 게 없음. 최근 리메이크 되긴 했는데 그게 스위치 버전으로 렛츠고 피카브이 나온거라 3D 그래픽임. 그거랑은 별개로 스토리에서 이 고증은 어쨌든 잘 살린 게 맞음.
- 전국도감이 지금 905마린가 906마린가 그래서 절대 문제에 뒷번호까지 못 나온다. (러브로스가 905번인가 그럼) 그리고 나도 다 못 외운다.
- 다솜씨 그거 홈에서 모으면 500년 전 마기아나 줍니다. (일단 환상의 포켓몬 중 멜탄/멜메탈도 채워야 함)
다솜씨 포고 시작하겠네 - 1세대(+리메이크)는 주인공이 풀밭으로 나가려고 하면 어머 얘 밖은 위험하니 이걸 데려가렴 하면서 스타팅을 줍니다. (퀴즈 ㄴㄴ 밖은 위험하니 ㅇㅇ)
- 본가는 스토리 라인상 스토리 초반에 리그장에 갈 일이 없다. 악의 조직 뚝배기 깨고 체육관 뚝배기 깨느라 바쁘다.
더 쓸 거 많은데 일단 문제 풀이도 해야 하니 여기까지 합시다.
사실 나도 해시 테이블이 뭔지는 잘 모르는데 뭔가 되게 빨리 찾을 수 있는 모양이더라… 아, 이 문제에서 그래서 해시 테이블을 만드냐면 그건 아니고 딕셔너리로 풀 거다.
import sys
N, M = map(int, sys.stdin.readline().split())
pokemon_name = []
pokemon_dic = {}
N은 포켓몬 도감 딕셔너리(…) 그니까 관동도감 상위 n마리를 뜻하고, M은 거기서 문제가 몇 개냐를 얘기한다. 즉 N이 28이면 이상해씨~모래두지까지라는 얘기다. 뮤츠는요 150 치면 되지 않을까 이쯤되면 전국도감 크롤링 하는 게 빠를듯
for i in range(N):
pokemon = sys.stdin.readline().strip()
pokemon_name.append(pokemon)
pokemon_dic[pokemon] = i + 1
짜잔. 그래서 리스트와 딕셔너리가 나오는데요… 응? 그럼 리스트는 그저 딕셔너리의 중간과정에 불과한건가요? 놉, 그건 이따 설명해드림.
for _ in range(M):
pokemon_find = sys.stdin.readline().strip()
if pokemon_find.isdigit():
print(pokemon_name[int(pokemon_find) - 1])
else:
print(pokemon_dic[pokemon_find])
문제가 두 가지 케이스인데 포켓몬 이름을 말하면 도감번호를, 도감번호를 말하면 포켓몬 이름을 찾아야 한다. 포켓몬 이름을 말하면 도감번호를 반환하는 건 포켓몬 이름을 키로 검색해서 딕셔너리 밸류 뽑으면 되는데… 그럼 도감 번호는??? 헐 이거 밸류로 찾을 수 있어요? 아니 그래서 리스트가 필요한거임.
isdigit()는 입력값이 숫자인지를 확인해주는거기 때문에 알파벳이건 한글이건 빵상빵상이건 외계어건 마인크래프트어건 안농핫삼이건 문자열이 있으면 false다. 매우 순수하게 숫자만 있어야 True기 때문에 isdigit()이 true라는 건 숫자만 있다, 즉 도감 번호라는 얘기니까 정수형으로 변환한 다음 거기에 1을 빼서 인덱싱하면 된다. 참 쉽죠?
Reply