본문 바로가기
C/SWEA

[SWEA] #1948. 날짜 계산기

by 단월໒꒱ 2021. 10. 1.

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

 

 

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

 

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

댓글