며칠 간 풀었던 프로그래머스 문제 중 하나입니다. 이제 교육도 끝났고 그래서 코딩테스트도 어느정도 준비는 해야되지 않나 해서 공부 중입니다.
제 설명
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 |
import java.util.*;
class Solution {
public String solution(int a, int b) {
String[] days = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
int[] months = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30};
int total = 0;
for(int i=0; i<a; i++) {
total += months[i];
}
total += b;
return days[(total + 4) % 7];
}
}
제 풀이입니다. 처음엔 컬렉션 프레임워크나 스트림 공부 좀 할겸 이것저것 써보면서 만들었는데 메모리랑 시간을 상당히 먹는 것 같아 기본적인 것들로만 바꾸니 시간이 확실히 줄더군요. 그래서 스트림이나 다른 컬렉션 프레임워크등도 없이 가능하면 왠만하면 안쓰도록 해야겠다는 걸 배웠습니다.
일단 문제푸려는데 월 별 일자를 몰라서 그냥 검색해서 배열로 만들었어요;;
뭐 일단 어렵지 않게 풀어는 봤고 자료구조 부터 차근히 공부해 나가니까 쪼금 실력이 느는걸 느끼기는 합니다.
처음엔 자바 배우고도 1레벨만 해도 막막했었는데 할만해지고 2~3레벨은 왠만하면 풀 수 있을 정도로 연습을 계속하고자 합니다.
import java.time.*;
class Solution {
public String solution(int a, int b) {
return LocalDate.of(2016, a, b).getDayOfWeek().toString().substring(0,3);
}
}
너무 간단하게 나와서 뭔가 했네요 이건
확실히 애플리케이션 구추이랑 코딩테스트에서 쓰이는게 꽤 다른것들이 상당해서 코딩테스트에 주로 쓰이는 기능들을 한번 공부는 해야겠다는 생각이 들었습니다. 결국 자바 공부..
암튼 이상입니다.