먹었으면 뇌를 쓰자

백준 2525 java - 오븐 시계 본문

JAVA/백준 알고리즘

백준 2525 java - 오븐 시계

뇌이비 2022. 11. 2. 18:14

문제

 

 

 

잘못된 코드

알람 시계 문제처럼 분 단위가 시 단위로 바뀌는 시점에서 출력을 다르게 해야 한다.

 

① 현재 시각의 분(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시간을 빼주는 방법이다. 

조삼모사이긴 한데, 이 코드가 좀 더 직관적으로 이해하기 쉬웠다. 

 

 

Comments