320x100
1620번 : 나는야 포켓몬 마스터 이다솜
생략
음.. 문제에 장황한 이야기를 적어놓으셨다.. 실제 문제는 입력과 출력만 보면 된다.
입력으로 다양한 포켓몬들의 영문이름과 요구사항이 들어오고, 출력으로는 요구사항에 맞게 인덱스 혹은 포켓몬 이름을 출력해주면 된다.
내 코드(시간 초과):
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
pm = [0] + [input() for _ in range(n)]
pt = []
for _ in range(m):
cmd = input()
try:
cmd = int(cmd)
pt.append(pm[cmd].rstrip())
except ValueError:
pt.append(str(pm.index(cmd)))
print('\n'.join(pt))
당연하지만 이렇게 작성하면 시간 초과에 걸린다. index() 함수를 통해 검색하는 과정이 너무 오래 걸리기 때문이다. 이를 해결하기 위해서는 그냥 영문이름을 key로 가지고 인덱스를 value로 가지는 dict를 만들어 사용하면 된다.
내 코드:
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
pms = [''] + [input().rstrip() for i in range(n)]
pmDict = {}
for i in range(len(pms)):
pmDict[pms[i]] = i
response = []
for _ in range(m):
cmd = input().rstrip()
if cmd.isdigit():
response.append(pms[int(cmd)])
else:
response.append(str(pmDict[cmd]))
print('\n'.join(response))
1764번 : 듣보잡
파이썬의 set을 사용하면 아주 간단하게 풀리는 문제이다.
내 코드:
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
h = [input().rstrip() for _ in range(n)]
s = [input().rstrip() for _ in range(m)]
hs = sorted(set(h) & set(s))
print(len(hs))
print('\n'.join(hs))
파이썬의 set 자료형에서 & 연산을 통해 교집합을 구할 수 있으므로 사용해준다면 간단하고 명료하게 작성할수 있다.
17219번 : 비밀번호 찾기
주어진 개수만큼 페이지 주소와 비밀번호가 들어온다. 이후 몇몇 홈페이지의 요청이 들어오면 해당 홈페이지의 비밀번호를 출력해주면 된다. 이는 파이썬의 dict를 사용하면 간단하게 풀 수 있다.
내 코드:
import sys
input = sys.stdin.readline
n, m = map(int,input().split())
infoDict = {}
for _ in range(n):
info = input().split()
infoDict[info[0]] = info[1].rstrip()
passwords = []
for _ in range(m):
passwords.append(infoDict[input().rstrip()])
print('\n'.join(passwords))
'PS > solved.ac' 카테고리의 다른 글
[CLASS 3]백준 1463번 - 1로 만들기 (0) | 2021.01.29 |
---|---|
[CLASS 3]백준 1003번 - 피보나치 함수 (0) | 2021.01.29 |
[CLASS 3]백준 11723번, 17626번 (0) | 2021.01.29 |
[CLASS 2]백준 18111번 - 마인크래프트 (0) | 2021.01.27 |
[CLASS 2]백준 1966번, 2805번, 1929번 (0) | 2021.01.27 |
댓글