몇시간 했더라?

박영준·2022년 11월 22일
0

코딩테스트

목록 보기
29/300
public class Main {
    public int solution(int[] arr1, int[] arr2) {
        int answer = 0;
        return answer;
    }

    public static void main(String[] args) {
        Main method = new Main();
        int[] arr1 = {9, 9, 9, 9, 7, 9, 8};
        int[] arr2 = {23, 23, 30, 28, 30, 23, 23};
        System.out.println(method.solution(arr1, arr2));
    }
}

지용이는 항해에서 한 주 동안 공부 기록을 남길 알고리즘을 만들어보기로 결심했다.
항해의 체크인 페이지에는 몇가지 조건이 있는데 이를 만족하는 알고리즘을 만들어보자.

  • 체크인과 체크아웃은 항상 정시에 진행한 것으로 가정한다.
  • 체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다.
  • 체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다.
    따라서 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리한다.

제한 조건

  • 체크인(checkin)과 체크아웃(checkout)을 진행한 시간이 담긴 배열 두 개가 주어진다.
  • 각 배열에는 월요일부터 일요일까지 체크인/아웃을 한 시간이 담겨있다.
  • checkin과 checkout 배열의 길이는 각각 7 이다.

입출력 예

checkincheckoutresult
[9, 9, 8, 8, 7, 8, 9][21, 25, 30, 29, 22, 23, 30]96
[9, 7, 8, 9, 7, 9, 8][23, 22, 26, 26, 29, 27, 22]110

지정 입력값

checkincheckoutresult
[9, 9, 9, 9, 7, 9, 8][23, 23, 30, 28, 30, 23, 23]102

정답

방법 1

public class Main {
    public int solution(int[] arr1, int[] arr2) {
        <!--arr1 : 체크인 시간-->
        <!--arr2 : 체크아웃 시간-->

        int answer = 0;

      	<!--arr1의 길이만큼 for 문을 실행 (배열이기때문에 length()가 아닌, length 를 사용함)
        ('checkin 과 checkout 배열의 길이는 각각 7 이다.'라는 조건이 있으므로, arr1과 arr2의 배열의 길이는 동일함. 그래서 arr2.length으로 해도 동일한 결과가 나옴)-->
        for (int i = 0; i < arr1.length; i++) {
            <!--'체크아웃을 할 때 익일 시간은 24+a 로 계산한다.', '체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다.'라는 조건이 있으므로,
            체크아웃 시간(arr2)이 24+5 = 29시(새벽5시)를 넘어가면, 문제의 조건에 따라서 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리함-->
            if (29 <= arr2[i]) {
                arr2[i] = 21;
            }
            <!--한 주 동안의 공부 기록 = 체크아웃 시간 - 체크인 시간 을 i번 만큼 반복한 값들을 모두 더함-->
            answer += arr2[i] - arr1[i];
        }

        return answer;
    }

    public static void main(String[] args) {
        Main method = new Main();
        int[] arr1 = {9, 9, 9, 9, 7, 9, 8};
        int[] arr2 = {23, 23, 30, 28, 30, 23, 23};
        System.out.println(method.solution(arr1, arr2));
    }
}

방법2

public class Main {
    public int solution(int[] arr1, int[] arr2) {
        int answer=0;

        for(int i=0; i< arr1.length; i++){
        	<!--arr2[i] >=29 가 true면 21-arr1[i]을, false면 arr2[i]-arr1[i]을 실행하고 answer로 더한다-->
            answer += (arr2[i] >=29)? 21-arr1[i] : arr2[i]-arr1[i];
        }
        return answer;
    }

    public static void main(String[] args) {
        Main method = new Main();
        int[] arr1 = {9, 9, 9, 9, 7, 9, 8};
        int[] arr2 = {23, 23, 30, 28, 30, 23, 23};
        System.out.println(method.solution(arr1, arr2));
    }
}

삼항 연산자 활용

profile
개발자로 거듭나기!

0개의 댓글