문제주소 : https://www.acmicpc.net/problem/10816
이중 for문으로 결과를 내기는 쉬웠으나 시간초과 해결이 어려웠다.
dict를 이용해 이중 for문을 2개의 for문으로 바꿔서 해결할 수 있었다.
이중 for문
import sys
# 입력값 넘겨받기
n = int(sys.stdin.readline())
value_n = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
value_m = list(map(int, sys.stdin.readline().split()))
# 개수세기 - 완전탐색 -> 시간초과로 실패
count = [0] * m
value_n.sort()
for i in range(m):
for j in range(n):
if value_m[i] == value_n[j]:
count[i] += 1
if value_m[i] < value_n[j]:
break
# 출력
for x in count:
sys.stdout.write(str(x) + " ")
최대한 시간을 줄이기 위해 sort도 해보고 입력 출력구문도 바꿔보았지만 최종적으로 실패했다.
dict를 이용한 2개의 for문
import sys
# 입력값 넘겨받기
n = int(sys.stdin.readline())
value_n = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
value_m = list(map(int, sys.stdin.readline().split()))
# 개수세기 - 딕셔너리에 해당 숫자를 가진 개수를 누적 COUNT해서 조회만 함
count = {}
for i in range(n):
try:
count[value_n[i]] += 1
except:
count[value_n[i]] = 1
for j in range(m):
try:
sys.stdout.write(str(count[value_m[j]]) + " ")
except:
sys.stdout.write(str(0) + " ")
count[value_n[i]]를 if문으로 확인하는 방법이 잘 안됐지만 결과적으로 이게 더 편한것 같다.
'알고리즘 공부 > 플레이데이터 알고리즘 스터디' 카테고리의 다른 글
210715 진법변환/비트연산 - 진법변환 (0) | 2021.07.15 |
---|---|
210714 진법변환/비트연산 - 팩토리얼 진법 (0) | 2021.07.14 |
210530 완전/이진탐색 - 소수찾기 (0) | 2021.05.30 |
210530 완전/이진탐색 - 모의고사 (0) | 2021.05.30 |
210523 스택/큐 - 다리를 지나는 트럭 문제 (0) | 2021.05.23 |