문제
1년을 기준으로 매월 K일이 주어졌을 때 해당 일이 평일인지(월~금) 또는 주말인지(토, 일) 구하는 알고리즘을 작성하시오.
입력: day, k
- day: 매년 1월 1일의 날짜. 월요일부터 일요일까지를 나타내는 int형 값.
- 월: 0, 화: 1, 수: 2, … 토: 5, 일: 6
- k: 날짜(1~28 사이의 자연수)
윤년은 계산하지 않고 일반적으로 월은 1월부터 12월까지 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31일로 가정한다.
예를 들어 1월 1일이 월요일이라 가정하고 매 달 1일의 날짜를 구하려고 하면
입력은 day = 0, k = 1이다.
결과는 1월 1일이 월요일, 즉 평일이므로 0, 2월 1일은 목요일이므로 평일 0, .. 이와 같은 방식으로 반환되는 결과는 {0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1}이다.
풀이
#include <iostream>
#include <vector>
using namespace std;
vector<int> solution(int day, int k)
{
vector<int> answer;
int month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int sum = 0;
for (int i = 0; i < 12; i++)
{
for (int j = 1; j <= month[i]; j++)
{
++sum;
if (j == k)
{
if (sum % 7 == (7 - day) % 7)
answer.push_back(1);
else if (sum % 7 == (6 - day) % 7)
answer.push_back(1);
else
answer.push_back(0);
}
}
}
return answer;
}
int main()
{
int day = 6;
int k = 1;
vector<int> answer = solution(day, k);
for (int i = 0; i < answer.size(); i++)
cout << answer[i] << " ";
cout << endl;
}
출처
프로그래머스
'Algorithm' 카테고리의 다른 글
땅따먹기 게임 (0) | 2018.12.27 |
---|---|
공항 건설하기 (0) | 2018.12.27 |
알파벳 카드로 단어 만들기 (0) | 2018.12.27 |
방 예약자 출력하기 (0) | 2018.12.27 |
최대 곱의 집합 (0) | 2018.12.27 |