티스토리 뷰
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)) # 한번에 출력
문제출처
4158번: CD
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 상근이가 가지고 있는 CD의 수 N, 선영이가 가지고 있는 CD의 수 M이 주어진다. N과 M은 최대 백만이다. 다음 줄
www.acmicpc.net
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 | 
					댓글