Level1. 2016년
문제설명 )
풀이Code )
더보기
class Solution {
public String solution(int a, int b) {
int[] month = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int day = 0;
String[] week ={"FRI","SAT","SUN","MON","TUE","WED","THU"};
String answer = "";
for (int i=0; i<a-1; i++) {
day += month[i];
}
answer = week[(day + b - 1) % 7];
return answer;
}
}
풀이법 )
- 달력의 일자에 맞춰 숫자형 배열을 선언해준다.
- 해당월에 맞춰 일수를 더해줄 day 변수를 선언한다.
- week라는 문자열 배열을 선언하여 answer 에 담을수있게 선언한다.
- for문을 사용하여 주어진 월에 맞춰 일수를 더해준다.
- 7을 나누어 나온 나머지값의 week인덱스가 해당 일의 요일이 된다.
2021.11.14 풀이
더보기
class Solution {
public String solution(int a, int b) {
String answer = "";
String[] week = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
int[] startWeek = {5,1,2,5,0,3,5,1,4,6,2,4};
int addDays = b>1 ? ((b-1)%7) : 0; // 일주일 단위로 나눈 나머지값
int weekIndex = 0; // 최종적으로 요일의 인덱스
// addDays를 해줬을때 한 주를 넘어가게되면 일요일부터 다시계산해준다.
// 수요일인데 addDays가 4인경우 넘어가니까 7일을 빼주고 0에서부터 addDays해준다.
if(startWeek[a-1] + addDays > 6) {
weekIndex = (startWeek[a-1]-7) + addDays;
} else {
weekIndex = startWeek[a-1] + addDays;
}
// 최종적으로 나온 요일의 인덱스를 리턴
answer = week[weekIndex];
return answer;
}
}
기존에 풀었던 방식에서 반복문을 없앴다.
지금상태에선 시간복잡도의 차이가 얼마나지않지만, 데이터가 많거나 복잡한 경우에 속도의 차이가 많이 날것같다.
가독성은 기존에 풀었던 방식이 훨씬 좋은것같다..
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] Level1. 같은 숫자는 싫어 (Java) (0) | 2021.01.05 |
---|---|
[Programmers] Level1. 가운데 글자 가져오기 (Java) (0) | 2021.01.03 |
[Programmers] Level1. K번째 수 (Java) (0) | 2021.01.01 |
[Programmers] Level1. 체육복 (Java) (0) | 2020.12.28 |
[Programmers] Level1. 완주하지 못한 선수 (Java) (0) | 2020.12.27 |