Difficulty 2
[문제]
[코드 및 결과]
#include <stdio.h>
int main(int argc, char** argv) {
int T, m1, m2, d1, d2;
int date[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
scanf("%d", &T);
for (int t = 0; t < T; t++) {
int answer = 0;
scanf("%d %d %d %d", &m1, &d1, &m2, &d2);
if (m1 == m2) {
answer = d2 - d1 + 1;
}
else {
answer = date[m1-1] - d1 + 1;
for (int i = m1 + 1; i < m2; i++) {
answer += date[i-1];
}
answer += d2;
}
printf("#%d %d\n", t+1, answer);
}
return 0;
}
[설명]
날짜 두개를 입력 받으면 첫번째 날짜로부터 두번째 날짜가 몇일째인지 알려줘야한다.
일단 필요한 값들을 int형으로 선언하고 date배열은 각 월 별로 마지막 날짜를 저장해준다.
여기서 date 배열에서 인덱스값이 0인 부분을 0으로 잡아두고 1월부터 12월까지 크기가 13인 배열로 하면 좀 더 직관적일 것 같다.
입력된 테스트케이스 만큼 실행되도록 for문을 잡아주고 그 안에서 최종으로 출력될 answer을 0으로 초기화 해주고 시작한다.
전체적으로 한번에 처리하고 싶었는데 잘 안 돼서 일단 두 날짜의 월이 같을 때랑 다를 때 두 경우로 나누었다.
같을 경우에는 두번째 일수에 첫번째 일수를 빼고 1을 더한다.
다를 경우에는 다시 세 가지 과정을 거쳐야하는데, 일단 첫 달은 해당 달 마지막 날짜에서 d1을 뺀 뒤 1을 더하고, 중간은 m1 다음 달부터 m2 달 전까지의 마지막날을 더해주고, 마지막 달은 d2만 더해주면 된다.
이렇게 해서 얻은 answer을 printf 함수를 통해 출력한다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
'C > SWEA' 카테고리의 다른 글
[SWEA] #1204. 최빈수 구하기 (0) | 2021.10.10 |
---|---|
[SWEA] #1933. 간단한 N의 약수 (0) | 2021.10.07 |
[SWEA] #2025. N줄덧셈 (0) | 2021.09.27 |
[SWEA] #1976. 시각 덧셈 (0) | 2021.09.26 |
[SWEA] #2068. 최대수 구하기 (0) | 2021.09.26 |
댓글