본문 바로가기

알고리즘/프로그래머스

[프로그래머스]Lv.1 2016년

https://school.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일같은 날짜는 주어지지 않습니다)

입출력 예제

설계과정

1. 입력받은 월까지 해당하는 전체 일 수를 구한다.

 

2. 전체 일 수를 7로 나눠서 그에 맞는 요일을 출력한다.


풀이과정

1. 요일과 각 월에 해당하는 전체 일 수를 각각 배열로 저장한다.

  • 요일 : FRI, SAT, SUN .. 등을 string으로 배열에 저장한다.
  • 일 : 31, 29, 30 ... 등 각 월에 해당하는 전체 일자를 int 배에 저장한다.

2. for문을 통해서 입력받은 월의 바로 전까지에 해당하는 전체 일자를 합산한다.

  • 배열에 순차적으로 각 월에 해당하는 일자를 저장해놓았기에 가능하다.

3. 그 후에 입력받은 일자를 더해서 총 일자를 구한다.

  • 인덱스는 0부터지만 일자는 1부터 시작하므로 입력받은 일자에서 1을 빼야 정상 결과가 출력된다.

4. 합산 일자를 7로 나눈 나머지를 배열의 인덱스로 잡아서 결과를 출력한다.

  • 요일을 출력하는 배열의 크기가 7이므로 그로 나눠서 인덱스에 맞는 요일을 출력한다.

답안소스

  • 프로그래머스
class Solution {
    public String solution(int a, int b) {
        String answer = "";
        
        String[] week = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
        int[] date = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int sumDate = 0;
        
        for(int i = 0; i < a-1; i++) {
            sumDate += date[i];
        }
        
        sumDate += b - 1;
        
        answer = week[sumDate % 7];
        
        return answer;
    }
}

  • 이클립스
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		String answer = "";
		String[] week = {"FRI", "SAT", "SUN", "MON", "TUE", "WED", "THU"};
		int[] date = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		
		int month = Integer.parseInt(st.nextToken());
		int day = Integer.parseInt(st.nextToken());
		int sumDate= 0;
		
		for(int i=0; i<month-1; i++) {
			sumDate += date[i];
		}
		
		sumDate += day - 1;
		answer = week[sumDate % 7];
		System.out.println(answer);
	}
}