😈 알고리즘/💻 백준

💻 2884번 문제 : 알람 시계 ➕

Buᐢ༝ᐢy 2022. 9. 20. 15:08
2884번: 알람 시계
상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만, 조금만 더 자려는 마음은 그 어떤 것도 없앨 수가 없었다. 이런 상근이를 불쌍하게 보던, 창영이는 자신이 사용하는 방법을 추천해 주었다. 바로 "45분 일찍 알람 설정하기"이다.
https://www.acmicpc.net/problem/2884
#include <stdio.h>

int main()
{
	int H, M;
	scanf("%d%d", &H, &M);
	if (45 <= M)
	{
		M -= 45;
	}
	else if (45 > M)
	{
		M -= 45;
		H -= 1;

		if (H == -1)
		{
			H = 23;
		}
		if (0 > M)
		{
			M *= -1;
			M = 60 - M;
		}
	}
	printf("%d %d", H, M);
}

➕ 다시 풀어보기

코드가 너무 긴 것 같아 다시 풀어보았다.

#include <stdio.h>

int main()
{
	int H, M;
	scanf("%d%d", &H, &M);
	M -= 45;
	if (M < 0)
	{
		M += 60;
		H -= 1;
	}
	if (H < 0)
	{
		H += 24;
	}
	printf("%d %d", H, M);
}

코드가 훨씬 간결해진 것을 볼 수 있다. 진법을 생각하며 다시 풀었다.

입력값이 45보다 작으면 45를 뺐을 때 음수가 되는데 이전 코드에서는 양수로 만든 후 60에서 빼주었다. 이번에 풀 때는 음수가 되면 내가 사용하는 진법의 값을 더해주었다.

25+60=35-25 + 60 = 35

그리고 1시간의 전이 되므로 시간 역시 1시간 빼주었다.


Uploaded by N2T