[코드트리 챌린지] 6번째 글 = 또 다시 찾아온 정체기
오늘도 인증시간이 돌아왔다.
저번에 운좋게 통과한 세번째 문제를 이번에도 풀어내는 것을 보며 "아.. 내가 그래도 이정도 문제는 풀 수 있구나"
라는 느낌을 받았고, 나의 실력을 전보다는 객관적으로 판단할 수 있었다.
하지만 또 4번째 문제에서부터 막혀버렸고, 점수는 지난 번 보다 떨어졌다.
대충 짐작해보건데 현재 내 실력은 진단 평가 문제 기준, 3번째 문제 ~ 4번째 문제 사이에 있는 표본에 속해있는 듯 하다.
(400 후반 ~ 500 초반 사이 이지 않을까..)
지난 번에 이어 이번에도 시뮬레이션 파트가 약점으로 지목되었기에 마냥 무시할 수 없어 시뮬레이션 파트를 풀고 있다.
지난 다중 반복문 파트에서 막혔던 것처럼 살짝 아쉽고, 텐션이 떨어진 것도 사실이지만 어쩔 수 없다.
내가 깨달을 때까지 공부하고 인풋을 늘리는 수밖에 없다.
왕도는 없다. 포기하지 않고 조금이라도 나아가는 것 만이 답이다.
[시뮬레이션 파트 1 - 날짜와 시간 계산]
Date to Date
2011년 m1월 d1일로부터 2011년 m2월 d2일까지는 총 며칠이 있는지를 계산하는 프로그램을 작성해보세요. 2011년은 윤년이 아닌 해이기 때문에 2월은 28일까지 있습니다. 단, 날짜 계산시 시작일을 포함하여 세도록 합니다.
예제1
입력:
11 5 12 21
출력:
47
나의 풀이
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String[] str = s.nextLine().split(" ");
int[] arr = new int[str.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(str[i]);
}
// m1, d1, m2, d2
int m1 = arr[0];
int d1 = arr[1];
int m2 = arr[2];
int d2 = arr[3];
int month = m1;
int days = d1;
// 시작일을 포함해서 계산
int result = 1;
// 0번 인덱스를 사용하지 않음. (1번 인덱스가 1월의 일자)
int[] num_of_days = new int[] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
while (true) {
if (month == m2 && days == d2) {
break;
}
result++;
days++;
if (days > num_of_days[month]) {
month++;
days = 1;
}
}
System.out.println(result);
}
}
시뮬레이션 기초 파트는 그냥 머릿속으로 이럴 것 같은데? 생각하는 부분이 맞을 확률이 높다.
첫 부분이기 때문에 어려운 시뮬레이션을 요구하지 않는 듯 하다. 때문에 다양한 풀이 방법들이 있을 수 있다.
어떻게 푸는 것이 좋을까? 많이 생각해봤는데, 이론 부 설명에서 나온 반복문을 통한 처리를 사용해보았다.
나는 평소 for문을 많이 사용하는데 예제가 while문을 사용했길래 해당 문제에 적용해볼까 싶어 위 코드와 같이 풀어보았다.