취업이야기

SWEA(SW Expert Academy) [d1] 2056. 연월일 달력 (java)

경훈잉 2024. 4. 4.

문제. 2058 자릿수 더하기

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&contestProbId=AV5QLkdKAz4DFAUq&categoryId=AV5QLkdKAz4DFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=1&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

연월일 순으로 구성된 8자리의 날짜가 입력으로 주어진다.
 


해당 날짜의 유효성을 판단한 후, 날짜가 유효하다면

[그림1] 과 같이 ”YYYY/MM/DD”형식으로 출력하고,

날짜가 유효하지 않을 경우, -1 을 출력하는 프로그램을 작성하라.


연월일로 구성된 입력에서 월은 1~12 사이 값을 가져야 하며

일은 [표1] 과 같이, 1일 ~ 각각의 달에 해당하는 날짜까지의 값을 가질 수 있다.
 


※ 2월의 경우, 28일인 경우만 고려한다. (윤년은 고려하지 않는다.)


[입력]

입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.

다음 줄부터 각 테스트 케이스가 주어진다.


[출력]

테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 

입력 출력
5
22220228
20150002
01010101
20140230
11111111
#1 2222/02/28
#2 -1
#3 0101/01/01
#4 -1
#5 1111/11/11



 


풀이

import java.util.Scanner;
import java.io.FileInputStream;

class Solution
{
	public static void main(String args[]) throws Exception
	{

		Scanner sc = new Scanner(System.in);
		int T;
		T=sc.nextInt();

		for(int test_case = 1; test_case <= T; test_case++)
		{
            String a = sc.next();
            String y = a.substring(0,4); //int로 받았을때 1000자리가 0이라면 사라지기 때문에 string으로 받음
            int m = Integer.parseInt(a.substring(4,6));
            int d = Integer.parseInt(a.substring(6,8));
            int arr[] = {0,31,28,31,30,31,30,31,30,31,30,31,30}; //달마다 정해진 일자 안에 들어가야함
            if(m>12 || m < 1 || d > arr[m] || d < 1) System.out.println("#" + test_case + " -1");
            else System.out.println("#" + test_case + " " + y + "/" + a.substring(4,6) + "/" + a.substring(6,8)); //2자리수가 나와야하기 때문에 첫번째에 0이 나올때를 대비하여 string으로 출력함

		}
	}
}

막 어렵진 않았지만 여태까지 d1문제들 중에서는 조금 생각할게 있었다. 이래야 하는 맛이 나지!

반응형

댓글