(C++) 백준 1333번 - 부재중 전화

코딩너구리·2025년 9월 29일

코딩 문제 풀이

목록 보기
5/266

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;
		}

	}
}


후기

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

0개의 댓글