티스토리 뷰
728x90
반응형
문제
상근이와 선영이가 동시에 갖고 있는 cd의 개수를 구하면 되는 문제이다.
다만 주의할 점은 여러 개의 테스트 케이스로 이루어져 있다는 점이다.
예제는 한 개만 나와 있어 헷갈릴 수 있어 조심해야한다.
풀이
- 이 문제는 자료구조로 접근하면 쉽다.
- 중복되는 cd 번호가 없기 때문에 set 집합 자료구조를 사용하면 된다.
즉, 상근이의 cd 집합과 선영이의 cd 집합의 교집합 개수를 구하면 된다. - 집합에 담을 땐 add 함수를 통해 넣고,
교집합(&)은 set(a) & set(b)와 같은 방법으로 구할 수 있다. - 혹은 교집합을 구하는 대신 상근이의 cd 집합에 선영이가 가진 cd가 포함되는지 셈을 통해 구할 수도 있다.
set 집합의 경우에는 탐색 시간이 O(1)이기 때문에 속도도 조금 더 빠르고,
선영이의 cd 집합 정보를 따로 저장하지 않고 비교함으로 더 적은 메모리가 사용된다.
Python 코드
# 입출력 속도를 빠르게 함
import sys
input = sys.stdin.readline
print = sys.stdout.write
# 교집합을 사용하여 구하는 법
res = []
while True:
n, m = map(int, input().split())
if n == m == 0: # n과 m 모두 0이면 종료
break
sang = set([int(input()) for _ in range(n)])
sun = set([int(input()) for _ in range(m)])
res.append(str(len(sang&sun)))
print("\n".join(res)) # 한번에 출력
# 집합 요소와 비교하여 구하는 법
res = []
while True:
n, m = map(int, input().split())
if n == m == 0: # n과 m 모두 0이면 종료
break
sang = set([int(input()) for _ in range(n)])
ans = 0
for _ in range(m):
# 선영이 cd 번호를 바로 받으며 확인
if int(input()) in sang:
ans += 1
res.append(str(ans))
print("\n".join(res)) # 한번에 출력
문제출처
728x90
반응형
'Study > Coding Test' 카테고리의 다른 글
[백준 BOJ / Python] 1717번 집합의 표현 (0) | 2023.03.31 |
---|---|
[백준 BOJ / Python] 17352번 여러분의 다리가 되어 드리겠습니다! (0) | 2023.03.20 |
[백준 BOJ / Python] 10703번 유성 (0) | 2023.03.09 |
[백준 BOJ / Python] 17070번 파이프 옮기기 1 (0) | 2023.03.08 |
[백준 BOJ / Python] 2293번 동전 1 (0) | 2023.03.07 |
댓글
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
TAG
- python
- MySQL
- 그리디
- padding mask
- Transformer
- greedy
- COLAB
- 코드트리
- 누적합
- DP
- 코딩테스트실력진단
- Algorithm
- 파이썬
- boj
- dfs
- pytorch
- FastAPI
- disjoint set
- 이분탐색
- 코딩테스트
- 분리집합
- Prefix sum
- 백준
- 수학
- 알고리즘
- 트랜스포머
- BFS
- 구현
- Look-ahead Mask
- lis
링크