서론
친구가 구름톤이라는 알고리즘 챌린지를 가져와서 보여주었다. 매일 제공되는 문제를 푸는 방식이 동기 부여에도 의미가 있고, 혜택 또한 제공하여서 참여를 하고 문제를 푸는데, 블로그 일기를 통한 상품도 있어 학습 일기를 써보게 되었다.
2일차 문제 프로젝트 매니징
문제 요약 : 시간을 주고 N개의 X분을 주었을 때 모두 더한 값을 출력하시오.
단순하게 main안에서 해결해도 되지만 최근에 class를 배우게 되어 OOP적으로 풀어보았다.
#include <iostream>
using namespace std;
class Time
{
private:
int time;
int minute;
public:
Time(int m_time, int m_minute);
Time operator+(int min);
int gettime()
{
return time;
}
int getminute()
{
return minute;
}
void showTime()
{
cout << time << " " << minute << endl;
}
};
Time::Time(int m_time, int m_minute)
{
if (m_minute >= 60)
{
minute = m_minute % 60;
m_time += m_minute / 60;
}
else
{
minute = m_minute;
}
if (m_time >= 24)
{
while (m_time >= 24)
{
m_time = m_time - 24;
}
time = m_time;
}
else
{
time = m_time;
}
}
Time Time::operator+(int min)
{
return Time(this->gettime(), this->getminute() + min);
}
int main()
{
int N;
cin >> N;
int time, min;
cin >> time >> min;
Time clock(time, min);
while (N--)
{
int bufMin;
cin >> bufMin;
clock = clock + bufMin;
//clock.showTime();
}
clock.showTime();
}
배운 점
작성하던 중 연산자 오버로딩을 써본 적이 없어서 operator+ 부분에서 좀 막혔다.
Time Time::operator+(int min)
{
return Time(this.gettime(), this.getminute() + min);
}
this에서 오류가 발생해서 어디가 오류인가 하였는데 문제는 . (멤버)연산자였다.
아래와 같이 바꾸어 주었더니 해결되었다.
Time Time::operator+(int min)
{
return Time(this->gettime(), this->getminute() + min);
}
이를 통해, 객체를 생성하지 않은 단계에서는 -> 를 통해 접근하는 것이 좋다는 것을 알게 되었다.
느낀 점
쉬운 문제였으나, 이를 새로 배운 것으로 적용해서 한다는 것에 큰 의의를 느꼈다. 앞으로는 이러한 방법을 시간 때문에 쓰지 못할지 모르겠지만, 이렇게 여러 곳에 적용하는 것이 개발자의 미덕 아닐까.
어려웠던 점
오랜만에 시간 관련한 문제를 짜다 보니 로직에 대해 사소한 실수가 있었다.
그 문제란 시간을 계산할 때 24 이상의 숫자라면 -24를 해주어야 하는데 /24를 해준 것.
예제 입력이 1000인 시점에서 -24만 처리해도 충분하다는 것도 뒤늦게 깨달아서 아쉬웠다.
'코딩 공부 > TIL' 카테고리의 다른 글
개발자의 글쓰기 (0) | 2023.11.07 |
---|---|
NHN 코딩테스트 후기 (0) | 2023.08.12 |
[알고리즘]정렬 (0) | 2023.07.15 |
코딩 습관 들이기 (0) | 2023.06.27 |
파이썬의 오사오입 - [백준 4434번 평균은 넘겠지] (0) | 2023.06.21 |