https://programmers.co.kr/learn/challenges
프로그래밍 강의 | 프로그래머스
기초부터 차근차근, 직접 코드를 작성해 보세요.
programmers.co.kr
문제 설명입니다.
" 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를 반환하세요 "
단순히 월/일이 주어졌을 때 그 날의 요일을 반환하는 문제입니다.
문제 해결 방법은 간단합니다.
0 -> 목
1 -> 금
2 -> 토
3 -> 일
4 -> 월
5 - > 화
6 -> 수
다음과 같은 index와 값을 가지는 weeks[7]배열을 가집니다. 이 배열은 나중에 몇일에 해당하는 요일을 구하기위해 사용합니다.
예를 들어, weeks[5], 1월 5일은 화요일입니다. 그러면 25일의 경우 배열의 크기에서 벗어나게 됩니다. 그렇기 때문에 weeks[일 % 7]을 해줍니다. 나머지 연산자를 사용하여 배열의 크기를 벗어났을 때, 다시 배열 처음부터 시작(?)할 수 있게 해줍니다.
그리고 각각의 달이 몇일까지 존재하는지를 저장하는 배열을 만들어 줍니다(1월은 제외)
왜냐하면 2월 17일의 경우, 1월 1일부터 몇일이나 지났는지 검사하기 위함입니다.
int months[12] = {0,31,29,31,30,31,30,31,31,30,31,30};
0월은 없기 때문에 month[0]=0이고 , month[1]은 1월이 31까지 있다는 의미 입니다.13월은 존재하지 않기 때문에 month[12]는 없습니다.
index와 월을 맞추기 위해 이런 식으로 하였습니다.
그럼 다음, 현재 달-1까지 반복하면서 지나온 일을 계산합니다.
그렇게 되면 위의 달력에서 2,3,4,5...달력을 계속 아래로 추가한 그림을 그릴 수 있고, 각각의 일은 달을 지날 때 마다 다시 1로 초기화 되는게 아니라 계속 1씩 더해지는 모양이 되겠죠. 1월 31일 -> 32,33,34,35,36......
그런 다음 현재 일수가 구해지면, weeks[ 일수 % 7 ]으로 값을 구할 수 있습니다.
'알고리즘 문제' 카테고리의 다른 글
[알고리즘 문제] 프로그래머스 - 기능개발 (0) | 2019.12.12 |
---|---|
[알고리즘 문제] 프로그래머스 - 같은 숫자는 싫어 (0) | 2019.12.08 |
카카오 코딩테스트 - 문자열 압축 (0) | 2019.12.03 |
[알고리즘 문제] 백준9095 - 1,2,3 더하기 (0) | 2019.12.02 |
[알고리즘 문제] 백준1316 - 그룹 단어 체커 (0) | 2019.11.28 |