반응형
2016년
문제
문제 설명
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일같은 날짜는 주어지지 않습니다)
문제 풀이
윤년이란건 우리가 쓰고 있는 태양년의 오차를 맞추어 주기 위하여 4년에 한번 하루를 더해주는 년도를 말한다. 28일까지 있던 2월에 하루가 더해지게 된다. 나는 주어진 a월 b일이면 총 몇일인지 구한 다음 7로 나눈 나머지를 가지고 무슨 요일인지 판별하였다.
이때 switch 문을 사용하였는데 break를 쓰지 않으면 중간에 switch문을 빠져나가지 않는 것을 이용하여 for문을 사용하지 않았다. 다른 사람들의 풀이를 보았는데 for문을 사용하고 각 월의 일 수 가 담긴 배열을 사용하면 좀 더 짧게 구현할 수 있지만 구하는 방법 자체는 같다. 표현하는 방식이 다를 뿐이고 간단한 문제라 큰 상관 없어보인다.
C++ 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <string> #include <vector> using namespace std; vector<string> week = { "THU", "FRI", "SAT","SUN", "MON", "TUE", "WED"}; string solution(int a, int b) { string answer = ""; int day = b; switch(a-1){ case 12: day += 31; case 11: day += 30; case 10: day += 31; case 9: day += 30; case 8: day += 31; case 7: day += 31; case 6: day += 30; case 5: day += 31; case 4: day += 30; case 3: day += 31; case 2: day += 29; case 1: day += 31; default : break; } answer = week[day%7]; return answer; } | cs |
반응형
'군대에서 한것 > 프로그래머스' 카테고리의 다른 글
<프로그래머스> Level1 모의고사 (0) | 2019.01.10 |
---|---|
<프로그래머스> Level1 두 정수 사이의 합 (0) | 2019.01.09 |
<프로그래머스> Level1 K번째수 (0) | 2019.01.05 |
<프로그래머스> Level1 같은 숫자는 싫어 (0) | 2019.01.05 |
<프로그래머스> Level1 시저 암호 (0) | 2019.01.05 |