본문 바로가기
C#/C# : Baekjoon

[백준] C# : 알람 시계 (2884번)

by TODAYCODE 2021. 7. 22.
반응형

백준 단계별로 풀어보기 2단계 if문 5번 문제

 

2884번: 알람 시계

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

www.acmicpc.net

 

문제의 핵심

1. 스스로 생각해서 경우의 수를 찾을 수 있는가?

 


 

역시 마지막 문제라서 그런지 문제 자체가 푸는 법을 알려주진 않는다.

내가 좋아하는 스스로 생각해야하는 문제다.

 

그래도 실생활에서 친숙한 시계에 관련된 것이기에

조금만 생각해본다면 쉽게 풀 수 있을 것이다.

 

 

문제를 천천히 뜯어서 살펴보도록 하자.

 

입력된 시간을 45분 앞당겨서 출력해주면 된다.

만약 시간을 int h에 저장했고, 분을 int m에 저장했다면

m -= 45

해주면 된다.

 

하지만 이정도로 간단하다면 마지막 문제일리가 없다.

여기서부터 모든 경우의 수를 생각해줘야한다.

 

 

1. m이 45 이상일 때

이 경우에는 45를 빼더라도 m이 + 값이기 때문에 그냥 출력해주면 된다.

 

 

2. m이 45보다 작을 때

이 경우에 45를 빼면 m이 음수가 된다.

분단위에는 마이너스 값이 없다.

고로, 시간 h 에서 값을 가져와야한다.

 

따라서 h에서 1을 빼주고 m에다가 60분을 더해주면 된다.

 

즉,

m -= 45의 값이 < 0 인 경우

h -= 1

m += 60

을 해주면 된다.

 

이러면 정답일까?

아니다.

 

한번 더 예외의 경우가 존재한다.

바로 위의 케이스에서 h가 0일때다.

시간이 "0시"일때 -1을 해버리면 시간 값이 음수가 된다.

이 경우도 별도로 지정해줘야 완벽해진다.

 

 

3. m이 45보다 작으면서 h가 0일때

h가 < 0 작다면,

h 값을 23으로 바꿔주면 된다.

 

이러면 가능한 모든 경우의 수 검출이 끝난다.

이를 토대로 깔끔하게 코드를 작성하면 된다.

 

 

 

정답코드

using System;

namespace 조건문5
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] time = Console.ReadLine().Split();
            
            // 시간 값을 h에 저장
            int h = int.Parse(time[0]);
            // 분 값을 m에 저장
            int m = int.Parse(time[1]);

    		// m에서 45를 뺀다.
            m -= 45;

    		// m이 음수인지 판단
            if (m < 0)
            {
            	// m이 음수였다면 m에 60을 더해주고 h에서 1을 빼준다.
                m += 60;
                h -= 1;
                
                // h가 음수인지 확인하고 음수라면 23으로 바꿔준다.
                if (h < 0) h = 23;
            }
			// 계산된 값을 출력해준다.
            Console.WriteLine($"{h} {m}");
        }
    }
}
반응형

'C# > C# : Baekjoon' 카테고리의 다른 글

[백준] C# : A+B - 3 (10950번)  (0) 2021.07.22
[백준] C# : 구구단 (2739번)  (0) 2021.07.22
[백준] C# : 사분면 고르기 (14681번)  (0) 2021.07.22
[백준] C# : 윤년 (2753번)  (0) 2021.07.22
[백준] C# : 시험 성적 (9498번)  (0) 2021.07.22

댓글