본문 바로가기

Algorithm/BOJ

백준 (BOJ) - 17219 비밀번호 찾기 [Python]

반응형

백준을 안 푼지 너무 오래 됐다

다시 깃헙에 잔디 심기 Start

대충 풀 바엔 그냥 풀지말고 그 날은 쉬자 파이팅 

https://www.acmicpc.net/problem/17219

 

17219번: 비밀번호 찾기

첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번

www.acmicpc.net

# 20231230 다시 풀기

import sys
input = sys.stdin.readline
Arr1 = []
Arr2 = []
N, M = map(int, input().split())
for i in range(N):
    Arr1.append(list(map(str, input().split())))

for j in range(M):
    Arr2.append(input().strip())

for j in range(M):
    for i in range(N):
        if Arr2[j] == Arr1[i][0]:
            print(Arr1[i][1])

역시나 

2중 for문은 시간초과 오류가 난다 망할 파이썬 ,,, 

어떻게 해야할까 

 

------- 

생각해보니까 꼭 Array로 하라는 법은 없다. 

import sys

# 입력 받기
N, M = map(int, input().split())
Arr1 = {}
for _ in range(N):
    a, b = input().split()
    Arr1[a] = b

Arr2 = [input().strip() for _ in range(M)]

# 결과 출력
for word in Arr2:
    if word in Arr1:
        print(Arr1[word])

 

이런식으로 dictionary로 해주면 value를 쉽게 print 할 수 있기 때문  

 

아 근데 여전히 채점 시간이 오래 걸린다 

 

다른 사람들은 어떻게 했을까...? 

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
add = {}

for _ in range(N):
    site, ps = input().split()
    add[site] = ps

for _ in range(M):
    print(add[input().rstrip()])

 

애초에 문자열을 사이트와 비밀번호로 나눠서 받은 다음 

add라는 dictionary에 site라는 키와 ps라는 value로 저장하는구나,,, 

 

그 다음 add라는 딕셔너리에 찾고 싶은 key를 input 받아서 value 값을 출력해준다.

 

이러면 이중 for문을 절대 쓸 일이 없으니 시간초과도 안 난다. 

 

또 하나 배워갑니다 Good 

반응형