오늘은 간단한 코딩테스트를 본 날이였다. 풀어봤던 문제와 비슷하게 나왔고 소신것 문제를 생각한대로 쓴다면 간단하게 풀 수 있는 문제라고 생각한다. //하지만 목요일 본고사때는 알수 없으니 더 더욱 열심히 공부 해야 할 것 같다.
문제를 이해해서 풀어 보자면, 1일차 날짜를 넣었을때 마지막 날을 계산해서 출력해야 하는 문제이다.
public class Test01 {
public static String solution(int month, int day) {
int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int[] month1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
int index = month - 1;
int date = days[index] + 98 - ( days[index]-day) ;
for (int i = 0; i < month1.length; i++) {
if (date < 30) {
return month1[index] + "월 " + date + "일 ";
}
date -= days[index++];
}
return "틀림";
}
public static void main(String[] args) {
System.out.println(solution(1, 18));
}
}
달과 일을 받고 해당 달의 날짜 +98 일 그리고 달의 날짜와 겹치는 날짜 만큼을 제외했다.
그리고 반복문을 이용해서 해당 달에 날짜 수만큼 제외하고 그 수가 30이하일때 달과 일을 출력하는 형태의 코드를 작성했다. 다른 예외 사항도 생각이 났으나, 일단은 원하는 결과 값을 가지기에는 문제가 없었던 것 같다.
이 문제는 어렵지는 않았으나, 문제 내부에 있는 새벽 5시가 넘어 갔을때, 오후9시로 체크 아웃 시간을 바꾼다. 이 문장을 잘 생각하고 문제를 풀어야 한다고 생각한다.
(왜냐하면, 내가.. 문제를 이해 하는데 한참 걸렸던 이유가 저 문장 때문이다.)
public class Test02 {
public int solution(int[] arr, int[] arr2){
int answer = 0;
for (int i =0; i < arr.length; i++){
if(arr2[i] >= 29){
arr2[i] = 21;
}
answer += arr2[i] - arr[i];
}
return answer;
}
public static void main(String[] args) {
Test02 test = new Test02();
int[] arr1 = {9, 9, 9, 9, 7, 9, 8};
int[] arr2 = {23, 23, 30, 28, 30, 23, 23};
System.out.println(test.solution(arr1, arr2));
}
}
두 배열의 길이가 같으니 반복문을 이용해 해당배열의 수가 29(새벽5시) 보다 같거나 크면 21로 바꿔주고 체크 아웃 배열의 값과 체크인 배열의 값을 빼서 answer변수에 계속 더해주는 형태로 코드를 짰다. 잘 푼지는 모르겠지만 오늘도 고민하면서 성장하는 시간을 가질 수 있었던 것같다.