일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 이분탐색
- SQL
- 해시를사용한집합과맵
- 소수판정
- C
- 정수론
- 프로그래머스연습문제
- 프로그래머스sql
- 그리디알고리즘
- 구현
- 정렬
- 논문구현
- 그리디
- 자료구조
- MySQL
- 문자열
- 수학
- C언어
- 백준
- 큐
- Image Classification
- 사칙연산
- 논문리뷰
- 프로그래머스코딩테스트
- 다이나믹프로그래밍
- C++
- 이진탐색
- 프로그래머스
- 백준알고리즘
- 브루트포스알고리즘
- Today
- Total
초보 개발자의 이야기, 릿허브
[C++] 백준 2884번 알람 시계 본문
1. 문제이해
https://www.acmicpc.net/problem/2884
상근이가 설정한 알람시간(H시 M분)이 주어질 떄, 창영이의 방법을 적용했을 때
설정해야 하는 알람 시간을 출력하는 것이 목표이다.
2. 문제풀이
창영이의 방법을 사용하게 되면, 상근이가 설정한 시간보다 45분 일찍 알람을 설정해야 한다.
예를 들어, 상근이가 설정한 시간이 11시 40분일 경우,
창영이의 방법을 적용하면, 10시 55분에 알람을 설정해야 한다는 뜻이다.
주어진 단위가 시간인 만큼 코드를 짤 때 주의해야 할 경우와 그에 대한 풀이방법은 다음과 같다.
1. 시간과 분이 모두 바뀌는 경우
: 11시 40분처럼, 45분 이전의 시간이 시간과 분 모두 바뀌는 경우(10시 55분)가 위의 예이다.
40분보다 5분(45 - 40) 더 일찍 설정해야 하므로, 시간을 11 - 1 = 10, 분을 60 - 5 = 55 해주어야 한다.
이 경우, (상근이가 설정한 분 - 45 < 0) 이므로,
새로 설정할 알람 시간 = 상근이가 설정한 시간 - 1
새로 설정할 알람 분 = 60 - (45 - 상근이가 설정한 분)
이 된다.
단, 예를 들어 0시 30분처럼, 단순히 시간이 -1되는 경우가 아닌 경우 (23시 45분) 에는
특별한 예외를 두어 (상근이가 설정한 분 - 45 < 0) 이고, 상근이가 설정한 알람시간 = 0 인 경우,
새로 설정한 알람 시간 = 23시 로 설정해준다.
2. 분만 바뀌는 경우
: 11시 45분처럼, 45분 이전의 시간이 분만 바뀌는 경우 (11시 0분)가 위의 예이다.
45분을 상근이가 설정한 분에서 빼주어도 시각이 바뀌지 않으므로 분만 45 - 45 = 0 해주면 된다.
이 경우, (상근이가 설정한 분 - 45 >= 0) 이므로,
새로 설정할 알람 시간 = 상근이가 설정한 시간
새로 설정할 알람 분 = 상근이가 설정한 분 - 45
이 된다.
작성한 소스코드는 아래와 같다.
3. 소스코드
#include <iostream>
using namespace std;
int main() {
int hour, minute;
cin >> hour >> minute;
// 1. 시간과 분이 모두 바뀌는 경우
if (minute - 45 < 0) {
// 상근이가 설정한 알람시간 = 0 인 경우
if (hour == 0) {
hour = 23;
minute = 60 - (45 - minute);
}
// 그 외의 경우
else {
hour = hour - 1;
minute = 60 - (45 - minute);
}
}
// 2. 분만 바뀌는 경우
else {
minute = minute - 45;
}
cout << hour << " " << minute;
return 0;
}
상근이가 설정한 알람 시간(hour), 분(minute)을 입력받는다.
이후, 2. 문제풀이에서 도출한 풀이방식을 그대로 적용 후 출력해주면 된다.
1. 시간과 분이 모두 바뀌는 경우 (상근이가 설정한 분 - 45 < 0)
: 상근이가 설정한 알람시간 = 0 인지 확인, 맞다면 새로 설정한 알람 시간 = 23시 로 설정하고
새로 설정할 알람 분 = 60 - (45 - 상근이가 설정한 분) 으로 설정
만약, 상근이가 설정한 알람시간이 0 이 아니면,
새로 설정할 알람 시간 = 상근이가 설정한 시간 - 1
새로 설정할 알람 분 = 60 - (45 - 상근이가 설정한 분)
2. 분만 바뀌는 경우 (상근이가 설정한 분 - 45 >= 0)
: 새로 설정할 알람 분 = 상근이가 설정한 분 - 45 만 해주면 된다.
문제에 대한 질문과 지적은 언제나 환영입니다.😊
'코딩테스트 > 📗 백준 (BOJ)' 카테고리의 다른 글
[C++] 백준 1449번 수리공 항승 (0) | 2022.01.07 |
---|---|
[C++] 백준 1541번 잃어버린 괄호 (0) | 2022.01.04 |
[C++] 백준 2588번 곱셈 (0) | 2021.12.15 |
[C++] 백준 1008번 A / B (0) | 2021.12.14 |
[C++] 백준 1934번 최소공배수 (0) | 2021.12.02 |