티스토리 뷰
#include <stdio.h>
int main(void) {
int n, m;
scanf("%d %d", &m, &n); //쿼리의 개수, 요소의 개수
long long arr[n+1]; //long long
arr[0] = 0; //없는 것은 0으로
for(int i=1; i<=n; i++) { //요소들을 입력 받고
scanf("%lld",&arr[i]);
arr[i] += arr[i-1]; //누적 합 구하기
}
while(m--) { //m 개의 쿼리
long long ans =0, find;
scanf("%lld", &find); //find값이상이면서 가장 가까운 값을 찾아야 함
int left = 1, right = n, mid;
while(left <= right) { //이분탐색
mid = (left+right)/2;
if(arr[mid] >= find) { //find 이상이면
ans = mid; //일단 정답으로 이때의 index을 저장
right = mid-1; //오른쪽 범위를 줄임
} else left = mid+1; //왼쪽 범위를 줄임
}
if(ans) printf("%lld\n", ans); //find 이상인 누적합이 있다면 그때의 인덱스를 출력
else printf("Go away!\n"); //없다면
}
}
풀이 : 누적합, 이분탐색
1. 쿼리의 개수와, 요소의 개수를 입력받습니다.
2. 요소들을 입력 받고 배열을 이용하여 누적합을 구합니다.
3. m개의 쿼리들을 이분탐색을 이용하여 찾을 값보다 같거나 크며 가장 작을 때의 인덱스를 탐색합니다.\
4. 있다면 그때의 인덱스를 출력하며 없다면 Go away! 을 출력합니다.
주의 long long으로 만들어야 합니다.
https://www.acmicpc.net/problem/27968
27968번: 사사의 사차원 사탕 봉지
첫 번째 줄에 아이의 수 $N$과 사사가 사탕을 꺼내주려고 하는 최대 횟수 $M$이 공백으로 구분되어 주어진다. ($1 \le N \le 300 \, 000$, $1 \le M \le 300 \, 000$) 두 번째 줄에 사사가 한 번에 사탕을 꺼내는
www.acmicpc.net
'c언어 > BAEKJOON' 카테고리의 다른 글
c언어 16713번 Generic Queries (백준) (0) | 2023.07.30 |
---|---|
c언어 26007번 Codepowers (백준) (0) | 2023.07.30 |
c언어 12841번 정보대 등산 (백준) (0) | 2023.07.28 |
c언어 14465번 소가 길을 건넌 이유 5 (백준) (0) | 2023.07.28 |
c언어 24999번 blobyum (백준) (0) | 2023.07.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 오프라인 쿼리
- 그래프
- C++
- java
- 그리디
- PASCAL
- XOR
- 최대공약수
- Segment Tree
- union
- 덱
- 누적합
- Krustal
- 최소 스패닝 트리
- find
- 기하학
- DP
- 세그먼트 트리
- 정렬
- DFS
- BFS
- 누적 합
- 브루트포스
- C언어
- 1835번
- 1835
- Lazy Propagation
- 스택
- 플로이드
- 백준
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함