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 매크로를 정의하여 사용한다면 정상적인 실행이 가능하다.
c++ 기초 / 현재날짜 및 시간을 문자열로 출력
time() 함수를 호출하여 현재의 날짜, 시간을 얻어 time_t 변수에 저장localtime() 함수를 호출하여 포맷 변환하기
velog.io
'문제 해결 > BaekJoon' 카테고리의 다른 글
[백준] [C++] 10926번 ??! (0) | 2022.11.17 |
---|---|
[백준] [C++] 10817번 세 수 (0) | 2022.11.16 |
[백준] [C++] 10093번 숫자 (0) | 2022.11.14 |
[백준] [C++] 9713번 Sum of Odd Sequence (0) | 2022.11.14 |
[백준] [C++] 9654번 나부 함대 데이터 (0) | 2022.11.14 |