fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 32351 (C++) 리듬게임
최초 업로드: 2025-10-21 14:46:47
최근 수정 시간: 2025-10-21 14:46:47
게시자: rlatjwls3333
카테고리: 백준
조회수: 8
# [Bronze I] 리듬게임 [문제 링크](https://www.acmicpc.net/problem/32351) ## 문제 설명 <p>레이는 리듬게임을 개발 중이다. 리듬게임에는 다양한 곡들이 존재하고, 레이는 곡을 선택하는 화면에 특정 곡의 총 플레이 시간을 미리 보여주는 기능을 추가하려고 한다. 곡이 어떻게 구성되었는지 알기 위해서는 <strong>마디</strong>, <strong>박</strong>, <strong>BPM</strong>(Beats Per Minute), <strong>변속</strong>에 대해서 알아야 한다.</p> <ul> <li><strong>마디</strong>는 곡을 구성하는 가장 기본적인 곡의 길이 단위이다. 한 곡은 여러 개의 마디로 이루어져 있다.</li> <li><strong>박</strong>은 마디 내부의 박자를 나타내는 단위이다. 레이의 리듬게임에 사용되는 곡은 모두가 $\frac{4}{4}$박자이기 때문에, 한 마디는 $4$개의 박으로 구성된다.</li> <li><strong>BPM</strong>은 곡 진행속도의 단위이며, $1$분동안 몇 개의 박이 진행되는지를 나타낸다. 곡의 BPM이 $b$이면 $1$분동안 $b$개의 박이 균일한 속도로 진행되는 것을 의미한다.</li> <li>BPM은 곡 중간에 변할 수 있으며, 이를 <strong>변속</strong>이라고 부른다. 각 마디가 시작 될 때 BPM이 바뀔 수 있다. 이렇게 바뀐 BPM은 다음 변속이 오거나, 곡이 끝날 때까지 유지된다.</li> </ul> <p>어떤 곡의 총 마디 수, 초기 BPM과 변속 정보가 주어졌을 때, 해당 곡의 총 플레이 시간을 구해보자.</p> ## 입력 <p>첫 번째 줄에 플레이 시간을 계산할 곡의 마디 수 $N$, 곡의 초기 BPM $S_0$와 곡의 변속 횟수 $K$가 공백으로 구분되어 주어진다. $(0\leq K<N\leq 10^{5};$ $1\leq S_0<1\, 000)$</p> <p>다음 $K$개의 줄의 $i$번째 줄에는 $i$번째 변속이 일어나는 마디 $M_i$, 변속으로 인해 변한 BPM인 $S_i$가 주어진다. $(1<M_i\leq N;$ $1\leq S_i<1\, 000)$</p> <p>$N,K,M_1,M_2,\cdots ,M_K$는 모두 정수이며, $S_i$는 소숫점 최대 2자리까지 주어지는 양의 실수이다.</p> <p>입력의 모든 변속은 마디 순서대로 주어지며, 한 마디에서 두 번 이상 변속이 일어나지 않는다. 또한, 첫 번째 마디에서는 변속이 일어나지 않는다. 즉, $1 < M_1<M_2<\cdots <M_k$이다.</p> ## 출력 <p>첫 번째 줄에 곡의 총 플레이 시간을 초 단위로 출력한다.</p> <p>정답과 상대오차 또는 절대오차가 $10^{-6}$ 이하라면 정답으로 처리된다.</p> <p>정확한 채점을 위해, 정답을 고정 소숫점으로 소숫점 아래 $12$자리 이상 출력하는 것을 권장한다. 출력 방법은 힌트 문단을 참고하여라.</p> ## 풀이 지문 그대로 구현하면 됩니다. ``` c++ #include<bits/stdc++.h> using namespace std; typedef long double ld; int main() { ios::sync_with_stdio(0); cin.tie(0); ld n, m, k; cin >> n >> m >> k; ld last=1, sum=0; while(k--) { ld cur, curM; cin >> cur >> curM; sum += (cur-last)*4/(m/60); last = cur; m = curM; } sum += (n-last+1)*4/(m/60); cout << fixed << setprecision(6) << sum; } ```