[#14][알고리즘] 2016년, 요일 구하는 알고리즘
프로그래머스(Programmers) > 2016년, 요일 구하기
문제 링크(https://programmers.co.kr/learn/challenge_codes/175)C++ 풀이
| 
#include<iostream> 
#include<string> 
#include<vector> 
using namespace std; 
string getDayName(int a,int b) 
{ 
  string answer= ""; 
  vector<string> dayname = {"FRI","SAT","SUN","MON","TUE","WED","THU"}; 
  int monthdays[12] = {31,60,91,121,152,182,213,244,274,305,335,365}; 
  int temp; 
  if (a == 1){ 
    answer = dayname.at((b-1)%7); 
  } else{ 
    temp = monthdays[a-2] + b-1; 
    answer = dayname.at(temp%7); 
  } 
  return answer; 
} 
int main() 
{ 
    int a=5,b=24; 
    //아래는 테스트 출력을 위한 코드입니다. 
    cout<<getDayName(a,b); 
} | cs | 
1월 1일이 금요일 -> dayname 배열을 금요일부터 시작
---------------------------------------------------------------------------
5월 24일의 요일 구하기 ( a=5, b=24)
monthdays[a-2] = monthdays[3] : 4월까지의 날짜 합(121)
+ b - 1 (배열의 index가 0부터 시작함)
= 121 + 24 - 1 = 144
144%7 = 4 = dayname.at(4) = "TUE"
=> 5월 24일은 화요일
---------------------------------------------------------------------------
또 다른 예
2월 25일의 요일 구하기 ( a=2, b=25)
monthdays[a-2] = monthdays[0] : 1월까지의 날짜 합(31)
+ b - 1
= 31 + 25 - 1 = 55
55%7 = 6 = dayname.at(6) = "THU"
=> 2월 25일은 목요일
또 다른 풀이
| 
#include<iostream> 
#include<string> 
using namespace std; 
string getDayName(int a,int b) 
{ 
    string days[7] = {"FRI","SAT","SUN","MON","TUE","WED","THU"}; 
    int months[13] = {31,29,31,30,31,30,31,31,30,31,30,31}; 
    int cnt = 0; 
    for(int i =0; i < a-1;i++){ 
        cnt+= months[i]; 
    } 
    cnt+=b-1; 
    return days[cnt%7]; 
} 
int main() 
{ 
    int a=5,b=24; 
    //아래는 테스트 출력을 위한 코드입니다. 
    cout<< getDayName(a,b); 
} | cs | 

댓글
댓글 쓰기