본문 바로가기
Programming/Cos Pro 1급

Cos Pro 1급 - 샘플 문제 풀이 2차 2번

by 우공80 2022. 10. 10.
728x90

문제 지문 #2

A 지하철역의 오늘 하루 지하철 도착 시각이 순서대로 들어있는 배열이 있습니다. 현재 시간이 주어졌을 때, 지하철을 타기위해서는 최소 몇 분을 기다려야 하는지 구하려 합니다. 이를 위해 다음과 같이 프로그램 구조를 작성했습니다.

1. 00:00을 기준으로 해서 현재 시각을 분 단위로 변환합니다.
2. 배열을 순회하며 다음을 수행합니다.
  2-1. 00:00을 기준으로, 각 지하철 도착 시각을 분 단위로 변환합니다.
  2-2. 현재 시각과 지하철 도착 시각을 비교하여 최소 대기 시간을 구합니다.
3. 2번 단계에서 구한 최소 대기 시간을 return 합니다.

오늘 하루 동안의 지하철 도착 시각이 순서대로 들어있는 배열 subwayTimes와 현재시간 currentTime이 매개변수로 주어질 때, 지하철을 타기 위해 기다려야 하는 최소 대기 시간을 return 하도록 solution 메소드를 작성했습니다. 이때, 위 구조를 참고하여 중복되는 부분은 func_a라는 메소드로 작성했습니다. 코드가 올바르게 동작할 수 있도록 빈칸을 알맞게 채워 전체 코드를 완성해주세요.


매개변수 설명

오늘 하루 동안의 지하철 도착 시각이 순서대로 들어있는 배열 subwayTimes와 현재시간 currentTime이 solution 메소드의 매개변수로 주어집니다.

  • subwayTimes의 길이는 1 이상 100 이하입니다.
  • subwayTimes에는 지하철 도착 시간이 중복없이 들어있습니다.
  • 지하철 도착 시각과 현재 시각은 24시간 표기법을 이용하여 나타냅니다.
    • 24시간 표기법은 00:00부터 23:59까지로 시간을 표기합니다.
    • 입력으로 주어지는 시간은 항상 "XX:YY"형태로 주어집니다.
  • 지하철 첫차 도착 시각은 05:00 이후이며, 막차 도착 시각은 23:59 이전입니다.

return 값 설명

지하철을 타기 위해 기다려야 하는 최소 대기 시간을 return 해주세요.

  • 만약 오늘 탈 수 있는 지하철이 없다면 -1을 return 하면 됩니다.

예시

subwayTimes currentTime return
["05:31", "11:59", "13:30", "23:32"] "12:00" 90
["14:31", "15:31"] "15:31" 0

예시 #1
현재시간 12:00에서 가장 가까운 지하철 도착 시각은 13:30입니다.
따라서 최소 90분을 기다려야 합니다.

예시 #2
현재 시각은 15:31이며, 15:31분에 도착하는 지하철에 탑승할 수 있습니다. 따라서 0분만 기다리면 됩니다.


혼자 풀이

이번에도 빈칸 채우기 입니다.
시각을 나타내는 YY:MM 포맷을 전부 분으로 변경(func_a)해서 지하철 시각과 현재 시각의 차이를 구합니다.
이때 지하철 시각이 현재시각보다 늦어야 계산이 가능하고,  만약 탈 수 있는 지하철이 없으면 -1을 return합니다.

사실 저는 지하철 시각이 현재 시각 보다 크거나 같아야 하는 조건문 작성할 때 등호(=)를 하나 빼먹어서 틀렸습니다.

/*======================================
   2차 2번 지하철 기다리는 시간 구하기
======================================*/
class MySolution {
    public int func_a(String times){
        int hour = Integer.parseInt(times.substring(0, 2));
        int minute = Integer.parseInt(times.substring(3));
        return hour*60 + minute;
    }
    public int solution(String[] subwayTimes, String currentTime) {
//        int currentMinute = func_a(@@@);
        int currentMinute = func_a(currentTime); //수정한 부분
        int INF = 1000000000;
        int answer = INF;
        for(int i = 0; i < subwayTimes.length; ++i){
//            int subwayMinute = func_a(@@@);
//            if(@@@){
            int subwayMinute = func_a(subwayTimes[i]); //수정한 부분
            if(subwayMinute >= currentMinute){  //수정한 부분
            answer = subwayMinute - currentMinute;
                break;
            }
        }
        if(answer == INF)
            return -1;
        return answer;
    }

    // 아래는 테스트케이스 출력을 해보기 위한 main 메소드입니다.
    public static void main(String[] args) {
        MySolution sol = new MySolution();
        String[] subwayTimes1 = {"05:31", "11:59", "13:30", "23:32"};
        String currentTime1 = "12:00";
        int ret1 = sol.solution(subwayTimes1, currentTime1);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret1 + " 입니다.");

        String[] subwayTimes2 = {"14:31", "15:31"};
        String currentTime2 = "15:31";
        int ret2 = sol.solution(subwayTimes2, currentTime2);

        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("solution 메소드의 반환 값은 " + ret2 + " 입니다.");
    }
}

정답과 동일합니다.

# 첨부 파일

프로젝트 파일 전체를 첨부합니다.
Solution 이 문제, CorrectSolution 이 정답, MySolution이 제가 푼 것입니다.
"Project from existing sources..." 메뉴에서 불러다 쓰시면 됩니다.

SecondQuestion2.zip
0.01MB

출처: https://www.ybmit.com/cos_pro/cos_pro_r_test.jsp

728x90

댓글