백준 C# 2525

김보근·2025년 1월 20일

백준

목록 보기
5/62

https://www.acmicpc.net/problem/2525

TIL: 시간 계산 문제 해결하기

오늘은 백준 문제를 풀다가 시간을 계산하는 코드에서 실수를 발견하고 수정한 과정을 정리해본다.

문제 상황

주어진 현재 시각(H, M)에 특정 시간(T)을 더했을 때, 새로운 시각을 계산하는 코드였다. 처음 작성한 코드는 아래와 같았다:

string[] s = Console.ReadLine().Split();
string t = Console.ReadLine();

int H = int.Parse(s[0]);
int M = int.Parse(s[1]);
int T = int.Parse(t);

int I = M + T;
int Y = I;

if (I >= 60 && I < 120)
{               
    Y = I % 60;
    H = H + 1;
}
else if (I >= 120)
{
    Y = I % 60;
    H = H + 2;
}

if (H >= 24)
{
    H = 0;
}

Console.WriteLine($"{H} {Y}");

문제점

조건문의 비효율성
I가 120 이상인 경우에만 2시간을 더하도록 작성했지만, 더 큰 값(예: 180, 240 등)은 제대로 계산되지 않았다.
24시간 이상일 때의 처리
H = 0으로 고정하면 자정을 넘어선 계산이 부정확했다. 예를 들어, H = 25라면 H = 1이어야 한다.
불필요한 변수 사용
I, Y와 같은 추가 변수로 인해 코드가 복잡해졌다.

수정한 코드

문제를 해결하기 위해 분 단위로 계산을 단순화하고, 조건문을 제거했다.
아래는 수정된 코드다:

string[] s = Console.ReadLine().Split();
string t = Console.ReadLine();

int H = int.Parse(s[0]);
int M = int.Parse(s[1]);
int T = int.Parse(t);

int totalMinutes = M + T;

H += totalMinutes / 60; // 총 분에서 시간을 계산
M = totalMinutes % 60;  // 남은 분 계산

H %= 24; // 24시간 이상일 경우 처리

Console.WriteLine($"{H} {M}");

수정 내용

totalMinutes를 사용한 단순화
M + T를 totalMinutes로 정의해 분과 시간을 한 번에 처리.

조건문 제거
나머지 연산(%)과 몫(totalMinutes / 60)으로 분과 시간을 분리해 조건문 없이 계산 가능.
24시간 이상 처리
H %= 24로 24시간 이상을 간단히 순환.

깨달은 점

수학적 계산을 잘 활용하면 조건문을 줄이고 코드가 훨씬 깔끔해질 수 있다.
시간 계산에서는 나머지 연산(%)이 매우 유용하다는 것을 다시 한번 느꼈다.
문제를 단순화하는 방향으로 접근하면 디버깅도 쉬워진다.

profile
게임개발자꿈나무

0개의 댓글