본문 바로가기

Algorithm/String

(C++) - 백준(BOJ) 18312번 : 시각 답

반응형

www.acmicpc.net/problem/18312

 

18312번: 시각

정수 N과 K가 입력되었을 때 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 K가 하나라도 포함되는 모든 시각을 세는 프로그램을 작성하시오. 시각을 셀 때는 디지털 시계를 기준으로,

www.acmicpc.net

간단한 문자열 처리(시간) 문제였습니다.

 

풀이방법

 1. 한계시간 (n시 59분 59초)을 초로 환산한 범위까지 loop를 돌립니다.

 2. 하나의 초로 된 한계시간을 다시 00(시)00(분)00(초)의 문자열 형태로 환산합니다.

 3. k를 문자열로 환산한 뒤 환산된 한계시간 중 있는 문자열인지 확인해줍니다. 찾았으면 answer++

 4. answer를 출력합니다.

Code

#include <bits/stdc++.h>
using namespace std;
int n, k;

string getStringSec(int sec){
    string tmp = "";
    int hour =  sec / 3600;
    if(hour < 10)tmp += "0";
    tmp += to_string(hour);
    sec %= 3600;
    int minute = sec / 60;
    if(minute < 10)tmp += "0";
    tmp += to_string(minute);
    sec %= 60;
    if(sec < 10) tmp += "0";
    tmp += to_string(sec);
    return tmp;
}

int main(){
    cin >> n >> k;
    int limitTime = n * 60 * 60 + 59 * 60 + 59;
    int answer = 0;
    string stringK = to_string(k);
    for(int sec = 0; sec <= limitTime; sec++){
        string stringSec =  getStringSec(sec);
        if(stringSec.find(stringK)!=-1)answer++;
    }
    cout << answer << '\n';
}