https://www.acmicpc.net/problem/1333
문제
> 앨범에 N개의 곡이 L초길이로 들어있고 노래 사이엔 5초의 공백이 있다.
> 전화벨은 D초에 한번씩 1초동안 울린다.
> 전화벨이 노래재생 도중 울리면 받지못한다.
> 전화를 받을 수 있는 가장빠른시간을 구하자.
접근
곡의 수만큼 반복하며 곡 재생시간에 전화벨을 듣지 못하니 전화벨 이후인 쉬는시간 범위에 전화벨 주기가 맞는지 확인하여 주기가 맞다면 그 시간을 출력하도록 했다.
문제해결
> 전화벨을 계속 울리기 위해 무한 반복문으로 잡는다.
> 최대 노래 재생 시간을 벗어났을때를 생각해 그 떄의 전화 받는 시간을 출력하는 부분을 만든다.
> 노래를 재생하며 재생 중에 울리는지 검증하다 쉬는시간일 때면 해당 받은 시간을 출력한다.
코드
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N, L, D;
cin >> N >> L >> D;
int total_time = N * (L + 5);
for (int call = 0; ; call += D)
{
if (call >= total_time)
{
cout << call << '\n';
return 0;
}
bool songing = false;
for (int i = 0; i < N; i++)
{
int start = i * (L + 5);
int end = start + L;
if (call >= start && call < end)
{
songing = true;
break;
}
}
if (!songing)
{
cout << call << '\n';
return 0;
}
}
}

후기
전화벨이 계속 울리는걸 생각하지 못하고 노래 재생에만 얽메여 결과는 제대로 나오는데 계속 틀렸다.
전화벨은 계속 울리고 있는걸 다시 생각하자