2021년 12월 2일 강의 중에 교수님께서 오늘은 정말 특별한 날이라고 말씀하셨다. '왜지..? 오늘 결혼 기념일이신가..??' 알고 보니 오늘은 2021년 12월 2일, 즉 20211202 대칭절(?!)이었던 것이었다!!
뭐 나름 신기하기도 하고 정말 그 날이 특별한 날인거같기도 해서 집에 와서 다음 대칭절은 언제일지 구해보았다.
▶ 풀이의 순서
1. 우선 오늘 날짜를 변수에 담아야한다.
2. while문을 통해 9999년까지 대칭절을 구해보자.
3. palindrome인지 아닌지(즉, 대칭절인지 아닌지)에 대한 코드를 구현해야한다.
이를 코드로 구현하면 다음과 같다.
#include <iostream>
#include <time.h>
#include <cmath>
#include <string>
long int get_day(tm * pnow) {
long int year = pnow -> tm_year + 1900;
long int month = pnow -> tm_mon + 1;
long int day = pnow -> tm_mday;
long int special_day = year*pow(10,4) + month*pow(10,2) + day;
return special_day;
}
int is_palindrome (long int special_day) {
std::string str = std::to_string(special_day);
for (int i = 0; i < 4; i++) {
if (str[i] != str[7-i]) {
return 0;
}
}
return 1;
}
int main(void) {
time_t tnow = time(NULL); // 현재 시간에서 1970년 1월1일 시간을 뺀 초단위값
struct tm * pnow;
tnow += 60*60*9; // 그리니치 천문대랑 시차가 9시간!
pnow = gmtime(&tnow); // tnow 포인터 변수를 매개변수로 받아 UTC값들을 나타내는 포인터 변수값으로 반환함
long int special_day = get_day(pnow);
while (special_day < 100000000) {
if (is_palindrome(special_day)) {
std::cout << special_day/10000 << "년 " << (special_day%10000)/100 << "월 " << (special_day%10000)%100 << "일" << "\n";
tnow += 60*60*24;
pnow = gmtime(&tnow);
special_day = get_day(pnow);
} else {
tnow += 60*60*24;
pnow = gmtime(&tnow);
special_day = get_day(pnow);
}
}
return 0;
}
코드를 막힘 없이 잘 짠 거같은데 왜.... 2290년까지만 나오지..??!??! 아... 알고 보니 2038년 문제, 즉 Y2K문제때문인듯 하다..
https://ko.wikipedia.org/wiki/2038%EB%85%84_%EB%AC%B8%EC%A0%9C
그렇다면 이론상 2106년까지만 나와야하는데 ㅋㅋㅋ.... 참 애매모호하네... 어짜피 2290년까지 살지도 못할 거같으니 그 이후의 날짜에 대해서는 딱히 관심이 없다만... 다음 기회에 꼭 10000년 전까지의 대칭절을 모두 구해보도록 해야겠다-! (현재까지의 생각으로는 struct tm * 을 안 쓰고 직접 날짜르 처리해야할 거같은데.. 그러면 진짜 어지러울 것 같아서 미룬다..!!)
▶ 깨우친 것들
1. 시간, 날짜와 관련됨 C/C++ 표준 라이브러리 함수
2. int형 변수를 string형 변수로 바꾸는 법
#include <iostream>
#include <string>
int main(void) {
int num = 1234;
std::string str = std::to_string(num);
std::cout << str[0] << str[1] << str[2] << str[3] << str << "\n";
return 0;
}
위와 같이 string 변수를 선언하고 to_string함수를 통해 숫자형 변수를 문자열 변수로 변환할 수 있다.
+) stdio.h 라이브러리에 있는 atoi, atof, atol 함수를 통해 문자열 변수를 정수형 및 실수형 변수로 변환할 수 있다.
'개인 프로젝트 > 잡다한 것들' 카테고리의 다른 글
리눅스 환경에서 C 코드를 통해 전화번호 관리 프로그램 만들기 (0) | 2022.05.15 |
---|---|
[파이썬 웹스크래핑] 파이썬으로 코로나 웹사이트 정보 정리하기 (0) | 2021.08.23 |
[파이썬 유튜브 다운로드] 파이썬으로 유튜브 영상 다운로드하기 (0) | 2021.08.20 |
[파이썬 웹크롤링] 1to50 매크로 만들기 (0) | 2021.08.20 |