728x90
문제 1620
이 문제를 풀기 위해 알아야 할 개념은 다음과 같습니다.
> dictionary 자료형
> sys.stdin.readline()
1. 문제 풀이
1) 잘못된 문제 풀이 (시간 초과)
이 문제는 딕셔너리의 키와 값을 이용해서 푸는 것이 더 효율적입니다. 아래와 같이 리스트로 접근하게 되면 시간 초과가 발생합니다.
n, m = map(int, input().split())
list1 = []
res = []
for _ in range(n):
list1.append(input())
for _ in range(m):
str1 = input()
if str1.isdigit():
res.append(list1[int(str1)-1])
elif str1.isalpha():
res.append(list1.index(str1)+1)
print(res)
2) 올바른 문제 풀이
딕셔너리의 { Key : Value } 를 이용하여, 입력받은 값들의 키와 값을 쌍으로 저장하고 나중에 for() 문을 돌려 값을 찾기만 합면 됩니다.
이 문제의 경우 여러 줄의 입력값을 받으므로, sys.stdin.readline() 을 사용한다.
import sys
read = sys.stdin.readline
n, m = map(int, read().split())
dict = {}
for i in range(1, n+1):
str1 = read().rstrip()
dict[i] = str1
dict[str1] = i
for i in range(1, m+1):
str1 = read().rstrip()
if str1.isdigit():
print(dict[int(str1)])
elif str1.isalpha():
print(dict[str1])
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[Baekjoon] 백준 11123번: 양 한마리... 양 두마리... (JAVA) (2) | 2023.10.11 |
---|---|
[Baekjoon] 백준 14248번: 점프 점프 (JAVA) (0) | 2023.10.11 |
[Baekjoon] 백준 5972번: 택배 배송 (JAVA) (0) | 2023.10.09 |
[Baekjoon] 백준 17070번: 파이프 옮기기 1 (JAVA) (0) | 2023.10.08 |
[Baekjoon] 백준 알고리즘(Python) 10815 - 숫자 카드 (0) | 2023.01.06 |