문제: https://www.acmicpc.net/problem/2884
이제 여유로울 때 백준 알고리즘 문제도 풀면서 하나씩 업로드를 해볼까해요.
요즘엔 C++도 다시 공부하고 있는데요, 때문에 앞으로 C++ 과 파이썬 두가지로 모두 풀이를 작성하면서 포스팅을 해보면 어떨까 하는 호기로운 생각도 해보았답니다. 오늘은 백준 알고리즘 첫 포스팅 2884번 시계 세팅 문제입니다.
이 문제를 처음으로 골랐던 이유는, 아무래도 제가 C++에 자료구조에는 덜 익숙해서 한번 클래스 개념을 잘 써먹어보고 싶다는 생각에 클래스를 이용하여 시계라는 객체를 생성하여 문제를 풀어보았는데요.
항상 늦잠자는 상근이 시계를 현재 시간보다 45분 전으로 맞추는 게 문제의 핵심이죠.
그렇다면 우리는 클래스가 먼저 아래를 생성해야 한다는 것을 알 수 있어요.
1. 현재 시간과 분
2. 시간을 핸들링할 수 있는 변수
3. 시간 핸들링 함수
그리고 한 가지 더 고려해야 할 것은 시계가 0시 0분보다 작으면 24시간이 더해져야하고 24시를 넘으면 24시간이 빼져야 한다는 것을 잊지 말아주셔야 해요.
바로 문제 코드를 보면서 비교해볼까요?
1. C++
#include <iostream>
using namespace std;
class Clock
{
private:
int time; //hour*60 + min으로 총 시간을 핸들링 할 변수랍니다.
int hour;
int min;
public:
Clock(int h, int m); //Clock객체의 생성자 선언
void set_clock(int m=45); //45분 일찍 맞춘대서 디폴트를 45로 맞춰보았어요.
void show();
};
int main(){
int x,y;
cin >> x >> y;
Clock sangeun(x,y);
sangeun.set_clock();
sangeun.show();
return 0;
}
Clock::Clock(int h, int m):hour(h), min(m) // 생성자
{
time = 60*h + m;
}
void Clock::set_clock(int m){
time = time - m; // 45분을 총 시간에서 빼준 뒤,
if(time > 60*24) // 24시가 넘으면 24시간을 빼주고,
{
time = time - 60*24;
}
else if(time < 0) // 0시보다 작으면 24시간을 더해준다.
{
time = time + 60*24;
}
hour = time / 60;
min = time % 60;
}
void Clock::show(){
cout << hour << " " << min << endl;
}
이제 그럼 파이썬 코드도 한번 보실까요?
class Clock():
def __init__(self, x, y): // 객체 생성자
self.x = x
self.y = y
self.counter = 60*x +y
def set_clock(self, m=45): // 시계 세팅 함수
self.counter -= m
if (self.counter>60*24): self.counter -= 60*24
elif (self.counter<0): self.counter += 60*24
self.x = self.counter // 60
self.y = self.counter % 60
def main():
x,y = map(int, input().split())
sangeun = Clock(x,y)
sangeun.set_clock()
print(f'{sangeun.x} {sangeun.y}')
if __name__ == "__main__":
main()
이렇게 한 문제를 똑같은 방법으로 풀고 비교해보았더니 신기한 결과가 나왔네요.
C++와 파이썬으로 똑같이 작성한 코드가 메모리와 실행시간에 있어서 굉장히 큰 차이를 보여주네요.
이에 대한 포스팅은 다음에 다시 별도로 진행해보도록 하겠습니다 :)
'Programming > 백준 문제풀이' 카테고리의 다른 글
백준 2798번 _ BlackJack 블랙잭 / Brute Force 브루트포스 (C++) (0) | 2020.02.29 |
---|---|
백준 11729번 _ Hanoi / recursion 재귀 문제 (C++) (0) | 2020.02.29 |
백준 1152번 string _ while문/cin EOF 연습 (C++) (0) | 2020.02.29 |
백준 1065 한수_ 함수(function)사용! (C++) (0) | 2020.02.29 |
백준 1002번 터렛 _ C++, python 두가지 풀이. (0) | 2020.02.29 |