#19. 백준 2884번 문제 풀이: 알람 시계 문제 원본 보기
시 분을 입력받아 45분 이전시간(45분을 뺀 시간)을 계산하는 프로그램. 시간은 0~23시 이다.
입력/출력
--입력--
10 10
--출력--
9 25
문제풀이+해설
시간은 10진수가 아니기에 더하거나 뺄 때 단순한 숫자의 빼기와 다르다.

한가지 방법은 분에서 45분을 빼고, 분이 음수가 되면 시간에서 한 시간 빼주고 분에 60분을 더해 주는 방법으로 계산할 수 있다.
10시 10분 이라면 10분-45분=-35분, 음수 이므로 시간에서 한시간을 빼면 9시, 분에 60분 더하면 25분, 결과는 9시 25분이 된다.

또 다른 방법은 시간을 분으로 환산하고 분을 뺀 다음 다시 시간과 분으로 변환하는 방법이다.
10시 10분 이라면 10시*60분+10분 = 610분. 45분을 빼면 565분. 60으로 나누면 시간, 나머지는 분이 된다.
두번째 방법으로 프로그램을 작성해 보겠다.
code sol.
#include <stdio.h>

int main() {
  int h, m, hm; //hm: 시각을 분으로 환산할 때 사용할 변수
  scanf("%d %d", &h, &m); // 시간, 분 값을 입력받아 정수로 대입.
  hm = h*60 + m; // 시간에 60을 곱해 분으로 환산하고 +분을 더한다.
  hm -= 45; // 45 분을 뺀다.
  if(hm < 0) hm += 24*60; // -값이면 24시간 분을 더해줌
  printf("%d %d", hm / 60, hm % 60);
  //전체 분을 60으로 나눈값은 시간, 나머지 값은 분이 된다.
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.