본문 바로가기

알고리즘/프로그래머스

프로그래머스 - 2016년(Level 1)/Wanna Be 컴잘알

728x90

문제 출처: https://programmers.co.kr/learn/courses/30/lessons/12901

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

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를 반환하세요.

제한 조건

  • 2016년은 윤년입니다.
  • 2016년 a월 b일은 실제로 있는 날입니다. (13월 26일이나 2월 45일같은 날짜는 주어지지 않습니다)

입출력 예

a b result
5 24 TUE

 

-설명-

 

1. 윤년은 4년마다 2월에 1일씩 더 많아 28일->29일이므로 각 달수의 일을 배열로 선언해준다.

2. 출력할 문자열을 담은 요일도 배열로 선언해준다. 1월1일이 금요일이므로 요일 선언의 순서는 금요일부터 선언한다.

3. 1월 1일 출력한다고 하면 달, 요일 모두 인덱스 0에 접근해야한다.

   따라서 반복문 중단 조건을 (a-1)로 해주고 day에는 day += (b-1)로 해준다.

4. 1월 1일부터 a월 b일까지 도달하는데 걸리는 일 수를 구한 뒤 7로 나머지 연산을 해준다.

5. day배열에 접근한다.

 

-코드-

#include <string>
#include <vector>

using namespace std;

string weeks[7] = { "FRI","SAT","SUN","MON","TUE","WED","THU"};
int month[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };

string solution(int a, int b) {
	string answer = "";
	int day = 0;
	for (int k = 0; k <(a-1); k++) {
		day += month[k];
	}
	day += (b-1);
	day %= 7;
	answer = weeks[day];

	return answer;
}
728x90