본문 바로가기
문제 해결/BaekJoon

[백준] [C++] 10699번 오늘 날짜

by WSLim_97 2022. 11. 16.
반응형

https://www.acmicpc.net/problem/10699

 

10699번: 오늘 날짜

서울의 오늘 날짜를 출력하는 프로그램을 작성하시오.

www.acmicpc.net


코드

#include <iostream>
#include <ctime>

int main() {
	time_t timer = time(NULL);
	struct tm* t = localtime(&timer);

	printf("%d-%d-%d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);

	return 0;
}

풀이

오늘 날짜를 출력하는 문제이다.

 

c++에서 time과 관련된 함수는 #include <ctime>을 통해 사용할 수 있다.

 

time 함수를 사용하여 time_t 자료 형태로 현재 시간 결과를 반환한다.

 

이때 현재 시간은 1970년 1월 1일 0시 0분 0초부터 현재 시간까지 흐른 시간을 초로 나타낸 것이다.

 

그 후 timer에 저장된 초 단위 값은 struct tm 구조체의 형태로 t에 저장된다.

 

struct tm 구조체의 형태는 다음과 같다.

 

struct tm {
	int tm_year;        // 1900년 부터 카운트 한 년
	int tm_mon;         // 현재 월 (0 ~ 11)
	int tm_yday;        // 1년 중 경과 일 (0 ~ 365)
	int tm_mday;        // 현재 일 (1 ~ 31)
	int tm_wday;        // 현재 요일 (0 ~ 6, 0: 일요일)
	int tm_hour;        // 현재 시간 (0 ~ 23)
	int tm_min;         // 현재 분 (0 ~ 59)
	int tm_sec;         // 초 (0 ~ 59)
	int tm_isdst;       // 섬머타임 실시 여부 (양수(실시), 0, 음수)
};

그 후 알맞은 년-월-일을 출력하는데 tm_year는 1900년부터 카운트 한 값이기 때문에 +1900을 한다.

 

또 tm_mon은 값이 0~11이기 때문에 현재 월을 표현할 때에는 +1을 해주었다.

 

현재 일은 tm_mday 값을 그대로 출력한다.

 

+) 백준에서 제출할 때에는 문제없이 맞았지만 Visual Studio에서는 localtime 함수의 보안성 문제 때문에 오류가 발생한다.

이 문제는 localtime 함수를 localtime_s로 바꾸어 사용하거나 _CRT_SECURE_NO_WARNINGS 매크로를 정의하여 사용한다면 정상적인 실행이 가능하다.

 

 

참고: https://velog.io/@i-zro/c-%EA%B8%B0%EC%B4%88-%ED%98%84%EC%9E%AC%EB%82%A0%EC%A7%9C-%EB%B0%8F-%EC%8B%9C%EA%B0%84%EC%9D%84-%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C-%EC%B6%9C%EB%A0%A5

 

c++ 기초 / 현재날짜 및 시간을 문자열로 출력

time() 함수를 호출하여 현재의 날짜, 시간을 얻어 time_t 변수에 저장localtime() 함수를 호출하여 포맷 변환하기

velog.io

반응형