문제
현수는 학생들에게 노래를 가르치고 있다. 총 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번 질문까지 해당 시간(초)에 부르는 악보의 번호를 출력한다.
예제 입력 1 복사
3 5
2
1
3
2
3
4
0
1
예제 출력 1 복사
2
3
3
1
1
간단한 구현 문제이다. 복잡하게 생각해서 조금 오래 걸렸다.
question을 입력받을 때마다 악보의 누적합에서 -1을 한 값과 동일하거나 더 적다면 현재 위치를 반환하고 출력한다.
#include <bits/stdc++.h>
using namespace std;
int n, q;
int musicalScores[101];
int findCurrentMusicalScore(int question) {
for (int i = 0; i < n; i++) {
if (question <= musicalScores[i] - 1) {
return i + 1;
}
}
return n;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> q;
cin >> musicalScores[0];
for (int i = 1; i < n; i++) {
int musicalScore;
cin >> musicalScore;
musicalScores[i] = musicalScore + musicalScores[i - 1];
}
for (int i = 0; i < q; i++) {
int question;
cin >> question;
cout << findCurrentMusicalScore(question) << "\n";
}
}
'Algorythms' 카테고리의 다른 글
프로그래머스 Level3 베스트앨범 java 풀이 (0) | 2024.05.02 |
---|---|
프로그래머스 Level2 전화번호 목록 java 풀이 (0) | 2024.05.02 |
백준 1305번 광고 java 풀이 (0) | 2024.04.13 |
백준 9935번 문자열 폭발 c++ 풀이 (0) | 2024.03.22 |
백준 11060번 점프 점프 c++ 풀이 (0) | 2024.02.12 |