2022년 11월 22일 화요일 오후 1시 항해99에서 이틀 뒤에 열리는 알고리즘 테스트를 대비한 모의고사를 진행했다.
15시까지 제출로 2시간의 시간이 주어졌다.
문제는 총 3문제가 주어지는데 그 중 한 가지를 풀고 스크린 레코딩을 통하여 음성과 함게
풀이 영상을 찍은 뒤 유튜브에 업로드하고 영상 링크와 해당 문제의 코드를 제출하면 된다.
1번은 신대륙 발견이라고 명명되어 있었지만 시작 날짜를 입력하였을 때 일정 일수 뒤의 날짜가 출력되는 문제였고
3번은 소수점이 들어가고 (상)이 표기되어 있길래 프로그래머스에서 익숙하게 푼 배열 유형의 문제인 2번을 선택했다.
아래는 2번 문제에 대한 설명과 조건이고 제출한 풀이 코드이다.
2번. 몇시간 했더라? (중)
문제 설명
지용이는 항해에서 한 주 동안 공부 기록을 남길 알고리즘을 만들어보기로 결심했다. 항해의 체크인 페이지에는 몇가지 조건이 있는데
이를 만족하는 알고리즘을 만들어보자.
- 체크인과 체크아웃은 항상 정시에 진행한 것으로 가정한다.
- 체크아웃을 할 때 익일 시간은 24+a 로 계산한다. 즉 새벽 2시는 24+2 인 26으로 표기한다.
- 체크인 페이지는 체크아웃이 새벽 5시 정각이나 새벽 5시를 넘어가면 체크아웃을 깜빡한 것으로 간주한다. 따라서 새벽 5시가 넘어가 체크아웃을 하게 되면 자동으로 체크아웃을 오후 9시(21시)로 한 것으로 처리한다.
제한 조건
- 체크인(checkin)과 체크아웃(checkout)을 진행한 시간이 담긴 배열 두 개가 주어진다.
- 각 배열에는 월요일부터 일요일까지 체크인/아웃을 한 시간이 담겨있다.
- checkin과 checkout 배열의 길이는 각각 7 이다.
입출력 예
checkin | checkout | result |
[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 |
지정 입력값
checkin | checkout | result |
[9, 9, 9, 9, 7, 9, 8]
|
[23, 23, 30, 28, 30, 23, 23] | 102 |
Java 답안 포맷
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));
}
}
풀이
public class Main {
public int solution(int[] arr1, int[] arr2) {
int answer = 0; // answer : 총 공부시간 arr1 : 체크인 시간 arr2 : 체크아웃 시간
for(int i=0; i<arr1.length; i++){ // 배열의 길이만큼 반복문 실행
if(arr2[i]>=29){ // 29는 체크아웃 초기화 시간인 5시(24+5)
arr2[i] =21; // 5시거나 5시를 넘어가면 21시 체크아웃 처리
}
answer += arr2[i]-arr1[i]; // arr2에서 arr1의 각 인자를 뺀 값을 합산
}
return answer;
}
public static void main(String[] args) {
Main method = new Main();
int[] arr1 = {9, 9, 9, 9, 7, 9, 8}; // arr1 입력값
int[] arr2 = {23, 23, 30, 28, 30, 23, 23}; // arr2 입력값
System.out.println(method.solution(arr1, arr2));
}
}
// 출력 : 102