본문 바로가기
백준

백준 1476번 : 날짜 계산

by Huiyeong 2021. 3. 6.

 문제

www.acmicpc.net/problem/1476

 

1476번: 날짜 계산

준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타

www.acmicpc.net

1476 날짜 계산

 

 구현 방법

 이 문제.. 어려운 문제는 아니지만 머리가 꽤나 복잡했습니다..

처음 생각했던 풀이가 복잡했기 때문이겠죠..? 처음에는 범위가 가장 큰 S를 기준으로 잡고 현재 년도는 S년부터 시작하였습니다.

S년,, 했다 안되면 현재년도는 S*2 -> S*3 이런식으로 풀어나갔습니다.

E와 M값은 직접 수식을 만들어줬습니다.. 각자의 범위를 벗어나면 1부터 다시 시작기 때문에 현재의 값 + 현재 추정하는 년도를 범위로 나누고 범위로 곱해주었습니다. 

E+15*(year/15) == year랑 같을 때 M+19*(year/19)==year랑 같으면 끝! 이라고 생각하였고 예제와 게시판에 반례들까지 전부 맞았지만 30%대에서 계속 틀렸다고 나왔습니다. 

사실 아직도 어디가 잘못되었는지는.. 모르겠습니다.

내가 너무 복잡하게 푸는걸까..? 생각이 들어 아예 갈아엎고 훨씬 더 쉬운 방법으로 구현하였습니다.

 

S를 기준으로 잡지 않고 E, S, M을 동시에 계산을 해주었습니다.

E = 1, S = 1, M = 1일 때부터 계속 값을 더해주었습니다. 계속 더해주다가 각자의 범위를 만나게 되면 다시 1로 돌려주었습니다.

그러다 E==S==M 이 되면 break를 걸어주고 계속 더해주는 year 값을 출력해주었습니다.

 

 구현 코드

package BOJ.Silver.구현;

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

public class B1476_날짜계산 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int E = Integer.parseInt(st.nextToken());
		int S = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		long year = 0;
		int e = 0, s = 0, m = 0;
		while(true) {
			e++; s++; m++;
			year++;
			if (e==E && s==S && m==M) break;
			if (e==15) e=0;
			if (s==28) s=0;
			if (m==19) m =0;
		}
		
		System.out.println(year);
	}
}

 

정답!

'백준' 카테고리의 다른 글

백준 2589번 : 보물섬  (0) 2021.03.07
백준 1205번 : 등수 구하기  (0) 2021.03.07
백준 1475번 : 방 번호  (0) 2021.03.06
백준 1292번 : 쉽게 푸는 문제  (0) 2021.03.06
백준 14503번 : 로봇 청소기  (0) 2021.03.06