먹었으면 뇌를 쓰자
백준 2525 java - 오븐 시계 본문
문제
잘못된 코드
알람 시계 문제처럼 분 단위가 시 단위로 바뀌는 시점에서 출력을 다르게 해야 한다.
① 현재 시각의 분(min)+요리 시간의 분(time) < 60
hour는 그대로, min은 min+time이다.
② 현재 시각의 분(min)+요리 시간의 분(time) < 60
hour가 1씩 증가하는... 근데 120분 증가하면 2, 180분 증가하면 3 이런 식이다.
일단 hour++;로 써봤다.
min 역시 복잡해졌다. 예를 들어 17시 40분에 60분이 더해지면 18시 40분이다.
이 때 출력값의 분은 40+60=100 / 100-60=40분이 된 것이므로
이를 수식으로 표현하면 min = (min+time)-time 이다.
혼자 코딩은 여기까지 할 수 있었다.
정답
시와 분 두 가지를 생각하느라 머리속이 복잡했었다.
다른 사람의 코드를 보니 전부 분 단위로 통일해서 한번에 계산하는 방법이 있었다.
- 현재 시각의 시(A), 분(B), 요리 시간의 분(C)를 선언해 분 단위로 통일한다.
- 현재 시각+요리 시간=최종 시각(total)을 선언한다. 분 단위이므로 A는 60분을 곱해준다.
- total을 60분으로 나눈 몫이 시(A), 나머지가 분(B)이 된다.
[예제] 17시 40분+80분 = 1060분+80분 = 1140분
최종 시각의 시 = 1140/60 = 19시
최종 시각의 분 = 1140/60...0 = 0분
- 23시의 경우 24시가 아닌 0시로 넘어가야하므로 여기서 분기점을 나누어준다.
① 최종 시각이 24시(1440분) 이상
total에서 1440을 뺀 뒤 계산을 이어가야 한다. 이 때 -= 연산자가 쓰인다.
total -= 1440; 은 total에서 1440을 뺀 뒤 계산을 이어가라는 뜻이다.
최종 시각의 시(A) = total / 60 이 되고, 최종 시각의 분(B) = total % 60 이 된다.
② 최종 시각이 24시(1440분) 미만
최종 시각의 시(A) = total / 60 이 되고, 최종 시각의 분(B) = total % 60 이 된다.
(+추가 풀이)
혼자 다시 풀어보면서 새로운 풀이법을 찾았다. (else문 아래)
①번 분기점에서 hour -= 1440; 를 선언한 뒤 계산을 진행하는 것이 아닌,
먼저 계산을 한 다음에 24시간을 빼주는 방법이다.
조삼모사이긴 한데, 이 코드가 좀 더 직관적으로 이해하기 쉬웠다.
'JAVA > 백준 알고리즘' 카테고리의 다른 글
백준 2739 java - 구구단 (야호~ 한 번에 맞힘) (0) | 2022.11.04 |
---|---|
백준 2480 java - 주사위 세 개 (하면 된다) (0) | 2022.11.02 |
백준 2884 java - 알람 시계 (0) | 2022.11.02 |
백준 14681 java - 사분면 고르기 (0) | 2022.11.01 |
백준 2753 java - 윤년 (0) | 2022.10.31 |