[swea] 2056. 연월일 달력 (python, java , D1)

728x90
반응형

문제풀이 언어를 파이썬으로 바꾼 이후로 쉬운 문제부터 다시 연습하고 있다 

swea1, 2 부터 다 풀려고 한다 

달력 일자 별로 배열에 담아 푸는 방법도 있는데 그게 더 나을 것 같다

 

1. python 풀이 


t=int(input())

for i in range(t):
    print('#%s' %(i+1),end=' ')
    date=input()
    year=int(date[:4])
    month=int(date[4:6])
    dd=int(date[6:])
    if month <1 or month>12:
        print(-1)
        continue

    if month in [1,3,5,7,8,10,12]:
        if dd <1 or dd>31:
            print(-1)
            continue
    if month ==2:
        if dd<1 or dd>28:
            print(-1)
            continue

    if month in [4,6,9,11]:
        if dd <1 or dd>30:
            print(-1)
            continue
    print("%04d/%02d/%02d" %(year,month,dd))

 

 

2. java 

 

sc.nextLine을 쓰면 substring이 안되는데 이유를 모르겠다 

 

정수 입력 받은 후 문자열을 nextLine으로 받으면 문제가 생긴다

정수 입력 후 엔터(개행문자)가 남는데 다음 nextLine이 엔터를 만나서 그냥 지나가버린다 

정수 입력 후 nextLine을 한 번 더 써줘서 개행문자를 없애주자

 

(1) next 사용 

import java.util.Arrays;
import java.util.Scanner;

public class Solution {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int[] days= {31,28,31,30,31,30,31,31,30,31,30,31};
		int t=sc.nextInt();
		for(int i=0;i<t;i++) {
			String s=sc.next();
			String year=s.substring(0,4);
			String month=s.substring(4,6);
			String day=s.substring(6,8);
			if(Integer.parseInt(month)>=1 && Integer.parseInt(month)<=12 && Integer.parseInt(day)>=0 
					&& Integer.parseInt(day)<=days[Integer.parseInt(month)-1])
				System.out.println("#"+(i+1)+" "+year+"/"+month+"/"+day);
			else {
				System.out.println("#"+(i+1)+" -1");
			}
			
			
		}
		

	}

}

(2) nextLine 사용 

 

package com.ssafy.edu;

import java.util.Arrays;
import java.util.Scanner;

public class Solution {

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int[] days= {31,28,31,30,31,30,31,31,30,31,30,31};
		int t=sc.nextInt();
		sc.nextLine();
		for(int i=0;i<t;i++) {
			String s=sc.nextLine();
			String year=s.substring(0,4);
			String month=s.substring(4,6);
			String day=s.substring(6,8);
			if(Integer.parseInt(month)>=1 && Integer.parseInt(month)<=12 && Integer.parseInt(day)>=0 
					&& Integer.parseInt(day)<=days[Integer.parseInt(month)-1])
				System.out.println("#"+(i+1)+" "+year+"/"+month+"/"+day);
			else {
				System.out.println("#"+(i+1)+" -1");
			}
			
			
		}
		

	}

}
728x90
반응형
TAGS.

Comments