연도는 2007년으로 가정했을 때, 날짜(MM-DD)를 입력 시 요일을 반환하는 함수 function day 구현하기
조건
- 매개변수 : Month, Date 정보가 String 형태로 전달
- 출력 값 형태 : SUN, MON, TUE, WED, THU, FRI, SAT
- 2007년 1월 1일은 월요일
입출력 예시
- day("1 1") // "MON"
- day("3 17") // "SAT"
코드 작성 방법 1
- split 메소드로 매개변수를 month과 date로 나누기
- new Date(날짜) 메소드로 해당 날짜와 요일 정보 얻기
- getDay 메소드로 해당 날짜에서 요일 배열의 인덱스를 얻기
- getDay 메소드의 요일 배열은 일요일을 0번 인덱스, 토요일을 6번 인덱스로 전제함
function day(str) {
const month = str.split(' ')[0]
const day = str.split(' ')[1]
// getDay 메소드가 반환하는 인덱스에 맞추어 일~토 순서로 요일 입력
const week = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
// new Date와 getDay 메소드 사용
return week[new Date(`2007-${month}-${day}`).getDay()]
}
코드 작성 방법 2
- 1월 1일에서 입력된 날짜까지 지나간 일수를 구하여 (how many days), 7로 나눈 뒤 요일 구하기
- 월(month)별 일수를 배열에 담기
- 요일을 배열에 담기 (1월 1일 월요일 → 1번 인덱스 요소는 월요일)
function day(str) {
const month = Number(str.split(' ')[0])
let day = Number(str.split(' ')[1])
const week = ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT']
// 월별 일수를 배열에 담기 (1월은 31일까지 있고, 이를 1번 인덱스에 요소로 넣기)
const months = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
// month를 일수로 환산하여 day에 더해주기 (1월 1일 이후 지난 일수 더해주기)
for (let i=0; i<month; i++) {
day += months[i]
}
// 일수를 7로 나누어 나머지를 구한 뒤 해당 요일 반환하기
return week[day%7]
}
반응형
'프로그래밍 > 알고리즘, 프로그래밍 언어' 카테고리의 다른 글
[JavaScript] arguments object (객체) (0) | 2021.12.08 |
---|---|
[JavaScript] 배열에서 중복 엘리먼트 제거하기 (0) | 2021.12.04 |
비동기 데이터 처리 순서 : 콜백함수 vs Promise (0) | 2021.11.11 |
async을 사용했지만 콜백함수의 await에서 에러가 나는 경우 (0) | 2021.11.10 |
[알고리즘] BFS/DFS (JavaScript) (0) | 2021.09.30 |
댓글