Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- UXUI기초정복
- baekjoon
- 환급챌린지
- 디자인강의
- UXUI챌린지
- mysql
- Spring
- 오픈챌린지
- Java
- OPENPATH
- 국비지원취업
- KDT
- 내일배움캠프
- 부트캠프
- 백준
- 패스트캠퍼스
- 오픈패스
- 내일배움카드
- 디자인교육
- 디자인챌린지
- UXUIPrimary
- 백엔드
- 백엔드개발자
- 국비지원
- 국비지원교육
- 객체지향
- Be
- 티스토리챌린지
- 오블완
- 백엔드 부트캠프
Archives
- Today
- Total
군만두의 IT 공부 일지
[백준] 7795번: 먹을 것인가 먹힐 것인가 (파이썬) 본문
✅문제: 7795번
7795번: 먹을 것인가 먹힐 것인가
심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을
www.acmicpc.net
📌개념정리
(1) 이진 탐색(Binary Search)
- 정의: 정렬된 배열에서 특정한 값을 효율적으로 찾는 탐색 기법
- 탐색 범위를 반으로 줄이면서 값을 찾기 때문에 O(log N)의 시간 복잡도를 가짐.
- 파이썬에서는 bisect 모듈을 사용하여 이진 탐색을 간편하게 구현할 수 있음. 이 모듈은 정렬된 배열에서 요소를 삽입할 위치를 찾거나, 특정 요소의 인덱스를 찾는 함수를 제공함.
- 파이썬에서 bisect 사용
1. bisect_left(a, x): 값 x를 배열 a에 삽입할 수 있는 가장 왼쪽 위치를 찾아 반환함.
2. bisect_right(a, x): 값 x를 배열 a에 삽입할 수 있는 가장 오른쪽 위치를 찾아 반환함.
📌문제풀이
배열 A의 각 요소가 배열 B의 몇 개의 요소보다 큰지를 판단하는 문제임. 배열 B를 정렬한 후, 배열 A의 각 요소에 대해 이진 탐색을 사용하여 배열 B에서 해당 요소보다 작은 요소들의 수를 빠르게 찾아야 함.
1. 테스트 케이스 수(T)만큼 반복
2. 각 케이스에 대해 배열 B를 정렬
3. 배열 A의 각 요소(a)에 대해 bisect_left(B, a)를 사용하여 배열 B에서 a 미만의 요소들의 수를 찾음
import sys
import bisect
input = sys.stdin.read
data = input().split()
index = 0
T = int(data[index]) # 테스트 케이스 수
index += 1
results = []
for _ in range(T):
N = int(data[index])
M = int(data[index + 1])
index += 2
A = list(map(int, data[index:index + N]))
B = list(map(int, data[index + N:index + N + M]))
index += N + M
B.sort()
count = 0
for a in A: # 배열 A의 각 원소에 대해
pos = bisect.bisect_left(B, a) # 배열 B에서 a보다 작은 요소의 수를 찾음
count += pos
results.append(str(count))
print("\n".join(results))
📌후기
- 파이썬의 bisect 모듈이라는 것을 알고 사용해보면서, 앞으로 정렬된 배열에서 위치를 찾는 다양한 상황에 유용하게 사용할 수 있을 것 같음.
- 파이썬의 편리한 기능들이 많다는 것을 다시 한번 깨닫고, 알고리즘 문제 해결 시 자주 사용되는 모듈을 숙지해야겠다고 생각함.
📌참고자료
1) Python Docs, "bisect — 배열 이진 분할 알고리즘", https://docs.python.org/ko/3.10/library/bisect.html
'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 1068번: 트리 (파이썬) (0) | 2024.04.23 |
---|---|
[백준] 14502번: 연구소 (파이썬) (1) | 2024.04.22 |
[백준] 2230번: 수 고르기 (파이썬) (0) | 2024.04.14 |
[백준] 1316번: 그룹 단어 체커 (파이썬) (0) | 2024.04.13 |
[백준] 3273번: 두 수의 합 (파이썬) (0) | 2024.04.10 |
Comments