[백준] 1476 - 날짜 계산 ( JAVA)

개츠비·2023년 3월 6일
0

백준

목록 보기
8/84

정보

  1. 소요시간 : 10분
  2. 문제 사이트 : 백준
  3. 문제 수준 : 실버 5
  4. 문제 유형 : 브루트포스 알고리즘, 정수론, 수학
  5. 다른 사람의 풀이를 참고 했는가 ? : X
  6. 한 번 풀었다가 다시 푸는 문제인가 ? : X
  7. 문제 링크 : https://www.acmicpc.net/problem/1476
  8. 푼 날짜 : 2023.03.06

1. 사용한 자료구조 & 알고리즘

브루트포스 알고리즘. 모든 경우의 수를 탐색했다.

2. 풀이과정

E 가 15이하, S가 28이하, 달이 19 이하인데, 나머지 연산을 각각 1을 더해줘서 해줬다.
즉 나머지연산을 16에서, 29에서, 20에서 해주어야 한다.

그리고 여기서 연도에 0이 없으므로 만약 나머지연산한 결과가 0이라면 1로 만들어주는 작업이 추가로 필요하다.

3. 소스코드

import java.util.*;
import java.io.*;
public class Main{
	static boolean visited[];
	static int arr[];
	static int cnt=0;
	public static void main(String[] args) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb=new StringBuilder();
		StringTokenizer st;

		
		int nowE=1;
		int nowS=1;
		int nowM=1;
		st=new StringTokenizer(br.readLine());
		int E=Integer.parseInt(st.nextToken());
		int S=Integer.parseInt(st.nextToken());
		int M=Integer.parseInt(st.nextToken());
		int cnt=1;
		
		while(!(E==nowE&&S==nowS&&M==nowM)) {
			cnt++;
			nowE++;
			nowS++;
			nowM++;
			nowE%=16;
			nowS%=29;
			nowM%=20;
			if(nowE==0) nowE=1;
			if(nowS==0) nowS=1;
			if(nowM==0) nowM=1;
		}
		
		System.out.println(cnt);

	}
}

4. 결과

5. 회고

문제를 푼 후 다른사람의 풀이를 봤는데 나는 6줄로 처리한 것을 3줄로도 처리할 수 있었다. 나는 나머지 연산을 하고, 그 후에 if 문을 썼는데,
다른 사람은 if(nowE==17) nowE=1 과 같이 단 1개의 조건문으로 내 코드에서 2가지 역할을 한 번에 수행할 수 있었다.
시간복잡도 상으로 크게 차이는 안나나 불필요한 작업을 줄이는 것이 필요해보인다.

하루에 백준 1문제 이상 푸는 것을 목표로 하고 있다.
https://solved.ac/profile/anwlro0212

profile
아이스 카라멜 마끼아또보단 뜨거운 아메리카노를, 맨투맨보단 니트를, 웹툰보단 책을 좋아하고 싶은 사람

0개의 댓글