https://programmers.co.kr/learn/courses/30/lessons/12901
코딩테스트 연습 - 2016년
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까
programmers.co.kr
구현 방법
주어진 년도의 a월 b일인지 무슨 요일인지 알기 위해 저는 첼러의 합동식을 사용했습니다.
챌러의 합동식을 이용한 풀이는 메모리 초과로 답안이 통과되지 못했습니다.
그래도 좋은 공식같아 링크 첨부해 놓겠습니다.
https://terms.naver.com/entry.nhn?docId=3534029&cid=60209&categoryId=60209
요일을 구하는 첼러의 합동식
독일의 수학자 크리스티안 첼러(Christian Zeller, 1822~1899)는 요일을 구하는 보다 간편한 식을 만들었는데, 이를 첼러의 합동식(Zeller’s congruence)이라고 한다. 첼러의 합동식에서 구한 값 H는 요일을
terms.naver.com
2016년 1월 1일이 금요일이라고 주어졌으니, 입력한 a월 b일이 무슨 요일인지 알기 위해 1월 1일부터 a월 b일까지 총며칠이 있는지 계산해 주었습니다.
계산한 총 일수를 7로 나누어 떨어지면 금요일, 1이 남으면 토요일, 2가 남으면 일요일, 이렇게 진행되겠죠?
해당 알고리즘을 구현한 코드는 아래와 같습니다.
소스코드
#include <bits/stdc++.h>
using namespace std;
string solution(int a, int b) {
string answer = "";
string days[7] = {"FRI","SAT","SUN","MON","TUE","WED","THU"};
//1월~12월 일수
int months[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
int totdays=0;
for(int i=0;i<a-1;i++) {
totdays += months[i];
}
//월들의 일수 합 구하고, b일 더해주기
totdays = totdays+b-1;
//총 일수 합을 7로 나누어 나머지만큼 배열의 값 정답에 넣어줌
answer=days[totdays%7];
return answer;
}
'코딩테스트 > 프로그래머스(lv1)' 카테고리의 다른 글
[프로그래머스 Level 1] K 번째 수 (C++) (0) | 2021.01.24 |
---|---|
[프로그래머스 Level 1] 모의고사 (C++) (0) | 2021.01.24 |
[프로그래머스 Level 1] 완주하지 못한 선수 (C++) (0) | 2021.01.24 |
[프로그래머스 Level 1] 두개 뽑아서 더하기 (C++) (0) | 2021.01.24 |
[프로그래머스 Level 1] 크레인 인형뽑기 게임 (C++) (0) | 2021.01.24 |
댓글