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 |
Tags
- 마이바티스 트랜잭션
- step 여러개
- mybatis
- JSON 분할
- 스프링 트랜잭션 관리
- spring batch 5
- executioncontext 변수 공유
- aop proxy
- 스프링배치 메타테이블
- step 값 공유
- 스프링배치 엑셀
- abstractpagingitemreader
- api 아이템 리더
- JSONObject 분할
- 스프링 배치 5
- 선언적 트랜잭션 관리
- 아이템 리더 커스텀
- step 사이 변수 공유
- Spring Batch
- JSON 분리
- flatfileitemwriter
- 읽기 작업과 쓰기 작업 분리
- job parameter
- 아이템 리더 페이징 처리
- spring batch 변수 공유
- executioncontext
- 트랜잭션 분리
- JSONArray 분할
- 스프링배치 csv
- stepexecutionlistener
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