연월일로 구성된 8자리의 날짜가 입력으로 주어진다.
해당 날짜의 유효성을 판단한 후, 날짜가 유효하다면 YYYY/MM/DD 형식으로 출력하고,
유효하지 않을 경우, -1을 출력하는 프로그램을 작성하시오.
연월일로 구성된 입력에서 월은 1~12 사이의 값을 가지며, 일은 1,3,5,7,8,10,12월은 31일, 4, 6, 9, 11은 30일, 2월은 28로 한다.
단, 윤년은 없는 것으로 한다.
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 2개의 수가 주어진다.
출력의 각 줄은 #t로 시작하고 공백을 한 칸 둔 다음, 몫을 출력하고 공백을 한 칸 둔 다음 나머지를 출력한다.
(t는 테스트 케이스의 번호를 의미하며, 1부터 시작한다.)
#include <iostream> // 입출력 헤더
#include <vector> // 벡터 컨테이너를 사용하기 위한 헤더
#include <string> // 문자열 헤더
using namespace std; // std를 이름공간으로 설정
int main(){
vector<int> dayOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
// 벡터 컨테이너 dayOfMonth를 정수형 배열로 값들을 저장
int C; // 정수형 변수 C 선언
cin >> C; // C를 입력 받음
string s; // 문자열 변수 s 선언
for(int i=1; i<=C; i++){ // 1부터 C까지 1씩 증가하는 반복문
cin >> s; // 문자열 입력
int month = atoi(s.substr(4,2).c_str);
// 입력 받은 문자열의 인덱스 번호가 4인 값부터 2자리를 가지고 와서
// const char*형으로 만들어준 후 atoi함수를 이용해 정수 타입으로 바꿔서 month에 저장
// atoi: 문자열을 정수 타입으로 바꿔주는 명령어
// substr: 참조하는 문자열의 일부분을 리턴함
// c_str: const char*로 리턴하는 함수
int day = atoi(s.substr(6).c_str);
// 위와 동일, 인덱스 참조하는 부분만 달라짐
cout << "#" << i << " ";
if(1 <= month && month <= 12 && 1 <= day && day <= dayOfMonth[month-1]){
// month의 값이 1이상, 12이하일 경우와 day의 값이 1이상, dayOfMonth에 있는 값 이하라면
cout << s.substr(0, 4) << "/" << s.substr(4, 2) << "/" << s.substr(6) << endl;
// 문자열의 인덱스 번호가 0부터 4자리까지 출력하고 '/', 인덱스 번호가 4부터 2자리 출력하고 '/', 마지막 6부터 끝까지 출력
}
else{
cout << -1 << endl; // 조건에 부합하지 않는다면 -1 출력
}
}
}