IT 프로그래밍/백준

[c++] 2139번 나는 너가 살아온 날을 알고 있다.

기술1 2024. 5. 24. 20:54
반응형

 

문제

코드

#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;


int main() {
	int d, m, y;
	int month[12] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
	int specialyear;
	int totalDay = 0;
	while (true)
	{
		cin >> d >> m >> y;
		
		if (d == 0 && m == 0 && y == 0)
			break;

		specialyear = 0;
		if (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0))
		{
			specialyear = 1;
		}

		if (specialyear == 1 && m > 2)
		{
			++totalDay;
		}

		for (int i = 0; i < m; i++)
		{
			totalDay += month[i];
		}

		totalDay += d;

		cout << totalDay << endl;

		totalDay = 0;
	}

	
	
	return 0;
}

 

해설

조건식이나 다른 부분은 간단하게 이해할 수 있습니다. 다만 알고리즘은 시간이 조금 걸릴 수 있습니다. totalDay를 만들어준 다음 ++를 해주는 방식으로 했습니다.

 

먼저 d, m, y를 정한 다음에 month에 각 월의 일수를 저장하는 배열을 만듭니다. { 0 , 부터 시작하는 이유는 12월 같은 경우 day만 알면 되기 때문에 month가 필요없고, 1월 같은 경우도 d 만 알면 되기 때문에 0으로 해준 것입니다. 

 

specialyear는 윤년 여부를 저장하는 변수입니다. 윤년이면 1, 아니면 0을 설정해 totalday에 윤년일 때는 1을 더해주는 방식으로 계산을 해줍니다.

 

전반적인 식은 무한 루프를 통해서 진행되며 만약 0 0 0 일 경우 break문을 통해 종료되도록 되어있습니다. 

 

 

반응형

'IT 프로그래밍 > 백준' 카테고리의 다른 글

[c++] 백준 2292번 : 벌집  (0) 2024.05.30
[C++] 2720번 세탁소 사장 동혁  (0) 2024.05.25
[c++] 백준 2563번 색종이  (0) 2024.05.22
[C++] 백준 10798 세로읽기  (0) 2024.05.22
[c++] 백준 2738번 : 행렬 덧셈  (0) 2024.05.21