잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→

현록의 기록저장소

[Lv1] 2016년 본문

Problem Solving/programmers

[Lv1] 2016년

현록 2019. 4. 10. 20:39

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

제한 조건

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

입출력 예

a b result
5 24 "TUE"

 

현재 1월 1일 금요일이다.

2016년의 2월은 29일까지 있다.

 

public String solution(int a, int b) {
	String[] answerarr = new String[] {"SUN","MON","TUE","WED","THU","FRI","SAT"};
	int[] monthend = new int[] {31,29,31,30,31,30,31,31,30,31,30,31};
	int days = 0;
	for(int i=0;i<a-1;i++) {
		days += monthend[i];
	}
	days += (b-1);
	days += 5;
	days %= 7;
	return answerarr[days];
}

a월 이전까지 매달 마지막 날짜의 수를 더한다.

나머지 (b-1)만큼 더해준다.(오늘이 0일이 아니라 1일이니까)

 

days가 0(1월 1일)일 때 금요일이어야 하는데, 금요일이 answerarr[5]이므로,

days에 5를 더해준다. (아니면 배열을{"FRI","SAT","SUN","MON","TUE","WED","THU"}순으로 하든가)

 

days에 7을 나눈 나머지로 몇 번째인지 알 수 있다.

'Problem Solving > programmers' 카테고리의 다른 글

[Lv2] 스킬트리  (0) 2019.04.11
[Lv2] 주식가격  (0) 2019.04.10
[Lv1] 최대공약수와 최소공배수  (0) 2019.04.10
[Lv1] 체육복  (0) 2019.04.10
[Lv1] 소수의 합, 소수 찾기  (0) 2019.04.10
Comments

잘못된 정보가 있다면, 꼭 댓글로 알려주세요(비로그인 익명도 가능).

여러분의 피드백이 저와 방문자 모두를 올바른 정보로 인도할 수 있습니다.

감사합니다. -현록

후원해주실 분은 여기로→