문제 1) 1 ~ 365 사이의 수(일)를 읽어서 월과 일로 변환한 다음 출력하는 프로그램을 작성하시오. (윤년 무시)
ex) 입력: 40 -> 출력: February 9
import java.util.Scanner;
public class Whatday {
public static void main(String[] args) {
System.out.print("Enter a digit 1 between 365: ");
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
int dayNum = Integer.parseInt(line);
int monthNum = 0;
int[] daysInMonths = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String[] monthNames = {"January", "Feburary", "March", "April", "May", "June", "July", "August", "Sepetember", "October", "November", "December"};
for (int i : daysInMonths) {
if (dayNum <= i) {
break;
}
else {
dayNum = dayNum - i;
monthNum++;
}
}
System.out.printf("%s %d", monthNames[monthNum], dayNum);
scanner.close();
}
}
실행 결과
Enter a digit 1 between 365: 28
January 28
Enter a digit 1 between 365: 120
April 30
문제 2) 위 코드에서 1 ~ 365 이외의 입력을 받으면 예외 처리하는 코드를 작성하시오.
import java.util.Scanner;
public class Whatday {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
System.out.print("Enter a digit between 1 and 365: ");
String line = scanner.nextLine();
int dayNum = Integer.parseInt(line);
if (dayNum < 1 || dayNum > 365) {
throw new IllegalArgumentException("Out of Range of Valid Dates");
}
int monthNum = 0;
int[] daysInMonths = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
for (int i : daysInMonths) {
if (dayNum <= i) {
break;
} else {
dayNum = dayNum - i;
monthNum++;
}
}
System.out.printf("%s %d", monthNames[monthNum], dayNum);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
실행 결과
Enter a digit 1 between 365: 0
java.lang.IllegalArgumentException: Out of Range of Valid Dates
at Whatday.main(Whatday.java:11)
문제3) 위 코드에서 윤년을 판별하는 코드 추가 (기존 코드에 연도를 입력받는 코드 추가)
import java.util.Scanner;
public class Whatday {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
// year 입력받고, 윤년 확인
System.out.print("Enter a year number: ");
String line = scanner.nextLine();
int yearNum = Integer.parseInt(line);
boolean isLeapYear = (yearNum % 4 == 0) && (yearNum % 100 != 0 || yearNum % 400 == 0);
int maxDayNum = isLeapYear ? 366 : 365;
if (isLeapYear) {
System.out.println("It's a Leap Year");
} else {
System.out.println("It's a Common Year");
}
// day 입력받고, 1 ~ maxDayNum 의 값인지 확인
System.out.print("Enter a digit between 1 and " + maxDayNum + ": ");
line = scanner.nextLine();
int dayNum = Integer.parseInt(line);
if (dayNum < 1 || dayNum > maxDayNum) {
throw new IllegalArgumentException("Out of Range of Valid Dates");
}
int monthNum = 0;
int[] daysInMonths = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // common year month
int[] daysInLeapMonths = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // leap year month
String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
if (isLeapYear) {
for (int i : daysInLeapMonths) {
if (dayNum <= i) {
break;
} else {
dayNum -= i;
monthNum++;
}
}
} else {
for (int i : daysInMonths) {
if (dayNum <= i) {
break;
} else {
dayNum -= i;
monthNum++;
}
}
}
System.out.printf("%s %d", monthNames[monthNum], dayNum);
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
실행 결과
Enter a year number: 2024
It's a Leap Year
Enter a digit 1 between 366: 366
December 31
Enter a year number: 2000
It's a Leap Year
Enter a digit 1 between 366: 359
December 24
출처: https://github.com/gikpreet/class-programming_with_java
GitHub - gikpreet/class-programming_with_java
Contribute to gikpreet/class-programming_with_java development by creating an account on GitHub.
github.com
'코딩 문제' 카테고리의 다른 글
[코딩 문제] 문자열 반전 (0) | 2024.08.30 |
---|---|
[코딩 문제] Palindrom (0) | 2024.08.23 |
[코딩 문제] 미로 탐색 (0) | 2024.08.23 |
[코딩 문제] TicTacToe 게임 (0) | 2024.08.23 |
[코딩 문제] Anagram (0) | 2024.08.23 |