hoon DevLog

[Java] 프로그래머스 2016년 자바 본문

코딩테스트/프로그래머스

[Java] 프로그래머스 2016년 자바

개발한기발자 2022. 8. 4. 12:44
반응형

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/12901

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


[문제 설명]

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"

[나의 풀이]

class Solution {
public String solution(int a, int b) {
        String answer = "";
        String[] day = { "FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU" };
        int[] date = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        int allDate = 0;
        for (int i = 0; i < a - 1; i++) {
            allDate += date[i];
        }
        allDate += (b - 1);
        answer = day[allDate % 7];

        return answer;
    }
}

배열로 일일이 값을 세팅해주는 풀이...

다소 한정되어 보일 수 있는 코딩이나,

윤달인 2016년 한정 풀이이기 때문에,

성능면에선 빠른 편에 속한다고 볼 수 있다.

[다른 사람의 풀이]

import java.util.*;

class TryHelloWorld{
    public String getDayName(int month, int day){
        Calendar cal = new Calendar.Builder().setCalendarType("iso8601")
                        .setDate(2016, month - 1, day).build();
        return cal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, new Locale("ko-KR")).toUpperCase();
    }
    
    public static void main(String[] args){
        TryHelloWorld test = new TryHelloWorld();
        int a=5, b=24;
        System.out.println(test.getDayName(a,b));
    }
}

[정리]

- '%' 연산자의 특성을 이용해서 문제에서 제시한 값을 구할 수 있음

- 배열로 별도 정의 없이 Calendar 클래스를 활용해 자바 함수로도 사용 가능!

 

개인 피셜 난이도 : ★☆☆

아.... 함수를 쓰면 그만이었구나...

실무에서 날짜 관련 비즈니스 로직 구성시,

살짝살짝 봤었던 기억이 났었는데,

막상 코딩 테스트 문제 풀 때는 반복문, 조건문 밖에

생각이 나질 않는다...

 

다양한 풀이는 영양간식이라 생각하고 계속해서 접해보자!

 

끝!

728x90
반응형