티스토리 뷰

// 그 해의 남은 일수 구하기
public class Q9 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int retry;

        System.out.println("그 해 남 일수를 구합니다");

        do {
            System.out.print("년 : ");
            int year = scanner.nextInt();
            System.out.print("월 : ");
            int month = scanner.nextInt();
            System.out.print("일 : ");
            int day = scanner.nextInt();

            System.out.printf("남은 일수는 %d일입니다.\n", remainDayOfYear(year, month, day));

            System.out.print("한 번 더 할까요? (1.예 / 0.아니요) : ");
            retry = scanner.nextInt();
        } while (retry == 1);
    }

    static int[][] mdays = {
            { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, // 평년 0
            { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, // 윤년 1 [1][11]
    };

    // 윤년 1 , 평년 0
    static int isLeap(int year) {
        return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) ? 1 : 0;
    }

    // days에서 지금까지의 날을 빼면 남은 일수
    static int remainDayOfYear(int y, int m, int d) {
        int days = ( isLeap(y) == 1 ? 366 : 365 ) - d;

        for (int i = 0; i < m-1; i++) {
            days -= mdays[isLeap(y)][i];
        }

        return days;
    }
}

(1)

	// 서기 y년 m월 d일의 연내의 남은 일 수를 구합니다.
	static int leftDayOfYear(int y, int m, int d) {
		int days = d; // 일수

		for (int i = 1; i < m; i++) // 1월~(m-1)월의 일 수를 더함
			days += mdays[isLeap(y)][i - 1];
		return 365 + isLeap(y) - days;
	}​

(2)

 

- 윤년일때와 평년일때를 구분한뒤에 남은 일 수 빼기

- 답안과 유사하게 풀이한듯

 

 

 

※참조
Do it! 자료구조와 함께 배우는 알고리즘 입문

'PS > etc' 카테고리의 다른 글

우테코 3기 코테 후기  (0) 2020.11.07
chapter3-Q3) 배열에서의 검색  (0) 2020.07.13
chapter2) 그 해의 경과 일 수 구하기  (0) 2020.07.09
chapter2) 소수 구하기  (0) 2020.07.09
chapter2) 10진수 변환  (0) 2020.07.08