newmin
개발 이것저것
newmin
전체 방문자
오늘
어제
  • 전체 보기
    • Language
      • C
      • Java
    • Algorithm
      • Problem Solving
    • Dev
      • 개발일기장
      • Android
      • Spring
      • 회고록
    • Github
    • IDE
      • eclipse
      • visual studio 2019
    • 대외활동
      • 사피엔스4.0 대학생 서포터즈
      • 코드클럽 SW교육기부단
      • 한국대학생IT경영학회 KUSITMS

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • SW교육기부단
  • 자바
  • 이클립스
  • 깃허브
  • 코린이
  • c언어
  • KB디지털멘토링
  • 사피엔스4.0 서포터즈
  • 안드로이드
  • 백준C언어
  • 코드클럽
  • 사피엔스4.0
  • 이클립스에러
  • 프로그래밍
  • 큐시즘
  • C언어기초
  • 개발자
  • 백준
  • 중현초등학교
  • BOJ
  • 대학생 대외활동
  • 코딩
  • code club
  • SW교육기부
  • 코드클럽 SW교육기부단
  • eclipse
  • 대학생 교육기부
  • 알고리즘
  • 대학생 서포터즈
  • C언어알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
newmin

개발 이것저것

[BOJ/JAVA] 1924번 : 2007년
Algorithm/Problem Solving

[BOJ/JAVA] 1924번 : 2007년

2022. 1. 18. 19: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

 

Calendar 클래스 사용하기

이 문제를 보자마자 필자는 Calendar 클래스를 떠올렸다. 이전 학기에 프로젝트를 진행하며 스케줄러에 잔뜩 치인 탓이었을까..? 그래서 정말 단순 무식하게 Calendar 클래스로 문제를 해결했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.StringTokenizer;

public class BOJ_2739 {
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
        String[] dayOfWeek = new String[] {"SUN", "MON", "TUE", "WED", " THU", "FRI", "SAT"};
        
		int mon = Integer.parseInt(st.nextToken());
		int day = Integer.parseInt(st.nextToken());
		
		Calendar c = Calendar.getInstance();

		c.set(2007, mon - 1, day);

		System.out.println(dayOfWeek[c.get(Calendar.DAY_OF_WEEK) + 1]);
	}
}

사고력 사용하기

풀긴 풀었지만 어쩐지 마음 한구석 양심이 찔리고, 이렇게 푸는게 아님을 당연히 느끼고 있었다.

그래서 다시 한 번 문제를 들여다보았다.

굳이 이런 힌트를 주는 이유는 무엇일까?

바로 사용하라는 거다.

 

일단 시작일인 1월 1일이 월요일 임을 알고 있고, 그 뒤에 월별로 몇 일까지 있는지를 알고 있으므로 우리는 1월 1일을 기준으로 몇 일이 지났는지를 알 수 있다.

 

만약, 3월 3일을 입력받았다면

1월 1일로부터 31 + 28 + 3 = 62일이 지났다는 뜻이다.

 

이제 계산한 이 day(=62)를 7로 나누어주면 요일을 알 수 있다.

62 % 7 = 6 이므로 토요일임을 알 수 있다!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BOJ_2739 {
	public static void main(String[] args) throws IOException{
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int mon = Integer.parseInt(st.nextToken());
		int day = Integer.parseInt(st.nextToken());
		
		int[] dayOfMonth = new int[] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		String[] dayOfWeek = new String[] {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
		
		int sumOfDay = 0;
		for(int i = 0; i < mon - 1; i++) {
			sumOfDay += dayOfMonth[i];
		}
		sumOfDay += day;
		
		System.out.println(dayOfWeek[sumOfDay % 7]);
	}
}

 

 

'Algorithm > Problem Solving' 카테고리의 다른 글

[Programmers/Java] 완전탐색 level2 : 소수 찾기  (0) 2022.02.15
[Programmers/Java] 완전탐색 level1 : 모의고사  (0) 2022.02.11
[BOJ/C] 3045 이중 연결 리스트  (0) 2021.08.03
[BOJ/C] 10828 스택  (0) 2021.07.21
[BOJ/C] 4949 균형잡힌 세상  (0) 2021.07.21
    'Algorithm/Problem Solving' 카테고리의 다른 글
    • [Programmers/Java] 완전탐색 level2 : 소수 찾기
    • [Programmers/Java] 완전탐색 level1 : 모의고사
    • [BOJ/C] 3045 이중 연결 리스트
    • [BOJ/C] 10828 스택
    newmin
    newmin
    매일 작심삼일로 작심일년

    티스토리툴바