DFS 알고리즘 적록 색약 (백준)


런타임 에러..

예제는 정답이고 내가 임의로

입력해봐도 맞는 값이 나오는데

런타임 에러가 뜬다. 다른 사람들의

답을 참고해봐도 비슷한거같은데..

새벽이라 고칠 의욕도 안나고..






01. 초기화



02. 답 찾기




이번 DFS 알고리즘은 답을 찾는 데 꽤 오래 걸렸다.

단지 번호 붙이기와 상당히 유사한 문제였지만

두 가지의 답을 찾아야 했기 때문에 한번의 호출로

답을 찾아야 할지, 아니면 나누어서 찾아야 할지

고민을 많이 했던 것 같다.



아무튼 BFS 알고리즘은 많이 풀어보는게 답인거 같다.


C# 프로퍼티


프로퍼티(Property)는 속성이라는 의미를 지니고 있다.

멤버 변수를 속성이라고도 하는데 정보 은닉을 위해

private로 선언을 하면 get, set 메소드를 구현해야 한다.

이를 편리하게 해주는 것이 C#의 프로퍼티이다.




C# 프로퍼티는 간단하고 유연성있게 전용 필드의

값을 읽거나 쓰는 메커니즘을 제공한다.


1. set 접근자의 value키워드는 set 접근자가 할당하는 값을

정의하는 하나의 예약어이다. 따라서 set 안에서만 유효하다.

2. set 접근자만을 구현하면 쓰기 전용 , get 접근자만을 구현하면

읽기 전용이다. private으로도 구현 가능하다.

3. get , set, 내에서 각종 조건을 걸어줄 수도,

혹은 사전 조건, 사후 조건을 프로퍼티 내에서 구현할 수도 있다.

4. 주의 사항!

변수와 프로퍼티의 이름은 같아야 하고 대 소문자로 구분한다.




자동으로 구현된 프로퍼티

1. get , set 접근자 안에 아무것도 안쓰는 경우 프로퍼티 자체를 사용한다.

2. private로 접근 지정을 해줄 수 있어 유연하게 사용가능하다.


NVI idiom

(non-virtual-interface idiom)


템플릿 메서드 패턴을 C++ 식으로 구현한 것이다.

간단한 패턴이니 예제를 통해 바로 보도록 하겠다.



가상 함수는 반드시 private 멤버로 두어야 한다는

가상함수 은폐론이 기초가 된 기법이다.


가상합수를 private으로 두면 이를 상속하는 클래스는

재정의는 할 수 있지만 실제 호출은 할 수없다.

호출을 하려면 hpValue() 라는 함수를 거쳐야 하는데

이것이 바로 NVI 관용구의 핵심이다.

여기서 hpValue()는 가상함수의 랩퍼라고 부른다.




hpValue()를 호출하게 되면 가상함수를 호출하기 전에

사전 동작이 가능하며 가상함수 호출 후 사후 동작도 가능하다.

또한 재정의가 가능하기 때문에 구현의 자유가 있지만

이 함수를 호출하는 시점은 기본 클래스의 고유권한으로 묶인다.




꼭 가상함수가 private여야 한다는 것은 아니지만

protected나 public멤버라면 NVI를 적용하는 의미가 없다.

+ Recent posts