1. 문제
https://www.acmicpc.net/problem/10816
2. 풀이 과정
방법 1) 다음 코드에서는 사전 자료형을 사용하였다.
- 이진탐색을 시도했으나 시간 초과로 실패하였다. 하나의 값을 찾을 땐 효율적이지만, 다수의 값을 찾고 그 값들이 중복 가능할 때는 특정 값의 개수를 저장해놓고 꺼내서 출력하는 것이 더 빠르다.
import sys
input = sys.stdin.readline
n = int(input())
sang = list(map(int, input().split()))
m = int(input())
find = list(map(int, input().split()))
d = dict()
for i in sang:
try:
d[i] += 1
except:
d[i] = 1
for j in find:
try:
print(d[j], end = " ")
except:
print(0, end = " ")
방법 2) Collections 라이브러리 사용
import sys, collections
input = sys.stdin.readline
input() #n
a = collections.Counter(input().split())
input() #m
print(*(a[v] for v in input().split()))
#print 함수에서 인자 여러 개를 받음
#print(a[0], a[1]...) 과 같은 의미
+a) *변수와 **변수
함수에서 여러 인자를 받을 때 사용하는 것으로 C/C++에서의 포인터와는 다른 개념이다.
*변수 : 튜플,로 인자들을 받을 때
def name_print(*names):
for name in names:
print("%s %s" %(name[0], name[1:3]), end=' ')
print("\n")
name_print('김철수', '이수영')
#김 철수 이 수영
**변수 : 사전형으로 인자들을 받을 때
def name_print(**kwargs):
for k, v in kwars.items():
print("{0} is {1}".format(k, v))
name_print(MyName = '김철수')
name_print(FriendName = '이수영')
#MyName is 김철수
#FriendName is 이수영
'코딩문제풀이 > Baekjoon' 카테고리의 다른 글
[Python_Search] 백준 1300 : K번째 수 (0) | 2021.08.21 |
---|---|
[Python_Search] 백준 12015번 : 가장 긴 증가하는 부분 수열 2 (0) | 2021.08.21 |
[Python_DynamicProgramming] 백준 11053번 : 가장 긴 증가하는 부분 수열 (0) | 2021.08.13 |
[Python_DynamicProgramming] 백준 11726번 : 2xn 타일링 (0) | 2021.08.12 |
[Python_DFS&BFS] 백준 1987번 : 알파벳 (0) | 2021.08.10 |