백준 단계별로 풀어보기 2단계 if문 5번 문제
문제의 핵심
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 |
댓글