본문 바로가기
백준

[백준] 10699번 - 오늘 날짜

by 템닉___ 2024. 3. 18.

문제: 서울의 오늘 날짜를 출력하는 프로그램을 작성하시오. 입력은 없다. 서울의 오늘 날짜를 "YYYY-MM-DD" 형식으로 출력한다.

시도 횟수: 1번

처음 생각한 방법: 오늘 날짜를 불러오는 STL이나 라이브러리가 있을 것으로 예상함.
하지만 관련 STL 혹은 라이브러리에 대해서 아는 부분이 아예 없었기에 구글링을 통해서 찾아봄
이 블로그 에서 도움을 받았다.

내 코드:

#include <bits/stdc++.h>
#include <ctime>
using namespace std;


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

    
    t = localtime(&timer);
    printf("%04d-%02d-%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday);
    return 0;
}

모범답안: 헉... 이건 조금 충격이긴 한데.... 80등 중반까지도 하드코딩으로 출력했다. 

#import <stdio.h>
main()
{
	puts("2016-04-23");
}

숏코딩 빼고 가장 높은 등수가 위의 코드이다. 그냥 해당 날짜를 바로 출력해버렸는데... 일단 공부하는데 목적이 있으니까 이런 코드들은 다 제외하고 다른 모범답안을 찾아보았다.

#include<cstdio>
#include<time.h>
int main(){
	time_t tt;
	struct tm t;
	time(&tt);
	t=*localtime(&tt);
	printf("%04d-%02d-%02d", t.tm_year+1900,t.tm_mon+1,t.tm_mday);
}

하드코딩 아니면서 제일 높은 등수의 코드이다.
cstdio를 사용했다는 것이 독특하다. 사실상 C를 썼다고 보는게 어울릴 듯한 문법이다. 

다음은 GPT에게 맡긴 두 코드간의 비교이다.

공부하기 편한 세상이다.

 

내 코드의 개선할 점: 이번 문제에서는 사실상 C 라이브러리의 함수를 가져다 사용하는 것이었다. 따라서 다음과 같은 부분이 불필요했다.
1. 헤더의 남용: 사용할 라이브러리가 ctime(time.h) 밖에 없으므로, cstdio만 가져왔어도 충분했다.
하지만 불필요하게 <bits/stdc++.h>을 가져왔는데 이는 표준 C/C++ 헤더가 아닐 뿐더러 여러 헤더파일을 포함하고 있기에 컴파일 시간이 더 오래 걸릴 수 있다.
2. 네임스페이스의 사용: using namespace 구문은 안 쓸 수 있다면 쓰지 않는 것이 좋다고 한다. 물론 알고리즘 문제를 풀때나, 코딩테스트를 볼때는 상관이 없지만, 전역 네임스페이스를 오염시키고(충돌 가능성), 코드의 가독성을 떨어트릴 수 있다. 그런점에서 모범답안에서 cstdio를 사용한 것은 최적의 선택이었는데, stdio.h를 사용하는 경우 global namespace를 사용하기 때문에 using namespace를 결국 또 해줘야한다. cstdio는 std 네임스페이스를 사용해서 깔끔한 코드를 작성 할 수 있었다.   

알고리즘 분류: 구현

난이도: 브론즈 V

 

복습하면서 참고해본 블로그 목록:

https://su-m.tistory.com/4

 

[C++] <cstdio>, <iostream>, <stdio.h>에 대해서

가 뭔가요? cstdio는 C STandarD Input and Output의 약자로, C언어의 stdio.h와 같습니다. 입/출력과 관련된 옛날 C함수들을 포함한 헤더파일입니다. (printf(), fprintf(), fopen, etc) C++의 와 뭐가 다른가요? 기능상

su-m.tistory.com

https://ansohxxn.github.io/cpp/iospeed/

 

C++ scanf 와 cin 의 입출력 속도 비교, 입출력 속도 높이기

🚀 C의 입출력 함수(scanf, printf)와 C++의 입출력 함수(cin, count)

ansohxxn.github.io

https://tcpschool.com/c/c_struct_pointer

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

'백준' 카테고리의 다른 글

[백준] 25083번 - 새싹  (0) 2024.03.18
[백준] 7287번 - 등록  (0) 2024.03.18
백준 단계 5. 문자열  (0) 2024.03.17
백준 단계 4. 배열  (0) 2024.03.17
백준 단계 3. 반복문  (0) 2024.03.17