본문 바로가기

카테고리 없음

프로그래머스 - 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일같은 날짜는 주어지지 않습니다)

 

입출력 예

a b result
5 24 "TUE"

 


 

 

주말에 푼 문제였는데 오늘 포스팅을 하게 되었습니다. 

level1 중에서도 이 문제는 굉장히 쉬운 문제였지만, 동적할당을 해야 한다는 제한조건이 있었습니다.

 

오랫만에 malloc을 사용해서 동적할당을 해보았는데, string에 익숙해져서 형식도 잊어버렸더라구요.. 구글링했습니다ㅠ

편하다고 너무 쓰면 기초를 잊게되는 낭패를 볼수 있다는걸 알게 되었죠. 

 

처음에 바보같이 "FRI"를 strWeek배열의 0번째에 넣어서 왜 안되지? 하고 다시 보니 1월1일이 금요일이었습니다.....( 1월0일은 목요일 ^_^ ) 

 

쉽지만 은근히 여러번 삽질해서 풀었던 문제입니다.

 

 

 

다른 답변을 보아도 거의 저와 많이 다르지 않더라구요!

사람들 생각하는것은 거의 비슷한 것 같아요.

그 비슷비슷함 속에서 약간의 차이가 좋은 코드를 만드는 것이겠죠?

저는 아주 노멀합니다!

 

답변 유도의 핵심은 "Month"는 고려하지않고 "Date"를 키워드로 문제를 푸는 것이었습니다.

더 좋은 답변이 있다면 알려주세요~! 

 

char* solution(int a, int b) 
{
	int month[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	const char* strWeek[] = { "THU", "FRI","SAT","SUN", "MON","TUE","WED"};
	int yearDate = b;
	for (int i = 1; i < a; ++i)
	{
		yearDate += month[i-1];
	}

	char* answer = (char*)malloc(strlen(strWeek[yearDate % 7]) * sizeof(char));
	strcpy(answer, strWeek[yearDate % 7]);
	return answer;
}