공부하는허딩크 : https://www.youtube.com/live/S9Tn1JM6-yc?feature=shared
문제가 너무 길다. 다 필요 없고 입력과 출력 조건만 보면 된다.
결론은 도감에 수록되어 있는 몬스터들이 있다. 그 다음 문제로 내는 몬스터 이름과 숫자가 도감에 있는지 여부 및 출력하는 것이다.
시간제한 2초로 도감을 list로 만들어서 enumerate로 인덱스와 값을 찾아서 문제를 풀기에는 일단 시간초과가 나올 것으로 예상되었다.
<첫번째 시도 : 시간초과>
일단 도감을 dict로 만들어주고 문제를 하나씩 받아서 value와 key값을 비교 후 출력함 => 이중for문 사용
#시간초과 : 이중for문을 풀어야함.
N, M = map(int, input().split())
monster = {}
for i in range(1, N + 1):
name = input().strip()
monster[i] = name
for _ in range(M):
question = input().strip()
for key, value in monster.items():
if question == value:
#print("정답 :", key)
print(key)
elif question == str(key):
#print("정답 :", value)
print(value)
<두번째 시도 : 통과>
도감을 dict로 만들어 주는 건 동일하나, 도감을 2개 만들었다. key와 value가 반대로 되는 도감을 하나 더 만들어서
문제를 받을때 마다 if로 조건 체크 후 출력함.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
monster = {}
for i in range(1, N + 1):
name = input().strip()
monster[str(i)] = name
monster_reverse = {value: key for key, value in monster.items()}
for _ in range(M):
question = input().strip()
if question in monster.keys():
print(monster[question])
elif question in monster_reverse.keys():
print(monster_reverse[question])
<다른사람풀이 참고>
1. 도감 만들때 부터 2개로 만든다. : 굳이 나중에 iterms()사용 하지 않아도 됨.
N, M = map(int, input().split())
monster = {}
monster_re = {}
for i in range(1, N + 1):
name = input().strip()
monster[str(i)] = name
monster[name] = str(i)
2. isdigit()과 isnumeric() 사용
ㄴ isdigit()은 0~9까지의 숫자로만 사용되었는지 확인 : 소수점이나 음수 기호와 같은 다른 유형의 숫자는 인식하지 않음
ㄴ isnumeric()은 isdigit보다 더 넓은 범위 숫자형식 : 유니코드의 숫자형식, 로마숫자, 중국어숫자등
내 코드보다 아래의 코드로 수정하는 것이 조금 더 효율적이고 가독성이 좋다.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
monster = {}
monster_re = {}
for i in range(1, N + 1):
name = input().strip()
monster[i] = name
monster_re[name] = i
for _ in range(M):
question = input().strip()
if question.isdigit():
print(monster[int(question)])
else:
print(monster_re[question])
3. try, except사용 : 나도 코드 작성시 이걸 생각했는데 굳이 필요 없을 것 같아서 안했음. try except가 아직 익숙하지 않음.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
monster = {}
monster_re = {}
answer = []
for i in range(1, N + 1):
name = input().strip()
monster[i] = name
monster_re[name] = i
for _ in range(M):
question = input().strip()
try:
num = int(question)
answer.append(monster[num])
except ValueError:
answer.append(monster_re[question])
for i in answer:
print(i)