[Python] BOJ 13422 도둑 t = int(input()) for i in range(t): # n 집의 개수 # m 연속된 집의 개수 # k 최소 돈의 양 (k를 넘으면 안됨) n, m, k = map(int, input().split()) lst = list(map(int, input().split())) if m != n: for i in range(m-1): lst.append(lst[i]) sum_lst = [0] total = 0 for i in lst: total += i sum_lst.append(total) start = 0 end = m count = 0 while end != len(sum_lst): if sum_lst[end] - sum_lst[start] < k: count += 1 start += 1 end..
[Python] 백준 1806 부분합 n, s = map(int, input().split()) lst = list(map(int, input().split())) # 1. 누적합을 구해놓는다 sum_lst = [0] total = 0 for l in lst: total += l sum_lst.append(total) # 누적합 배열이 0부터 시작하기 때문에 # start = 1, end = 2 부터 시작하기 # m은 n+1로 최대값으로 만들어 놓기 start = 1 end = 2 m = n + 1 # 만약 누적합 배열의 첫번째에 내가 찾고자하는 값이 있으면 -> 길이가 1인게 있다는 뜻! if sum_lst[1] == s: m = 1 # 그런게 없다면 else: # 투포인터로 계속 탐색하기 while end = s: m = min(m, e..
[BOJ] 2003번 수들의 합2 - 구간합, 투포인터 https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 방법 1 : 구간합 n, m = map(int, input().split()) list = list(map(int, input().split())) # 합배열 만들기 total = 0 sum_list = [0] for i in range(len(list)): total += list[i] sum_list.append(total) # 구가합을 빼면서 m이랑 ..
[Python] 백준 1806 부분합 https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 문제 10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. 해결 첫번 째 시도 : 처음에는 길이가 아니라 가장 작은 값을 구하려고 했고, while문의 조건에서 틀린듯 하다 import sys n, s = map(int, sys.stdin.re..
[Python] 백준 2230 수 고르기 문제 https://www.acmicpc.net/problem/2230 2230번: 수 고르기 N개의 정수로 이루어진 수열 A[1], A[2], …, A[N]이 있다. 이 수열에서 두 수를 골랐을 때(같은 수일 수도 있다), 그 차이가 M 이상이면서 제일 작은 경우를 구하는 프로그램을 작성하시오. 예를 들어 www.acmicpc.net 해결 투 포인터를 활용하였다 - 두 수의 차가 목표값 보다 크면 최솟값을 갱신해준 후 start +=1 을 해주어야함 - start += 1을 해주는 이유 : 리스트가 정렬되어있고, 목표값보다 크기 떄문에 start 값을 뺴주어야 하므로.. import sys n, m = map(int, sys.stdin.readline().split()) lst = [] for i in..