Kim Seon Deok
[백준 14670] 병약한 영정 본문
https://www.acmicpc.net/problem/14670
-약의 종류의 개수 N을 입력받는다.
-for을 통해 N번만큼 a,b를 문자열로 구성된 리스트 형태로 입력받아, a는 effect(약의 효능)리스트로, b는 name()리스트에 append.
영정이가 겪는 증상의 수 R을 입력받는다.
-for문을 통해 R번만큼 c를 문자열로 구성된 리스트 형태로 입력받아 , s 리스트에 append 하여 2차원 배열을 만든다.
-for문을 통해 s[0]~ s[R-1] 까지 증상의 이름이 effect에 존재하는 원소이면 cnt를 0만큼 증가, 존재하지 않은 원소이면 cnt를 1만큼 증가시켜, 길이가 R인 새로운 2차원 배열 ss를 생성
-(증상을 모두 치료할 수 있을 때) ss[i]가 0이므로 증상의 이름과 효능을 일대일 대응하고, 또 그에 대응되는 약의 이름을 찾아야 한다.
리스트를 인자로 받는 matching함수를 생성
새로운 리스트 p 를 생성
반복문을 통해 인자로 받은 리스트의 원소가 effect 리스트에 있다면 그와 매칭되는 name리스트의 원소를 p에 append 하여 print(' '.join(p)) 형태로 출력
-(증상을 치료할 수 있는 경우가 하나라도 존재할 때)
ss[i]가 0이 아니므로 print('YOU DIED')출력
N = int(input()) # 약의 종류의 개수
effect = [] # 효능을 저장하는 리스트
name = [] # 약의 이름을 저장하는 리스트
for i in range(N):
a ,b = list(map(str,input().split()))
effect.append(a)
name.append(b)
s = []
R = int(input()) #영정이가 겪는증상의 수
for i in range(R):
c = list(map(str,input().split())) # 첫번째 인덱스: 증상개수, 그 이후 인덱스: 증상이름
s.append(c)
ss = [] # cnt를 인자로 하는 리스트
for i in range(0,R):
cnt = 0
for j in range(1,len(s[i])):
if s[i][j] in effect:
cnt +=0
else:
cnt += 1
ss.append(cnt)
def matching(l): # 증상을 모두 치료할 수 있을 때 name과 매칭시키는 ㅏㅁ수
p = []
for i in range(1,len(l)):
for k in range(0,N):
if l[i] == effect[k]:
p.append(name[k])
print(' '.join(p)) # 출력 형태
for i in range(0,R):
if ss[i] ==0: # 증상을 모두 치료할 수 있을 때
matching(s[i])
elif ss[i] != 0: # 치료 불가한 증상이 하나이상 있을
print("YOU DIED")
'python > Algorithm' 카테고리의 다른 글
[백준] 14889 스타트와 링크 (0) | 2022.01.26 |
---|---|
[백준] 20436 ZOAC 3 (0) | 2022.01.22 |
[백준] 2485 가로수 (0) | 2022.01.14 |
[백준] 2659 십자카드 (0) | 2022.01.14 |
[백준] 1244 스위치 켜고 끄기 (0) | 2022.01.14 |
Comments