Nellie's Blog

[항해99 10기] 알고리즘 모의고사 - 신대륙 발견 본문

회고록/항해99

[항해99 10기] 알고리즘 모의고사 - 신대륙 발견

Nellie Kim 2022. 11. 22. 15:12
728x90

1번. 신대륙 발견

기원이는 오늘 항해99를 시작했다. 성격이 급한 기원이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다.

항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자.

제한 조건

  • 1 ≤ month ≤ 12
  • 1 ≤ day ≤ 31 (2월은 28일로 고정합니다, 즉 윤일은 고려하지 않습니다.)
  • 아래 답안 포맷을 참고하여 답안을 작성해주시기 바랍니다
public class Main {
    public String solution(int month, int day) {
        String answer = "";
        return answer;
    }

    public static void main(String[] args) {
        Main method = new Main();
        System.out.println(method.solution(1, 18));
    }
}

 

 

 

내 답변

	public class Main {
	    public String solution(int month, int day) {
	        String answer = "";
	        
	        int monthTotalDay = 0;
	        
	        int[] mon = {31,29,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30};
	        
	        // 월 일수 구하기
	        for(int i = 0; i < month - 1; i++) {
	        	monthTotalDay += mon[i];
	        }
	        
	        // 일 수 구하기
	        monthTotalDay += day;
	        
	        // 98일 더하기 
	        int finalTotalDay = monthTotalDay + 98;  
	       
	        int realMonth = 0;
	        // 월로 계속 나누기. 대강 98일이니까 4로 잡기
	        for(int i = 0; i < month + 4; i++) {
	        	realMonth = finalTotalDay / mon[i];   // 3
	        	break;
	        }
	        // 1~4월달의 합 날짜 계산하기
	        int monthDaySum = 0; 
	        
	        for(int i = 0; i < realMonth; i++) {
	        	monthDaySum += mon[i];
	        }
	        
	        //최종 일수합을 최총 월수합으로 나누어 일수 계산하기
	        int realRestDay = finalTotalDay % monthDaySum;
	        
	        answer = realMonth + 1 + "월" + realRestDay + "일";
	        
	        return answer;
	    }
	
	    public static void main(String[] args) {
	        Main method = new Main();
	        System.out.println(method.solution(1, 18));
	    }
	}

https://www.youtube.com/watch?v=RUZ34bNB1AA 

 

다른 답변

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class Main {
	    public static String solution(int month, int day) {
	    	
	    	Calendar cal = Calendar.getInstance(); // cal객체생성
	    	cal.set(2022, month-1, day); // 매개변수로 받은 월, 일을 cal에 저장
            	cal.add(Calendar.DAY_OF_MONTH, 98); // cal에 98 더하여 저장
	    	
	    	DateFormat df = new SimpleDateFormat("M월 d일"); //DateFormat객체생성 및 날짜형식설정
	    	
	    	String answer = df.format(cal.getTime()); // DateFormat에 cal시간저장하고 answer에넣기
	    	
	    	return answer;
	    }
	
	    public static void main(String[] args) {
	    	Main method = new Main();
	    	System.out.println(method.solution(1, 18));
	    }
}
// 4월 26일 출력

 

 

 

2시간동안 푸는 거였는데,, 

시간이 없어서 일단 이렇게 풀긴 했는데, 계산 결과가 미세하게 자꾸 틀린다..ㅠㅠㅎ

진짜 어렵긴하당,,,,ㅎ ㅠㅠㅠ