코딩테스트 (C#)

백준 2884 : 알람 시계 - C# 풀이

UniCoti-sub 2024. 8. 15.
반응형

문제 사진.

문제는 이렇다.

시(hour)와 분(minute)이 입력값으로 주어지는데,

45분 전의 시간을 출력하면 정답인 문제이다.

 

여기서 문제는 만약에 현재가 3시 20분이라면 45분 전으로 가기 위해서

2시로 돌아가야 한다는 것과, 만약 현재가 0시 20분이라면 어제로 돌아가야 하기에

그 2가지 경우만 조심해서 코드를 짜준다면 쉽게 구현할 수 있다.

using System;

namespace unicoti {
    class Program {
        static void Main(string[] args) {
            int h,m;
            string[] input = (Console.ReadLine() ?? "0 0").Split(' ');
            int.TryParse(input[0], out h);
            int.TryParse(input[1], out m);

            if(m >= 45) {
                m -= 45;
            } else {
                h--;
                m += 15;
            }

            if(h < 0) {
                h = 24 + h;
            }

            Console.WriteLine($"{h} {m}");
        }
    }
}

 

나는 일단 h, m을 각각 시간과 분으로 설정해서 입력을 받아왔고,

분이 45분보다 크면 그냥 빼주기면 해도 되기에 m -= 45;를 써주었다.

 

만약에 45분보다 작으면 한시간을 빼고 45를 제거해야 하기에

h--와 m += 15; 라는 코드를 써 주었다. (한시간을 추가하고 45분을 제거하면 15분 추가와 같다)

 

이제 h가 음수가 되었을 경우가 있기 때문에

마지막에 개별적인 if문을 추가해서 음수를 방지해주었다.

24시간이 최대이고, h가 음수이기에 24+h라는 코드를 써주었다.

 

마지막으로 $을 이용한 출력으로 변수를 간단하게 형식에 맞춰

출력을 진행할 수 있었다. 만약 이 구문을 모른다면 ToString 등

다른 string 메소드를 이용해서 만들 수 있다.


오늘의 느낀점)

오늘은 느낀점이 크지 않은 것 같다.

오랜만에 $를 써본 정도...? 다만 입력값을 받아오는 것에 대한

코드가 너무 길었던 것 같다. 다른 사람은 어떻게 했는지도 찾아보게 되었다.

근데 코드를 줄이는 것도 중요하지만 가독성이 좋은 것도 중요해서

 

무작정 코드를 줄이는 걸 지향하는 것도 좀 아니라고 생각해서

적당한 방법을 알아봐야겠다고 느꼈다.


이상으로 도움이 되었길 바라며,

 

끝.

반응형

댓글