일지
-
JUNGOL...190일지 2022. 6. 28. 23:23
Intermediate_Coder/그래프탐색-BFS/보물섬 문제 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 이동은 상하좌우로 이웃한 육지로만 가능하며, 한 칸 이동하는데 한 시간이 걸린다. 보물은 서로 간에 최단 거리로 이동하는데 있어 가장 긴 시간이 걸리는 육지 두 곳에 나뉘어 묻혀있다. 육지를 나타내는 두 곳 사이를 최단 거리로 이동하려면 같은 곳을 두 번 이상 지나가거나, 멀리 돌아가서는 안된다. 예를 들어 위와 같이 지도가 주어졌다면 보물은 아래 표시된 두 곳에 묻혀 있게 되고, 이 둘 사이의 최단 거리로 이동하는 시간은 8시간이 된다. 보물 지도..
-
JUNGOL...189일지 2022. 6. 28. 21:05
Intermediate_Coder/그래프탐색-BFS/보물섬 문제 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 이동은 상하좌우로 이웃한 육지로만 가능하며, 한 칸 이동하는데 한 시간이 걸린다. 보물은 서로 간에 최단 거리로 이동하는데 있어 가장 긴 시간이 걸리는 육지 두 곳에 나뉘어 묻혀있다. 육지를 나타내는 두 곳 사이를 최단 거리로 이동하려면 같은 곳을 두 번 이상 지나가거나, 멀리 돌아가서는 안된다. 예를 들어 위와 같이 지도가 주어졌다면 보물은 아래 표시된 두 곳에 묻혀 있게 되고, 이 둘 사이의 최단 거리로 이동하는 시간은 8시간이 된다. 보물 지도..
-
JUNGOL...188일지 2022. 6. 27. 08:21
Intermediate_Coder/그래프탐색-BFS/보물섬 문제 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 이동은 상하좌우로 이웃한 육지로만 가능하며, 한 칸 이동하는데 한 시간이 걸린다. 보물은 서로 간에 최단 거리로 이동하는데 있어 가장 긴 시간이 걸리는 육지 두 곳에 나뉘어 묻혀있다. 육지를 나타내는 두 곳 사이를 최단 거리로 이동하려면 같은 곳을 두 번 이상 지나가거나, 멀리 돌아가서는 안된다. 예를 들어 위와 같이 지도가 주어졌다면 보물은 아래 표시된 두 곳에 묻혀 있게 되고, 이 둘 사이의 최단 거리로 이동하는 시간은 8시간이 된다. 보물 지도..
-
Effective C++...21일지 2022. 6. 23. 07:38
데이터 멤버가 선언될 곳은 private 영역임을 명심하자 멤버 변수를 private으로 사용할 때의 장점 세 가지의 장점이 존재한다. 문법적 일관성 어떤 건 멤버 변수를 직접 호출하고 어떤 건 함수를 사용하는 대신 일괄적으로 함수를 사용하도록 할 수 있다. 접근성의 정교한 제어 가능 읽기 전용, 읽기 쓰기 모두 가능, 쓰기 전용 등으로 접근 권한을 제어할 수 있다. 캡슐화를 통한 코드 제어 다른 코드에 영향을 주지 않고 내부 구조를 수정할 수 있다. 멤버 변수는 protected도 안 된다 public과 달리 protected는 조금 더 안전하다고 생각하지만 해당 변수를 삭제하는 상황을 가정하면 그렇지도 않다는 것을 알 수 있다. public 변수를 삭제하면 해당 변수를 사용하는 모든 코드에 영향을 주..
-
Effective C++...20일지 2022. 6. 22. 07:55
함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자 참조자를 반환할 때의 문제점 참조자를 반환하는 경우 지역 변수를 반환하거나 힙에 객체를 할당한 뒤 반환하려고 할 수 있으나, 이 두 방법 모두 문제가 있다. 지역 변수 참조자 반환 지역 변수는 범위를 벗어나면 소멸된다. 따라서 함수를 벗어나 반환된 참조자는 의미 없는 정보가 된다. 힙 할당 객체 참조자 반환 힙에 할당된 객체는 반드시 delete를 호출해 줘야 하나 사용자가 적절하게 사용할지 보장할 수 없다. 따라서 새로운 객체를 반환하는 게 옳다. inline const Rational operator*(const Rational& lhs, const Rational& rhs) { return Rational(lhs.n & rhs.n, ..
-
Effective C++...19일지 2022. 6. 21. 07:58
'값에 의한 전달'보다는 '상수 객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다 값에 의한 전달이 문제가 되는 이유 기본적으로 값에 의한 전달은 복사 생성자가 호출되게 된다. 그런데 상속받은 클래스이고 내부에 멤버 변수가 많다면 그만큼 복사 생성 호출이 늘어나게 된다. 다음의 경우에 함수 호출 한 번에 생성자, 소멸자가 각각 여섯 번씩 호출된다. class Person { private: std::string name; std::string address; }; class Student : public Person { private: std::string schoolName; std::string schoolAddress; }; bool validateStudent(Student s); Stud..
-
Effective C++...18일지 2022. 6. 20. 08:11
클래스 설계는 타입 설계와 똑같이 취급하자 클래스 설계 시의 질문거리 C++에서 새로운 클래스를 정의하는 것은 새로운 타입을 정의하는 것과 같다. 따라서 좋은 클래스를 만들기 위해서는 좋은 타입을 만드는 것 만큼의 고민과 노력이 필요하다. 새로 정의한 타입의 객체 생성 및 소멸은 어떻게 이루어져야 하는가? 클래스 생성자 및 소멸자의 설계 객체 초기화는 객체 대입과 어떻게 달라야 하는가? 두 함수의 동작 및 차이점 결정 새로운 타입으로 만든 객체가 값에 의해 전달되는 경우에 어떤 의미를 줄 것인가? 복사 생성자 구현 새로운 타입이 가질 수 있는 적법한 값에 대한 제약은 무엇으로 잡을 것인가? 멤버 변수 중 어떤 값이 유효해야 하는지 결정 기존의 클래스 상속 계통망에 맞출 것인가? 가상 함수로 만들 것인지 ..
-
Effective C++...17일지 2022. 6. 18. 14:49
인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 새로운 타입을 만들어 실수 막기 인터페이스에서 요구하는 특정한 타입이 존재하는 경우 사용자가 실수하더라도 쉽게 그 실수를 인지할 수 있게 된다. class Date { public: Date(int month, int day, int year); // 단순히 int를 사용하는 경우 }; Date(13, 2, 2022); // 입력 순서를 틀리거나 Date(2, 40, 2022); // 존재하지 않는 값을 넘기게 될 수 있다. 위와 같은 경우를 다음과 같이 년, 월, 일을 나타내는 타입을 도입하면 막을 수 있게 된다. struct Day; struct Month; struct Year; class Date { public: Date(con..