둠치킨
코딩하는 둠치킨
둠치킨

블로그 메뉴

  • 홈
  • 분류 전체보기 (223)
    • BOJ (176)
      • 스택 (14)
      • 큐 (5)
      • 덱 (4)
      • 그래프 (31)
      • 배열 (8)
      • 재귀 (12)
      • 브루트 포스 (2)
      • 그리디 알고리즘 (7)
      • 다이내믹 프로그래밍 (14)
      • 백트래킹 (24)
      • 기하학 (4)
      • 트리 (4)
      • 구현 (14)
      • 수학 (3)
      • 맵 (1)
      • 다익스트라 (2)
      • 누적합 (5)
      • 유니온 파인드 (1)
      • 분할 정복 (2)
    • 자료구조 (14)
      • 스택 (3)
      • 큐 (5)
      • 덱 (2)
      • 그래프 (1)
      • 트리 (1)
      • 힙 (1)
      • 정렬 (1)
    • C++ (11)
      • 모두의코드 (2)
      • Effective C++ (3)
      • C++ STL (6)
    • 컴파일러 (1)
    • OS (17)
    • 컴퓨터 구조 (2)
    • Unreal Engine 5 (2)

공지사항

전체 방문자
오늘
어제

인기 글

최근 글

태그

  • BFS
  • boj
  • Bruteforce
  • C
  • C++
  • C++ STL
  • Cache Memory
  • deadlock
  • DFS
  • Effective C++
  • java
  • Mutex
  • next_permutation
  • os
  • Process
  • rotate
  • semaphore
  • spin lock
  • STL
  • STL C++
hELLO · Designed By 정상우.
둠치킨

코딩하는 둠치킨

C++/모두의코드

씹어먹는 C++ - <4 - 1. 이 세상은 객체로 이루어져 있다>

2022. 1. 15. 19:37

생각 해볼 문제(modoocode C++)

문제 1

여러분은 아래와 같은 Date 클래스를 디자인 하려고 합니다. SetDate 는 말그대로 Date 함수 내부를 초기화 하는 것이고 AddDay, AddMonth, AddYear 는 일, 월, 년을 원하는 만큼 더하게 됩니다. 한 가지 주의할 점은 만일 2012 년 2 월 28 일에 3 일을 더하면 2012 년 2 월 31 일이 되는 것이 아니라 2012 년 3 월 2 일이 되겠지요? (난이도 : 上)

class Date {
  int year_;
  int month_;  // 1 부터 12 까지.
  int day_;    // 1 부터 31 까지.

 public:
  void SetDate(int year, int month, int date);
  void AddDay(int inc);
  void AddMonth(int inc);
  void AddYear(int inc);

  void ShowDate();
};

 

풀이

문제가 요구하는 것은 간단하게 그냥 멤버함수들을 만들어서 날짜 계산하는 프로그램을 만들면 되는 것이지만, 나는 선행학습을 했기 때문에 좀 더 추가해서 Date date; date.setDate(2022,01,15); 처럼 객체 생성 후 초기화가 아닌 Date date(2022,01,15);처럼 객체의 생성과 동시에 초기화를 추가했다. /* ~ */ 부분이 객체를 생성 후 초기화하는 코드다.

#include <iostream>
using namespace std;

class Date
{
private:
	int year, month, day;
public:
	int getMonthsMaxDay(int year, int month) const //cosnt 멤버 함수
	{
		int months[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
		if(month==2)
		{
			if((year%4)==0&&(year%100)==0)
			{
				months[1]=29;
			}
		}
	return months[month-1];
	}
	
	/* void setDate(int year, int month, int day)
	{
		if(getMonthsMaxDay(year,month)<day||month>12)
		{
			cout<<"Error! Invalid Date!"<<endl;
			return;
		}
		
		year=year;
		month=month;
		day=day;
		cout<<"Date Set!"<<endl;
	}*/
	
	Date(int _year, int _month, int _day): year(_year),month(_month),day(_day)
	{
		if(getMonthsMaxDay(year,month)<day||month>12)
		{
			cout<<"Error! Invalid Date!"<<endl;
			return;
		}
		cout<<"Date Set!"<<endl;
	}
	
	void addDay(int add)
	{
		day+=add-1;
		while(day>getMonthsMaxDay(year,month))
		{
			day-=getMonthsMaxDay(year,month);
			addMonth(1);
		}
	}
	void addMonth(int add)
	{
		month+=add;
		while(month>12)
		{
			month-=12;
			addYear(1);
		}
	}
	void addYear(int add)
	{
		year+=add;
	}
	void showDate()
	{
		cout<<"Now Date() : "<<year<<"년 "<<month<<"월 "<<day<<"일"<<endl;
	}
};

int main(void)
{
	/*Date date; 
	date.setDate(2022,01,15);*/
	Date date(2022,01,15);
	date.addDay(299);
	date.showDate();
}

출력 화면

Date Set!
Now Date() : 2022년 11월 9일 //찐전역일...ㅠㅠㅠ

문제가 원하는 답

int main(void)
{
	Date date(2012,02,28);
	date.addDay(3);
	date.showDate();
}

출력 화면

Date Set!
Now Date() : 2012년 3월 2일
저작자표시 (새창열림)

'C++ > 모두의코드' 카테고리의 다른 글

씹어먹는 C++ - <4 - 2. 클래스의 세계로 오신 것을 환영합니다. (함수의 오버로딩, 생성자)>  (0) 2022.01.16
    'C++/모두의코드' 카테고리의 다른 글
    • 씹어먹는 C++ - <4 - 2. 클래스의 세계로 오신 것을 환영합니다. (함수의 오버로딩, 생성자)>
    둠치킨
    둠치킨
    코딩 공부를 위한 코딩 블로그 기록 일기

    티스토리툴바