CodingSpace

구현 - 시각 본문

이것이 취업을 위한 코딩 테스트다 with 파이썬/Chapter4. 구현

구현 - 시각

개발자_조이킴 2023. 8. 29. 01:19

정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는

모든 경우의 수를 구하는 프로그램을 작성하시오.

예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다.

  • 00시 00분 03초
  • 00시 13분 30초

반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안되는 시각이다.

  • 00시 02분 55초
  • 01시 27분 45초

 

입력 조건

  • 첫째 줄에 정수 N이 입력된다. (0 ≤ N  23)

출력 조건

  • 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 출력한다.

입력 예시

  • N : 5

출력 예시

  • 11475

My Solution (javascript)

// startTime과 endTime을 비교해서 startTime과 endTime이 같으면 false 반환
function compare(startTime, endTime) {
    let [startHour, startMin, startSec] = startTime.split(":");
    let [endHour, endMin, endSec] = endTime.split(":");

    if ((Number(endHour) - Number(startHour)) > 0) return true;
    if ((Number(endMin) - Number(startMin)) > 0) return true;
    if ((Number(endSec) - Number(startSec)) > 0) return true;
    else return false;
}

// time에 3이 존재하는지 체크하는 함수
function check(time) {
    let hour = time.split(":")[0]
    let min = time.split(":")[1]
    let sec = time.split(":")[2]
	// 3이 시간(hour)이나 분(min)이나 초(sec)에 포함되면 true 반환
    if (hour.indexOf('3') !== -1 || min.indexOf('3') !== -1 || sec.indexOf('3') !== -1) {
        return true;
    } else { // 3이 포함되지 않으면 false 반환
        return false;
    }
}

// time에 +1초 증가시켜주는 함수
function next(time) {
    let [hour, min, sec] = time.split(":");
    sec = Number(sec) + 1;
	// sec가 60인 경우 sec을 0으로 업데이트 및 min + 1분
    if (sec === 60) {
        sec = 0;
        min = Number(min) + 1;
    }
	// min가 60인 경우 min을 0으로 업데이트 및 hour + 1시간
    if (min === 60) {
        min = 0;
        hour = Number(hour) + 1;
    }
	// +1초 증가시킨 값 반환
    return hour.toString() + ":" + min.toString() + ":" + sec.toString();
}

function count(N) {
    let count = 0;
    let start = "00:00:00";
    let end = N.toString() + ":" + "59" + ":" + "59";
	// start가 end와 같은 값이 될때까지 while문 실행
    while (compare(start, end)) {
    	// start에 3이 있으면 count + 1
        if (check(start)) count++;
		// start에 +1초
        start = next(start);
    };
    return count;
}

 

Comments