Baekjoon Online Judge
문제
다솜이는 타임머신을 타고 8364년으로 갔다. 다행히 지구는 평화롭다.
다솜이는 2008년으로 돌아가기 전에 시계를 샀다. 다솜이는 시계를 볼 줄 모르기 때문에, 디지털 시계를 샀다. 디지털 시계는 HH:MM:SS와 같은 모양으로 시간을 나타내 준다. 그리고 앞에서부터 차례대로 HH는 시, MM은 분, SS는 초를 나타낸다.
다솜이는 8364년에는 2008년과 같은 방법으로 시간을 나타내는지 모른다. 2008년엔 시:분:초를 나타내는지만, 8364년엔 분:시:초로 나타낼지도 모른다.
다행히 시는 01부터 12, 분은 00부터 59, 초는 00부터 59를 나타낸다.
다솜이의 시계에 쓰여 있는 숫자가 주어졌을 때, 이 시간을 읽을 수 있는 가능한 방법의 수를 출력하는 프로그램을 작성하시오. 나타내는 시간이 같더라도, 시, 분, 초를 읽을 수 있는 위치가 다르면 다른 방법으로 센다. 또한, 방법의 수가 0일 수도 있다.
예를 들어, 21:23:01 은 21분 23초 01시 로 읽을 수도 있지만, 21초 23분 01시로 읽을 수도 있다.
입력
첫째 줄에 시간이 주어진다. 시간은 DD:DD:DD와 같은 꼴로 주어진다. 항상 8자리(:도 포함)로만 들어오며, D는 0-9 사이의 숫자이다.
출력
첫째 줄에 시간을 읽을 수 있는 가능한 방법의 수를 출력한다.
예제 입력 | 예제 출력 |
00:00:00 | 0 |
01:00:00 | 2 |
01:12:23 | 4 |
21:23:01 | 2 |
01:02:03 | 6 |
59:59:01 | 2 |
01:01:59 | 4 |
풀이
#include <iostream>
#include <string>
using namespace std;
int main() {
string d;
cin >> d;
int time[3];
// 입력한 문자열에서 숫자 뽑아내기
time[0] = stoi(d.substr(0, 2));
time[1] = stoi(d.substr(3, 5));
time[2] = stoi(d.substr(6));
int canT = 0; // 시 자리에 들어갈 수 있는 숫자의 개수
for (int i = 0; i < 3; i++) {
if (time[i] > 59) { // 초나 분에도 들어가지 못하는 숫자가 있을 때
canT = 0;
break;
}
if (time[i] > 0 && time[i] <= 12) canT++;
}
// 출력
cout << canT * 2 << endl;
return 0;
}
string으로 시간을 입력 받은 뒤 :로 구분되는 3개의 숫자를 뽑아 배열에 저장했다.
3개의 숫자 중에서 시간 자리에 들어갈 수 있는 숫자의 개수 canT를 헤아렸는데, 이때 3개 숫자 중에서 초나 분에도 들어가지 못하는 숫자가 포함되어 있다면 canT를 0으로 초기화한 뒤 반복문을 끝냈다.
시, 분, 초에는 입력받은 3개의 숫자가 중복 없이 들어가야 한다.
//시 분 초
canT * (3 - 1(시에 들어간 숫자 1개)) * (3 - 2(시, 분에 들어간 숫자 2개)) = 시간을 읽을 수 있는 방법의 수
그러므로 위의 공식을 정리한 식인 canT * 2를 통해 얻은 값을 출력했다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 1004번 - 어린 왕자 (0) | 2022.07.19 |
---|---|
[Baekjoon/C++] 1453번 - 피시방 알바 (0) | 2022.06.05 |
[Baekjoon/C++] 1434번 - 책 정리 (0) | 2022.06.05 |
[Baekjoon/C++] 1418번 - K-세준수 (0) | 2022.06.05 |
[Baekjoon/C++] 1392번 - 노래 악보 (0) | 2022.05.30 |