알고리즘 문제 풀이/BOJ

[backjoon]1924 2007년 java

v 2022. 1. 2. 16:00

https://www.acmicpc.net/problem/1924

 

1924번: 2007년

첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.

www.acmicpc.net

나중에 문자열을 가공해서 산출하는 것과 같은 알고리즘 문제풀이에서 숫자 관련 응용문제가 나올 때 다져두면 좋을 것 같은 문제.

알고리즘 풀이를 하면서 느낀건 일단 알고리즘들을 이용해서 풀이하는 것도 중요하지만 일단 풀고 보는 것 구현이 제일 중요하다고 생각한다. 배열을 다루는 거나 그리디 같은 것도 기본적으로는 구현에서 시작한다고 생각하기 때문이다.

이 문제의 경우도 처음엔 이리저리 숫자랑 규칙성 이용해서 해보려고 했지만, 잘 되지 않았다.

이후 그냥 무작정 날짜수 다 계산하고,  요일을 인덱스화 해서 풀이하였더니 너무 쉽게 풀렸다.

사실 값도 너무 작기에 (이 문제의 경우 365가 최대 값이다.) 가벼운 구현 풀이를 하면 된다.

풀이는,

1.  날짜를 숫자로 변환한다.

2.  날짜를 7로 나눈 다음 해당 숫자에 맞게 요일을 골라준다.

 

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		int[] month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
		String[] day = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };

		st = new StringTokenizer(br.readLine());
		int X = Integer.parseInt(st.nextToken());
		int Y = Integer.parseInt(st.nextToken());

		int date = 0;
		for (int i = 0; i < X - 1; i++) {
			date += month[i];
		}

		date += Y;
		date %= 7;

		System.out.println(day[date]);
	}
}
반응형