IT 프로그래밍/백준

[c++] 백준 2284번 알람시계

기술1 2024. 3. 14. 21:02
반응형

 

 

2884번: 알람 시계

상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,

www.acmicpc.net

첫번째 도전 ( 틀림 )


#include <iostream>

using namespace std;

int main()
{
	int hour, min;
	cin >> hour >> min;

	if (min < 45)
	{
		cout << hour - 1 << " " << 60 - abs(min - 45);
	}
	else
	{
		cout << hour << " " << min - 45;
	}

	return 0;
}

 

 

틀렸다.

 

알고리즘을 생각해내기까지는 수월하게 해결이 되었습니다. 먼저 min이 45보다 작을 때는 저런 식으로 hour에 1을 빼준 다음 min-45에다가 절대값을 씌어준 다음 60에 빼주는 방식으로 진행을 해주었습니다. 

 

else 부분은 min이 45분 이상일 때는 hour는 제외하고 min에서 45분을 빼주는 방식으로 진행되게 했습니다.

 

하지만 간과한 오류는 바로 시간이 00시일 경우 1을 빼버리면 -1이 되어서 오류가 된다는 것입니다.

 

따라서 해당 오류를 고치기 위해서 hour가 00시일 때는 23시가 나오도록 식을 바꿔주었습니다.

#include <iostream>

using namespace std;

int main()
{
	int hour, min;
	cin >> hour >> min;

	if (min < 45)
	{
		if (hour != 0)
			cout << hour - 1 << " " << 60 - abs(min - 45);
		else
		{
			hour = 23;
			cout << hour << " " << 60 - abs(min - 45);
		}
			
	}
	else
	{
		cout << hour << " " << min - 45;
	}

	return 0;
}

이렇게 했더니 정답이 나왔습니다.

 

코드가 완전히 깔끔하지는 않습니다

 

.

#include <iostream>
using namespace std;
int main(void){
    int a, b;
    cin >> a >> b;
    if(b < 45){
        b += 15;
        if(--a < 0)
        	a = 23;
    }
    else
        b -= 45;

    cout << a << " "<< b;
}

이런 식으로 출력해주신다면 더 깔끔해 보일 것 같습니다.

 

저와 다른 점은 b가 45 이상일 때는 b에다 15를 더하면 해당 값이 나온다는 점이었습니다. 저는 그 점을 생각하지 못해서 절대값을 해줘서 빼는 방식을 사용했습니다. 

반응형

'IT 프로그래밍 > 백준' 카테고리의 다른 글

[C++] 백준 10950번 A+B -3  (0) 2024.03.15
[C++] 백준 2739번 구구단  (0) 2024.03.15
[c++] 2480 주사위 세개  (0) 2024.03.14
[c++] 백준 2525번 오븐 시계  (0) 2024.03.14
[백준] 14681번 사분면 고르기 [C++]  (0) 2024.03.06