본문 바로가기
알고리즘 풀이

221118 알고리즘 풀이 1

by 미노킴 2022. 11. 18.

문제

프로그래머스 코딩 테스트 난이도 1 - '2016년'

풀이 과정

문제를 보자마자 왠지 달력과 관련된 Java 클래스가 있을 것 같았다. 역시나 검색을 해보니 java.util 패키지에 Calendar라는 추상 클래스가 있었다.

 

Calendar 클래스 생성 방법과, 현재 요일 얻는 법, 날짜를 변경한 후 요일을 얻는 법을 찾아보았다.

 

처음 테스트 해볼 때 날짜를 변경하면 요일이 이상하게 나왔었는데, 알고 보니 .set(년,월,일)로 날짜를 변경할 때 0이 1월이고 11이 12월로 들어가는 거였다..!

 

Calendar에서는 요일은 일요일이 1 토요일이 7로 1~7까지의 숫자로 리턴값을 받을 수 있었다. 해당 값은 문자열이 담긴 배열을 만들어 숫자를 문자열로 쉽게 바꿀 수 있었다. (이 방법은 Calendar 클래스를 찾다가 발견했다..ㅎ)

 

Calendar에 대한 자세한 내용은 아래 링크에 정리해 두었다. 

https://kimdirector1090.tistory.com/55 

 

[Java] Calendar 클래스

 

kimdirector1090.tistory.com

팀원들과 스터디를 해보니 알고리즘 풀이 시 Calendar 클래스를 사용하는 건 좋지 않아 보였다. 직접 알고리즘을 구현한 팀원들은 컴파일 속도가 0.02~0.04ms가 나왔고, 내가 제출한 답안은 컴파일 속도가 20ms~30ms가 나왔다.

 

에러 및 막혔던 부분

X

코드

import java.util.*;

class Solution {
    public String solution(int a, int b) {
        String answer = "";
        //Java의 Calendar 클래스 활용
        Calendar calendar = Calendar.getInstance();
        
        //2016년 a월b일로 날짜 재설정
        //calendar.set(년,월,일)에서 월은 0이 1월이고 11이 12월임. 그래서 넣을 때 -1 해줘야함.
        calendar.set(2016,a-1,b);
        
        //calendar의 결과값을 요일 문자열로 바꿔줄 배열 생성
        String[] dayArr = {"SUN","MON","TUE","WED","THU","FRI","SAT"};

        //num으로 요일 값 받아옴. 일요일은 0, 토요일은 6
        int num = calendar.get(Calendar.DAY_OF_WEEK) -1;
        answer += dayArr[num];
        System.out.println(answer);
        
        return answer;
    }
}

'알고리즘 풀이' 카테고리의 다른 글

221121 알고리즘 풀이 6문제  (2) 2022.11.21
221119 알고리즘 풀이 8문제  (2) 2022.11.19
221114 알고리즘 풀이  (0) 2022.11.15
221113 알고리즘 풀이  (0) 2022.11.14
221112 알고리즘 풀이  (0) 2022.11.13