본문 바로가기
알고리즘/백준 BOJ

[BOJ/C++] 2557 Hello World, 10699 오늘 날짜

by 왹져박사 2023. 7. 14.
728x90

1. 2577 Hello World

가장 기본적인 문제이다. '성공'표시를 남기기 위해 제출하였다. 

이 문제로 C++을 처음 접한다면

표준 라이브러리의 입출력 클래스 iostream 헤더파일 선언.

std 네임스페이스의 출력함수 cout참조, 문자열 Hello World!출력 (문제 이름과는 달리 !가 있다. )

#include <iostream>

int main()
{
	std::cout << "Hello World!";
	return 0;
}

 

 

2. 10699 오늘 날짜

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

 

10699번: 오늘 날짜

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

www.acmicpc.net

서울의 오늘 날짜를 "YYYY-MM-DD"형식을 출력하는 문제이다. 

 

이 문제를 풀기 위해 C++의 시간 관련 개념을 배워야했다. 

include <ctime>을 선언하면 C의 <time.h>헤더를 포함하고 std 네임스페이스에도 선언된다고 한다. 

https://learn.microsoft.com/ko-kr/cpp/standard-library/ctime?view=msvc-170 

 

<ctime>

자세한 정보:

learn.microsoft.com

 

처음에 기본적인 년, 월, 일 출력이 어떻게 되는지 알아보기 위해 출력해보았다. 

+포인터라는 개념을 알아야한다. C언어를 배우며 가장 핵심이 되었던 내용이라고 생각한다. 

당시에 교수님께서 다른 언어를 배우면 포인터라는 개념이 따로 존재하지 않는다고 하셨는데, C++에는 존재하였다. 

내일은 포인터에 관한 내용을 복습해야겠다. 

#include <iostream>
#include <ctime>


int main()
{
    std::time_t timer = time(NULL);
    struct tm t;
    localtime_s(&t, &timer);

    std::cout << t.tm_year <<"년";
    std::cout << t.tm_mon <<"월";
    std::cout << t.tm_mday <<"일";
    
    return 0;
}

년도에 +1900과 월에 +1을 해줘야겠다. 

 

#include <iostream>
#include <ctime>


int main()
{
    std::time_t timer = time(NULL);
    struct tm t;
    localtime_s(&t, &timer);

    std::cout << t.tm_year+1900 <<"-";
    std::cout << t.tm_mon+1 <<"-";
    std::cout << t.tm_mday;
    
    return 0;
}

visual studio 상으로는 오류가 없었지만, 백준 채점에는 컴파일에러가 떴다. 

다른 사람들의 풀이를 보니 localtime으로 사용했다. localtime으로 사용하면 visualstudio에서는 오류가 나지만 백준에서는 정답으로 뜬다고 한다. 내일 localtime과 포인터의 활용에 대하여 더 공부하며 다시 풀어봐야겠다. 

 

+다시 푼 내용

localtime 뿐만 아니라 더 필요한 부분이 있었다.

위의 코드로 출력했을 경우 현재 날짜인 2023-07-15가 출력되어야 하지만, 2023-7-15가 출력되었다. 

이를 고치기 위하여 cout.width와 cout.fill을 사용해야했다. 

#include <iostream>
#include <ctime>


int main()
{
    std::time_t timer = time(NULL);
    struct tm t;
    localtime_s(&t, &timer);

    std::cout << t.tm_year + 1900 << "-";
    std::cout.width(2);
    std::cout.fill('0');
    std::cout << t.tm_mon + 1 << "-";
    std::cout << t.tm_mday;

    //struct tm* t = localtime(&timer);

    //std::cout << t->tm_year + 1900 << "-";
    //std::cout << t->tm_mon + 1 << "-";
    //std::cout << t->tm_mday;
    
    return 0;
}

2자리수로 고정하기 위하여 cout.width(2);, 빈 자리를 0으로 채우기 위하여 cout.fill('0');을 추가하였다. 

728x90