백준 1924 2007년 java

Dec 2, 2025
백준 1924 2007년 java

1. 문제에 대하여 📦

2007년 1월 1일이 월요일 때, 주어지는 달과 일에 해당하는 요일을 구하여라.

2. 코드가 나오기까지 🛠️

KEY WORD: 수학, 시뮬레이션
  1. (월, 일, 요일)을 담는 클래스 만들기
  1. hashcode와 equals를 구현해서 클래스 객체 내용물만으로 Key가 서로 구분되도록 조치
  1. 연 달력 구해서 입력에 맞는 값에 대한 출력 구하기.

3. 코드 🌐

import java.util.*; import java.io.*; import java.util.Map.Entry; import java.util.function.Supplier; // b 6566 애너그램 그룹 public class Main { static class Day { int mm; int dd; int yoil; public Day (int mm, int dd, int yoil) { this.mm = mm; this.dd = dd; this.yoil = yoil; } @Override public int hashCode(){ return 31*mm + dd; } @Override public boolean equals(Object obj){ if(obj == null || obj.getClass() != this.getClass()) return false; Day convert = (Day) obj; return convert.mm == this.mm && convert.dd == this.dd; } @Override public String toString(){ return String.format("%d,%d,%d", this.mm, this.dd, this.yoil); } } static ArrayList<Day> year = new ArrayList<>(); static HashMap<Day, Integer> index = new HashMap<>(); public static void main(String[] args) throws IOException { init(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int mm = Integer.parseInt(st.nextToken()); int dd = Integer.parseInt(st.nextToken()); int idx = index.get(new Day(mm,dd,0)); switch (year.get(idx).yoil){ case 0: { System.out.println("MON"); break; } case 1: { System.out.println("TUE"); break; } case 2: { System.out.println("WED"); break; } case 3: { System.out.println("THU"); break; } case 4: { System.out.println("FRI"); break; } case 5: { System.out.println("SAT"); break; } case 6: { System.out.println("SUN"); break; } }; } public static void init() { year.add(new Day(1,1,0)); index.put(year.get(0), 0); for(int mm = 1; mm <= 12; mm++){ int days = daysOfMonth(mm); for(int dd = 1; dd <= days; dd++){ if(mm == 1 && dd == 1) continue; int prev_yoil = year.get(year.size()-1).yoil; Day now = new Day(mm,dd, prev_yoil == 6? 0: prev_yoil+1); year.add(now); index.put(now, year.size()-1); } } } public static int daysOfMonth(int mm){ switch(mm){ case 4: case 6: case 9: case 11: return 30; case 2: return 28; default: return 31; } } }

4. 트러블 슈팅 or 배운 점📝

수학적 방법을 계산해보면, 굳이 이렇게 어렵게 풀 필요가 없었다.
모든 일 수를 더한 뒤에 7로 나눈다. 그 나머지가 바로 월요일로부터 떨어진 일수이다. (0 = 월요일, 3 = 목요일 ...)
이것을 출력하면 된다.