본문 바로가기
백준

[백준] code.plus(브루트포스,JAVA)1476번, 날짜 계산

by 열정적인 이찬형 2022. 3. 2.

문제 링크

 

1476번: 날짜 계산

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

www.acmicpc.net


주의사항

  • JAVA를 사용하여 프로그램을 사용하였습니다.
  • 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{ 	
	public static void main(String[] args){
    }
}

문제 설명


접근 방법

브루트 포스란.

모든 경우의 수를 대입시켜서 가장 알맞은 경우의 수를 결과로 출력하는 것입니다.

 

이 문제는 E,S,M이 최대값이 되면 1로 초기화하며 입력값과 같아질 때까지 반복하는 것으로 문제를 해결하였습니다.

 

E, S, M이 각각이 최대값이 되었을 때 1로 변화는 것이 이 문제에 핵심으로 볼 수 있습니다.

 

문제에 해결알고리즘은

1. 입력값 연도와 현재 연도를 비교합니다.

2. 다를 경우 E, S, M을 모두 +1을 해줍니다.

3. E, S, M이 최대값이 되었을 경우 +1이 아닌 1로 초기화해줍니다.

4. 이 과정을 반복하여 입력값과 동일한 E, S, M이 되었을 때 결과를 출력해줍니다.

  • BufferedReader를 사용하여 입력 값을 저장하였습니다.
  • StringToknizer을 이용하여 E, S, M을 띄어쓰기 기준 나누어서 저장하였습니다.
  • 연도 계산하는 yearCal함수를 만들었습니다.
  • BufferedWriter에 입력값에 해당하는 연도의 값을 저장하였습니다.
  • BufferedWriter에 저장된 결과값을 출력하였습니다.
  • yearCal은 입력값과 동일하면 반환하고 다르면 E, S, M을 +1을 하며 최대값일 때에는 1로 초기화를 하였습니다.

 

결과 코드

import java.io.*;
import java.util.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //입력값 처리하는 BufferedReader
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        //결과값 출력하는 BufferedWriter
        //-------------입력값 저장-----------
        StringTokenizer st = new StringTokenizer(br.readLine());
        int E = Integer.parseInt(st.nextToken());
        int S = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        //-------함수 실행 및 결과 출력---------
        bw.write(yearCal(E,S,M) + "\n");
        bw.flush();
        bw.close();
        br.close();
    }
    //----------연도 변환 함수----------
    public static int yearCal(int E, int S, int M) {
    	//------연도 기본값 설정-----
    	int year = 1;
    	int e=1, s=1, m=1;
    	while(true) {
    		if(e==E && s==S && m==M)
    			break;
    		if(e==15)	//E가 최대값일 때
    			e=1;
    		else 
    			e++;
    		if(s==28)	//S가 최대값일 때
    			s=1;
    		else
    			s++;
    		if(m==19)	//M이 최대값일 때
    			m=1;
    		else
    			m++;
    		
    		year++;		//연도 더하기
    	}
    	return year;
    }

}

댓글