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 함수를 통해 출력한다.
'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 |
댓글