- 백준 10816번 풀이2023년 08월 10일
- Lv. 34 라이츄
- 작성자
- 2023.08.10.:32
문제
https://www.acmicpc.net/problem/10816
숫자 카드에서 특정 숫자가 몇 개인지 찾아서 출력하기
Reference
https://www.daleseo.com/python-collections-counter/
https://chancoding.tistory.com/45
풀이
아니 거 카드 몇 장 안되는 거 걍 세면 안되는겨?
아무튼 일단 풀어야 하니 풀어봅시다. 아, 이 문제는 입력 받는 거 배열로 받고 풀 때 딕셔너리가 들어간다. 예시를 보면 아시겠지만 입력에 중복외는 숫자가 있는데 set() 쓰면 이걸 다 쳐버리거든. 입력이 딕셔너리면요? 딕셔너리도 키값 중복되면 다 쳐버린다.
X = int(sys.stdin.readline()) card_list = list(map(int, sys.stdin.readline().split())) # 카드 입력 Y = int(sys.stdin.readline()) find_list = list(map(int, sys.stdin.readline().split())) # 찾을거 입력
그러니까 여러분도 얌전히 입력은 리스트로 받으시는 게 정신건강에 이롭습니다.
태그 보니까 이진 탐색이 있다. 그리고 풀이법에서도 이진 탐색 알고리즘을 쓰는데... 그럼 리스트 정렬 안 해요? 뒤에 하심? 아니 그거 안씁니다. collections의 카운터를 갖다 쓸 건데 이거는 걍 counter 만들어놓고 출력만 잘 하면 된다.
import sys from collections import Counter X = int(sys.stdin.readline()) card_list = list(map(int, sys.stdin.readline().split())) # 카드 입력 Y = int(sys.stdin.readline()) find_list = list(map(int, sys.stdin.readline().split())) # 찾을거 입력 Z = Counter(card_list) for i in find_list: if i in card_list: print(Z[i], end=" ") else: print(0, end=" ")
근데 시간초과... ㅋㅋㅋㅋㅋㅋ 아니 왜때문에?
import sys from collections import Counter X = int(sys.stdin.readline()) card_list = list(map(int, sys.stdin.readline().split())) # 카드 입력 Y = int(sys.stdin.readline()) find_list = list(map(int, sys.stdin.readline().split())) # 찾을거 입력 Z = Counter(card_list) print(' '.join(f'{Z[m]}' if m in Z else '0' for m in find_list))
진짜 궁금해서 그러는데 그럼 얘는 어떻게 맞은거임?
'BOJ > [BOJ] Python' 카테고리의 다른 글
백준 1764번 풀이 (0) 2023.10.29 백준 1934번 풀이 (0) 2023.10.19 백준 7785번 풀이 (0) 2023.08.04 백준 14425번 풀이 (0) 2023.07.31 백준 19532번 풀이 (0) 2023.07.20 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)