문제
h:m 모양의 시간과 분으로 이루어져 있는 시간을 입력받아 1시간 뒤의 시간을 출력하기
실행 결과
코드(c++)
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main() {
string str;
cin >> str;
int h, m;
stringstream ss(str);
char colon;
ss >> h >> colon >> m;
if (h == 23) {
h = 0;
} else {
h = h + 1;
}
cout << h << ":" << m;
return 0;
}
코드 설명
파이썬으로 구현하면 보다 쉽지만, c++의 경우 생각할 게 은근 있는 문제였다..
일단 문제에서 가장 핵심은 문자열을 : 라는 문자를 기준으로 분리하는 것이라고 생각했다.
시간이 일의 자리이건, 십의 자리이건 관계없이 해당 콜론을 기준으로 h와 m을 잘라내야만 했다.
따라서 sstream 라이브러리를 이용해 문자열을 분리하여 읽도록 구현했다.
입력 예시처럼 2:59와 같은 입력을 받으면 2 / : / 59 이런식으로 처리할 것이다.
즉, 정수 / 문자 / 정수 차례차례 입력 받으므로 각각 h, colon, m 이렇게 받아들인다.
입력 연산자 >>는 스트림에서 값을 읽을 때 해당 변수의 타입과 일치하는 값만 읽기 때문이다.
그리고 23시가 넘어가는 경우의 예외처리도 함께 진행했는데
1 ≤ h ≤ 22 라는 조건이 달린 걸 문제를 다 푼 후 발견했다.
다행히 문제는 맞긴 했지만, 항상 문제를 잘 읽고 풀도록 하자.
문제 출처:
'PS' 카테고리의 다른 글
백준 1977번: 완전제곱수 (0) | 2024.04.23 |
---|---|
백준 1924번: 2007년 (0) | 2024.04.21 |
코드트리: 소수 (c++) (1) | 2024.04.18 |
백준 5597번: 과제 안 내신 분..? (0) | 2024.03.15 |
백준 10828번: 스택 (0) | 2023.03.25 |