코딩 테스트
프로그래머스 2016년 Java (+7)
hyecozy
2022. 8. 7. 19:26
https://school.programmers.co.kr/learn/courses/30/lessons/12901
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
class Solution {
public String solution(int a, int b) {
String[] dayArr = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
//1월 0일이 있다 가정하고 기준 요일을 [4]요일로 설정
int standardDay = 4;
//month를 day로 변환
int mToD = 0;
//1월이면 그냥 내보냄
if(a == 1)
return dayArr[(standardDay + b) % 7];
//mToD 설정하기
for(int i = 1; i < a; i++){
//8월부턴 짝수달이 31일
if(i > 7){
if(i % 2 == 1)
mToD += 30;
else
mToD += 31;
}
else{
if(i % 2 == 1)
mToD += 31;
else
mToD += 30;
}
}
//2월은 30일이 아닌 29일이므로
if(a > 2){
mToD--;
}
//1.1과 차이를 담을 변수=기존[5] + 달을 일로 바꿈 + 순수 일수
return dayArr[(standardDay + mToD + b) % 7];
}
}
➡️요일은 dayArr라는 String 배열을 만들어 설정
➡️금요일에서 흘러간 시간만큼 더한 후, 7로 나눈 나머지를 구하면 요일을 뽑아낼 수 있다
➡️결국 관건은 흘러간 시간을 어떻게 구하느냐가 되는데,
➡️일수는 b 그대로 더하면 되니까 재끼고(?)
➡️월을 어떻게 일로 변환하느냐가 중요하다고 생각했다.
1월은 따로 mToD를 구할 필요 없으니 바로 return 시키기
2~12월중 7월을 기준으로 7월까지는 홀수달이 31일, 8월부터는 홀수달이 30일임을 감안해 코딩.
➡️흘러간 시간을 구할 때 2월이 통째로 포함된 달이라면 (=3월부터)
-1을 해준다. 2월이 30일로 계산되었을 테니까
😂dayArr 배열의 순서를 일월화수목금토가 아닌 1월 1일 금토일월화수목으로 설정을 했더라면 standardDay라는 변수를 안 만들어도 됐을 텐데....라고 풀고 나서 생각이 들었다. 그래도 금요일은.. 금요일 위치에 있는 게 안정적인데 헤헤...
+
그나저나 문제 풀고 나서 포인트 받는 거 저거! 의미 있는 거 맞는 거지...? 최근엔 계속 1점 2점만 받다가 오랜만에 7점 받아서 기록했다!!!