728x90
▶문제 : 보물찾기 (codeup.kr)
▶코드 작성
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, k, i, L;
int cnt = 0, sum;
int *arr;
scanf("%d %d", &n, &k);
arr = (int *)malloc(sizeof(int) * n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}
sum = arr[0];//더한 수들의 합
L = i = 0;//L은 왼쪽 i는 오른쪽
while (i < n)//i가 더이상 오른쪽으로 못갈 때 마무리
{
if (sum == k)//값이 같을 때
{
cnt++;
sum -= arr[L];//맨 왼쪽값을 뺀다
L++;//오른쪽으로 한칸 이동
}
else if (sum < k)//값보다 작을 때
{
i++;//오른쪽으로 한칸 이동
sum += arr[i];//맨 오른쪽값을 더한다
}
else if (sum > k)//값보다 클 때
{
sum -= arr[L];//맨 왼쪽값을 뺀다
L++;//오른쪽으로 한칸 이동
}
}
printf("%d", cnt);
free(arr);
return 0;
}
▶해석
구하려는 값(k)과 가깝도록 sum을 유지시켜 조금씩 i가 n에 가깝게 이동하며 k값과 같은 값을 찾음
728x90
'코드업(codeup) > C' 카테고리의 다른 글
코드업(codeup) 3301 : 거스름돈 C언어 (0) | 2021.11.16 |
---|---|
코드업(codeup) 3120 : 리모컨 C언어 (0) | 2021.11.16 |
코드업(codeup) 2001 : 최소 대금 C언어 (0) | 2021.11.15 |
코드업(codeup) 3004 : 데이터 재정렬 C언어 (0) | 2021.11.12 |
코드업(codeup) 2625 : 삼각화단 만들기 (Small) C언어 (0) | 2021.11.10 |
댓글