-
chapter2) 그 해의 경과 일 수 구하기PS/etc 2020. 7. 9. 20:54
// 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