티스토리 뷰

 // for문 쓰지않고 while 문 사용하기
    static int dayOfYear(int y, int m, int d) {
        int days = d;
        int year = isLeap(y);
        int month = 0;

        while (month < m-1) {
            days += mdays[year][month];
            month++;
        }

        return days;
    }​

(1)

class DayOfYearWhile_02_08 {
	// 각 달의 일 수
	static int[][] mdays = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, // 평년
			{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, // 윤년
	};

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

	// 서기 y년 m월 d일의 연내의 경과일수를 구합니다.
	static int dayOfYear(int y, int m, int d) {
		while (--m != 0)
			d += mdays[isLeap(y)][m - 1];
		return (d);
	}

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		int retry; // 한 번더 ?

		System.out.println("연내의 경과 일 수를 구합니다.");

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

			System.out.printf("연내 %d일째입니다.\n", dayOfYear(year, month, day));

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

(2)

     while (m-1 != 0) {
            d += mdays[isLeap(y)][m - 1];
            m--;
        }

(3)

 

 

- 답안코드가 훨씬 깔끔함

- for문만 써서 그런지 while문 쓰는게 조금 어려움

- while문을 저렇게 써도 될거같은데 그래도 답안코드가 더 깔끔해보임

 

 

 

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

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

chapter3-Q3) 배열에서의 검색  (0) 2020.07.13
chapter2) 그 해의 남은 일 수 구하기  (0) 2020.07.09
chapter2) 소수 구하기  (0) 2020.07.09
chapter2) 10진수 변환  (0) 2020.07.08
chapter2) 배열 요소의 합계 구하기  (0) 2020.07.07