https://www.acmicpc.net/problem/2525
문제 2525번을 가져왔다.
이 문제를 가져온 이유는 코딩의 축약에 대하여 생각을 하게 되어 가져왔다.
문제는 아래와 같다.
내용은 길지만 문제는 간단하다.
주어진 시간( A시 B분 )에 타이머 시간( C분) 을 추가하면 완료시간 ( A시 (B+C)분 )을 구하는 것이다.
단, 주의해야할 점은 시는 24시 단위로, 분은 60분 단위로 바뀌기 때문에 B + C의 값이 60이 넘어가면 그만큼 A에 값을 추가해 줘야한다.
우선 내가 작성한 코드는 아래와 같다.
A , B = map(int, input().split())
C = int(input())
if (B + C) // 60 >= 1 :
if A+((B+C)//60) >= 24 :
print(f'{(A+((B+C)//60))-24} {(B+C)-(60*((B+C)//60))}')
else :
print(f'{A+((B+C)//60)} {(B+C)-(60*((B+C)//60))}')
else :
print(f'{A} {B+C}')
A, B에 정수로 시간과 분 값을 입력받고,
C에 추가 시간을 정수로 입력받는다.
(B+C) // 60 >= 1
B분과 주어진 시간 C분을 합을 60으로 나누었을 때 몫이 1보다 크면 그만큼 A시에 추가가 되도록 설정하였다.
A+((B+C)//60) >= 24
단, A시에 시간이 추가가 될 경우 그 A의 값이 24이상일 경우 -24값을 빼주게 설정했다.
출력되는 값은 문제에서 주어진 출력값과 동일하였다.
그러나 문제를 제출하였을 경우 에러가 발생하였다.
나는 곰곰히 생각해봐도 틀린 부분을 찾지 못하여 구글링하여 다른 답안을 확인하였다.
다른 답안들과 비교해보니 내 코딩이 너무 지저분하고 복잡하다는 것을 깨달았다.
그래서 정답을 참고하여 내가 수정한 코드는 아래와 같다.
A , B = map(int, input().split())
C = int(input())
A = A + ((B+C) // 60)
B = (B+C) % 60
if A >= 24 :
print(f'{A-24} {B}')
else :
print(f'{A} {B}')
A 값에 주어진 시간 B와 추가되는 시간 C의 합을 60으로 나눈 몫을 추가해 주었다.
A = A + (B + C) // 60
B 값에는 주어진 시간 B와 추가되는 시간 C의 합을 60으로 나눈 나머지 값으로 변경하였다.
B = (B + C) % 60
위처럼 값을 미리 지정하여 수식을 정리하니 훨씬 간결하고 깔끔해졌다.
가독성도 용이해져 나중에 다시 볼 때 한 눈에 이해하기가 쉽다.
🎉물론, 제출을 하였고 정답으로 나왔다🎉
이 문제를 품으로써 코딩을 어떻게 구성하고 간결하게 작성하는 방법 대해 한 번 더 생각하게 되었다.