문제 설명
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT
입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
제한 조건
2016년은 윤년입니다.
2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)
입출력 예
a b result
5 24 "TUE"
문제 생각
import java.util.Calendar를 통해 날짜를 계산하는 방법을 사용하기
답변 코드
import java.util.Calendar
class Solution {
fun solution(a: Int, b: Int): String {
var answer = ""
val c = Calendar.getInstance()
c.add(Calendar.YEAR, -7)
c.add(Calendar.MONTH, a - 2)
c.add(Calendar.DATE, b-14)
val nw : Int = c.get(Calendar.DAY_OF_WEEK)
if (nw == 1) {
answer = "SUN"
} else if (nw == 2) {
answer = "MON"
} else if (nw == 3) {
answer = "TUE"
} else if (nw == 4) {
answer = "WED"
} else if (nw == 5) {
answer = "THU"
} else if (nw == 6) {
answer = "FRI"
} else if (nw == 7) {
answer = "SAT"
}
return answer
}
}
현재 날짜(2023-02-14)를 기준으로 c를 구성하였습니다.
DAYOFWEEK을 통해 c날짜의 요일을 구하도록 하였습니다.
다른 사람들의 풀이
class Solution {
fun solution(a: Int, b: Int): String {
val dayOfWeek = listOf("THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED")
val year2016 = listOf(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
val totalDay = (0 until a - 1).map { year2016[it] }.sum() + b
return dayOfWeek[totalDay % 7]
}
}
2016-01-01은 금요일, 모든 월의 날짜를 구해서 그에 맞게 dayOfWeek과 날짜들을 구성하였고,
dayOfWeek은 배열은 일주일을 기준으로 2016-01-01이 금요일이니 맨 처음의 기준이 금요일이 되는데 1일이 금, 2일이 토, 3일이 일, 4일이 월,,, 순 인데 만약 금요일이 index 0에 위치할 경우 달력 규칙상 1일(금) + 7일(금) = 8일(금)이 되어야하는데 0일로 규칙이 깨지게 되므로 index 1에 위치 시켰습니다. 그 후 1월 1일을 기준으로 a월 b일은 1월 1일 ~ a월 b일까지의 총 일수에 % 7을 하면 그 날짜가 나오도록 하였습니다.
제 코드보다 굉장히 효율적이네요.. 더 열심히 공부하겠습니다