728x90
https://www.acmicpc.net/problem/1806
1806번: 부분합
첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다.
www.acmicpc.net
1. 문제
10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오.
2. PS
- 처음에 일일이 다 구해서 값을 찾으려 하여 시간초과가 남..
- front와 end 변수로 index값을 조종해 줌.
- end 좌표를 뒤로 보내면서 sum값이 s값을 넘어갈 때 front값을 땡겨 sum값을 줄여주는 방식.
- 그러면서 end-front의 최솟값을 지속적으로 갱신해줌.
using System;
class Program
{
static void Main() {
string[] s1 = Console.ReadLine().Split(' ');
int n = int.Parse(s1[0]);
int s = int.Parse(s1[1]);
string[] s2 = Console.ReadLine().Split(' ');
int[] arr = new int[n];
int tmp = 0;
for(int i = 0; i < n; i++) {
arr[i] = int.Parse(s2[i]);
tmp += arr[i];
}
if(tmp < s) Console.Write(0);
else {
int min = n+1, sum = 0;
int front = -1;
for(int end = 0 ; end < n; end++) {
sum += arr[end];
while (sum >= s) {
if(min > end-front) min = end-front;
sum -= arr[++front];
}
}
Console.WriteLine(min);
}
}
}
'BOJ > C#' 카테고리의 다른 글
BOJ [C#]) 2847번 게임을 만든 동준이 (0) | 2022.01.10 |
---|---|
BOJ [C#]) 2798번 블랙잭 (0) | 2022.01.10 |
BOJ [C#]) 1475번 방 번호 (0) | 2022.01.10 |
BOJ [C#]) 1085번 직사각형에서 탈출 (0) | 2022.01.10 |
BOJ [C#]) 1094번 막대기 (0) | 2022.01.10 |