갈색머리오목눈이
뱁카이브
갈색머리오목눈이
전체 방문자
오늘
어제
  • 분류 전체보기 (12)
    • 공부 (12)
      • 정보처리기사 (0)
      • CTF (0)
      • webhacking.kr (0)
      • 네트워크 (1)
      • 알고리즘 (1)
      • Java (10)
      • C (0)
    • 활동 (0)
      • 케이쉴드주니어 (0)
      • 봉사활동 (0)
    • 기록 (0)
      • 궁금한것 (0)

공지사항

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
갈색머리오목눈이

뱁카이브

공부/알고리즘

[백준] 2884 : 알람 시계

2020. 12. 30. 19:03

백준 2884번 : 알람 시계 C프로그래밍

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

문제

알람시각이 주어졌을 때, 45분 앞선 시간으로 만들려면 이를 언제로 고쳐야 하는지 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 두 정수 H와 M이 주어진다. (0 ≤ H ≤ 23, 0 ≤ M ≤ 59) 그리고 이것은 현재 상근이가 설정한 놓은 알람 시간 H시 M분을 의미한다.
입력 시간은 24시간 표현을 사용한다. 24시간 표현에서 하루의 시작은 0:0(자정)이고, 끝은 23:59(다음날 자정 1분 전)이다. 시간을 나타낼 때, 불필요한 0은 사용하지 않는다.


해당 문제는 주어진 시각에서 45분을 뺀 시각을 구하도록 하고있다.

 

먼저 크게 2가지로 나눌 수 있다.

1. H가 0일 경우

2. H가 0이 아닐 경우이다.

 

1의 경우를 생각해보자.

시(H)가 0일 때, H는 분(M)이 45보다 작을 경우에는 23시로 바뀔 것이고,분(M)이 45거나 45보다 클 경우에는 변화없이 출력될 것이다.

 

2의 경우를 생각해보자.

시(H)가 0이 아니라는 것은 0보다 크다는 것이다. (시간은 음수가 존재하지 않기에)

그 경우, H는 분(M)이 45보다 작을 경우에는 H-1의 값으로 바뀔 것이고, 분(M)이 45거나 45보다 클 경우에는 변화없이 출력될 것이다.

 

분(M)이 어떻게 달라질지도 생각해보자.

시(H)가 -1이 될 때, M의 값은 M - 45 + 60으로 M + 15의 값이 출력되게 된다.

시(H)가 그대로 일 경우에는 45분을 뺀 M - 45의 값이 출력될 것이다.

 

그에 따른 코드는 다음과 같다.

#include <stdio.h>

int main()
{
    int H;
    int M;

    scanf("%d %d", &H, &M);

    if (H > 0 && M >= 45)
    {
        printf("%d %d", H, M - 45);
    }
    else if (H > 0 && M < 45)
    {
        printf("%d %d", H - 1, M + 15);
    }


    else if (H == 0 && M < 45)
    {
        H = 23;
        printf("%d %d", H, M + 15);
    }
    else if (H == 0 && M >= 45)
    {
        printf("%d %d", H, M - 45);
    }

    return (0);
} 

 

예제 출력 검사시에는

 

입력 출력
10 10 9 25
23 40 22 55
0 30 23 45
0 50 0 5

 

위와 같이 출력이 되면 정답인 코드라고 볼 수 있다.

 

반응형
저작자표시 비영리 동일조건
    갈색머리오목눈이
    갈색머리오목눈이

    티스토리툴바