[2020-11-04] 2016년
2020. 11. 4. 16:17ㆍ코딩테스트
푼 시간 : 1시간
언어 : 자바
programmers.co.kr/learn/courses/30/lessons/12901
코딩테스트 연습 - 2016년
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까
programmers.co.kr
처음엔 쉬운 문제라 생각해서 되게 금방 풀겠지 했는데
생각보다 시간이 오래걸린 문제
a는 달, b는 일 (테스트케이스는 a=5, b=24)
2016년은 윤년이기때문에 366일이고, 2월에 29일이라서
month배열에 2번째 값에 29를 넣어주었다. 1월1일 금요일부터 시작이기 때문에
week의 첫 값은 금요일이다. 카운트 변수를 따로 만들어 쓰었고,
테스트케이스에 맞추다보니 코드 채점하고 제출을 하고나서 틀린점이 두가지 있었다.
원래 처음에 week변수를 안 만들고 시작을 해버려서 그냥 case문으로 돌렸었는데
코드가 너무 지저분해서 week변수를 만들고 answer에 넣었으나 실수로
week[count%7]을 해버려서 바로 바꿔버렸다.
class Solution {
public String solution(int a, int b) {
String answer = "";
int []month={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
String []week= {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
int count=0;
for(int i=0; i<month.length; i++){
if(i==a)
break;
// i가 0부터 시작하기 때문에 a(달)과 같아지면 break
for(int j=0; j<month[i]; j++){
if(i==a-1&&j==b)
break;
// i가 달(a-1)과 같고, j의 크기가 b와같으면 break
// 일부러 count보다 위에 두어 count가 되기전에 break시켰다.
count+=1;
}
}
answer=week[(count-1)%7];
// count가 0부터 시작하기때문에 무조건적으로 한번은 돌아가고, 그 다음부터
// 조건이 성립한다. 그래서 count-1
return answer;
}
}
앞으로 문제를 얕잡아보면 안되겠다.
아무 생각없이 그냥 풀었는데 10분 20분
지나다보니 구조적으로 좀 더 생각해보고
풀어야 하는게 맞는 것 같다.
'코딩테스트' 카테고리의 다른 글
[2020-11-10] 문자열 내 p와 y의 개수 (0) | 2020.11.10 |
---|---|
[2020-11-09] 문자열 내 마음대로 정렬하기 (0) | 2020.11.10 |
[2020-11-05] 나누어 떨어지는 숫자 배열 (0) | 2020.11.05 |
[2020-11-05] 같은 숫자는 싫어 (0) | 2020.11.05 |
[2020-11-03] 크레인 인형뽑기 게임 (0) | 2020.11.04 |