2016년
문제정의
2016년의 월과 일을 입력하면 요일을 출력해주는 프로그램을 짜는 문제이다.
문제풀이
물론 제일 쉬운 방법은 스위치문이나 if-else문으로 모든 경우의 수를 짜는 것이겠지만(실제로 문제를 풀고 다른 사람 풀이 중에 그렇게 푼 사람이 있었다! 정말 존경한다.), 필자는 1월 1일부터 며칠이나 떨어져있는지 계산한 후 그 날을 요일로 바꾸는 연산을 하였다.
전체 코드는 다음과 같다. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public class Year2016 {
public static void main(String[] args)
{
int a = 1;
int b = 3;
String answer = "";
int[] months = {0,31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30};
String[] days = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
int day = 4;
int month = 1;
while(month != a)
{
day += months[month];
month++;
}
day += b-1;
day %= 7;
answer = days[day];
System.out.println(answer);
}
}
총 시간복잡도는 a의 크기에 따라 달라지므로 a의 크기를 n이라하면 \(O(n)\)이다.
테스트
다른 사람의 풀이를 보니 하나하나 스위치문과 if문을 통해 구현한 사람이 있었다. 정말 대단한 사람이라고 생각한다. 문제풀이를 처음 시작할 때 효율적인 방법을 몰라도 일단 풀고자 하는 마음이 중요하다.