Baekjoon Online Judge
문제
현수는 학생들에게 노래를 가르치고 있다. 총 N개의 악보가 있고 i번째 악보는 Bi초로 이루어져 있다. 학생들은 0초부터 1번 악보를 따라 노래하기 시작했다. 즉 B1-1초에 1번 악보를 끝마치게 되고 B1초부터 B1+B2-1초까지 2번 악보를 따라 부르게 된다.
악보 | 1 | 1 | 2 | 3 | 3 | 3 |
시간 | 0 | 1 | 2 | 3 | 4 | 5 |
문제는 T1부터 TQ까지 Q개의 시간에 대해 대답을 하는 것인데, Ti초 때 노래하는 악보를 i번째에 출력하는 것이다.
입력
첫 줄에는 악보 수 N(1 ≤ N ≤ 100)과 질문의 개수 Q(1 ≤ Q ≤ 1,000)가 주어진다. 다음 N개의 줄에는 1번 악보부터 N번 악보까지 각 악보가 차지하는 시간(초)이 한 줄에 하나씩 주어진다. 각 악보가 차지하는 시간은 100 이하의 정수이다. 다음 Q개의 줄에는 알고자 하는 Q개의 시간(초)이 한 줄에 하나씩 주어진다. 묻는 시간 역시 정수만 주어진다.
출력
Q개에 줄에 1번 질문부터 Q번 질문까지 해당 시간(초)에 부르는 악보의 번호를 출력한다.
예제 입력 | 예제 출력 |
3 5 2 1 3 2 3 4 0 1 |
2 3 3 1 1 |
풀이
#include <iostream>
using namespace std;
int main() {
// 악보의 수 N, 질문의 개수 Q
int N, Q;
cin >> N >> Q;
// 각 악보가 끝나는 시간
int* time = new int[N];
// 각 악보가 끝나는 시간구하기
for (int i = 0; i < N; i++) {
int n;
scanf("%d", &n);
if (i == 0)
time[i] = n - 1;
else
time[i] = time[i - 1] + n;
}
// 해당 시간에 부르는 악보 번호 찾기
for (int i = 0; i < Q; i++) {
int q;
scanf("%d", &q);
for (int j = 0; j < N; j++) {
if (q <= time[j]) {
printf("%d\n", j + 1);
break;
}
}
}
return 0;
}
time[]에 각 악보가 끝나는 시간을 구해서 저장한 뒤 입력되는 q가 포함되는 범위를 가진 인덱스를 찾아서 출력했다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 1434번 - 책 정리 (0) | 2022.06.05 |
---|---|
[Baekjoon/C++] 1418번 - K-세준수 (0) | 2022.06.05 |
[Baekjoon/C++] 1384번 - 메시지 (0) | 2022.05.30 |
[Baekjoon/C++] 1373번 - 2진수 8진수 (0) | 2022.05.30 |
[Baekjoon/C++] 1371번 - 가장 많은 글자 (0) | 2022.05.21 |