▶ BufferedReader, StringTokenizer을 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
입력 & 출력
나의 풀이
문제 자체는 어렵지 않지만 로직을 구성하는 과정이 쉽지 않았습니다.
입력이 주어질 때 해당 날짜에 대한 요일을 구하는 문제입니다.
먼저 빠른 입력을 위해 BufferedReader 클래스를 사용하여 입력을 받아주고, 입력된 날짜를 공백을 기준으로 분리할 수 있도록 StringTokenizer 클래스를 사용하여 분리를 해주었습니다.
2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다.
문제에서 나왔듯이 위 조건에 따라서 날짜와 요일을 배열로 초기화를 해줍니다.
24번째 줄에서 입력된 "월" 전 달까지의 총일수를 다 더해줍니다. 여기서 다 더해주는 이유는 "입력된 날짜가 몇 번째 날짜인지 구하기 위해서입니다."
즉 입력된 날짜를 1월 1일부터 시작해서 몇 번째 날짜인지 구하기 위해서입니다.
그리고 입력된 day를 마저 더해주고, 해당 날짜를 7로 나눠서 구해줍니다.
더불어 이때 24번째 줄과 30번째 줄에서 -1을 해주는 이유는 일반적으로 1월 1일은 첫 번째 날짜이지만, 배열의 인덱스는 0번째부터 시작하기 때문입니다.
totalDays에 -1을 하지않는다면 1 1이 입력됐을 때 결과는 "MON"이 나와야 하지만, totalDays는 1이 되어 결과는 "TUE"가 나옵니다.
전체적인 흐름을 다시 한번 설명하자면 다음과 같습니다.
입력 : 3 14
totalDays = 31 + 28 + 14 ➡73
totalDays-1 % 7 = 2 ➡ daysOfWeek [2] ▶ WED
String[] daysOfWeek = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
만약에 위 코드와 같이 dayofWeek 배열이 초기화 됐다면 마지막 출력문은 다음과 같이 되는 것입니다.
daysOfWeek[(totalDays) % 7]
즉 이 문제에서 주의해야 할 부분은 배열의 시작 인덱스인 0을 생각하여 배열을 만들거나 출력을 해줘야 합니다.
참고 ❗
'Coding Test > 백준' 카테고리의 다른 글
[백준] 바구니 뒤집기 (BufferedReader, StringTokenizer, 10811번, Java) (0) | 2024.05.30 |
---|---|
[백준] 피보나치 수 2 (BufferedReader, 동적 계획법 DP, 2748번, Java) (0) | 2024.05.29 |
[백준] 음계 (BufferedReader, StringTokenizer, 2920번, Java) (0) | 2024.05.25 |
[백준] 최대공약수와 최소공배수 (BufferedReader, StringTokenizer, 유클리드 호제법) (0) | 2024.05.25 |
[백준] ACM 호텔 (BufferedReader, StringTokenizer, StringBuilder, 10250번, Java) (0) | 2024.05.24 |