문제
1476번: 날짜 계산
준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타
www.acmicpc.net
구현 방법
이 문제.. 어려운 문제는 아니지만 머리가 꽤나 복잡했습니다..
처음 생각했던 풀이가 복잡했기 때문이겠죠..? 처음에는 범위가 가장 큰 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 |