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
- 폐기하기
- multi update
- JSON 분해
- date_format
- 성능개선
- 문자형을 날짜형으로
- JSON 분할
- 무시하기
- git stage
- 스프링 웹플럭스
- 마리아디비
- str_to_date
- jar 소스보기
- 스프링 배치 공식문서
- nonblocking
- Meta Table
- JSON 분리
- spring webflux
- 스테이지에 올리기
- 스프링 리액티브 프로그래밍
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- org.json
- 날짜형을 문자형으로
- spring reactive programming
- JobExecutionAlreadyRunningException
- batchInsert
- 마이바티스 트랜잭션
- 스프링 배치 메타 테이블
- JSONObject 분할
- JSONArray 분할
Archives
- Today
- Total
ebson
boj.kr/2143 두 배열의 합 (gold3) 파이썬 풀이 본문
ALGORITHM STUDY WITH PYTHON/Binary Search
boj.kr/2143 두 배열의 합 (gold3) 파이썬 풀이
ebson 2023. 5. 29. 18:091. 첫번째 배열에서 가능한 모든 부분배열의 합을 N_sums 리스트에 저장한다.
2. 두번째 배열에서 가능한 모든 부분배열의 합을 M_sums 리스트에 저장한다.
3. 첫번째 배열의 모든 요소를 순회하면서 아래 3.1.-3.3 을 반복한다.
3.1. M_sums에서 bisect_right으로 T-첫번째 배열의 요소 값을 탐색한 인덱스를 r에 저장한다.
3.2. M_sums에서 bisect_left으로 T-첫번째 배열의 요소 값을 탐색한 인덱스를 l에 저장한다.
3.3. r-l을 cnt변수에 증감한다.
4. 모든 가능한 경우의 수 cnt를 출력한다.
T = int(input())
N = int(input())
N_list = list(map(int, input().split()))
M = int(input())
M_list = list(map(int, input().split()))
N_sums = []
for i in range(len(N_list)):
for j in range(i+1, len(N_list)+1):
N_sub = N_list[i:j]
N_sums.append(sum(N_sub))
M_sums = []
for k in range(len(M_list)):
for l in range(k+1, len(M_list)+1):
M_sub = M_list[k:l]
M_sums.append(sum(M_sub))
M_sums.sort()
from bisect import bisect_left, bisect_right
cnt = 0
for N_sum in N_sums:
l = bisect_left(M_sums, T-N_sum)
r = bisect_right(M_sums, T-N_sum)
cnt += r-l
print(cnt)
첫번째 배열과 두번째 배열의 모든 부분배열의 합들의 목록을 각각 구해야 한다. 그러나 두 부분배열의 합 목록에 대해 다시 이중 for문을 돌리지 않아도 된다. 왜냐하면 두번째 배열의 모든 부분배열의 합 목록에서 T-첫번째 배열의 요소를 만족하는 값이 몇개인지를 이분탐색으로 구할 수 있기 때문이다.
bisect_right는 요소가 있는 경우 해당 인덱스+1을 반환하고 요소가 없는 경우 오름차순으로 들어갈 위치를 반환한다.
bisect_left는 요소가 있는 경우 해당 인덱스를 반환하고 요소가 없는 경우 오름차순으로 들어갈 위치를 반환한다.
그래서 정렬된 리스트에 대해서 bisect_right값 - bisect_left값은 찾으려는 요소가 없으면 0이고 찾으려는 요소가 있으면 찾으려는 요소의 총 개수이다.
'ALGORITHM STUDY WITH PYTHON > Binary Search' 카테고리의 다른 글
boj.kr/1939 중량제한 (gold3) 파이썬 풀이 (0) | 2023.05.29 |
---|---|
boj.kr/2343 기타 레슨 (silver1) 파이썬 풀이 (0) | 2023.05.28 |
boj.kr/1300 K번째 수 (gold2) 파이썬 풀이 (1) | 2023.05.28 |
boj.kr/2470 두 용액 (gold5) 파이썬 풀이 (1) | 2023.05.27 |
boj.kr/12015 가장 긴 증가하는 부분 수열 2 (gold2) 파이썬 풀이 (0) | 2023.05.27 |
Comments