FourBoxes 문제풀기.
직사각형네개의 좌표로 부터 겹쳐있을지도 모를 면적총합구하기. [Python]으로 [yong27]이 푼 이야기. [FourBoxes.py]
이런 집에서 다시보니 세개이상의 사각형이 겹쳐있을때에 대해 고려하지 못했다. 세개면 그런대로 해보겠는데, 네개면 그 조합의 수가 넘 많아진다. 으... 그거생각하다 머리 불나는줄 알았다. 만일 사각형이 대여섯개된다면 그땐 어찌되는가... 그럴순없다. 그렇다고 이 문제가 어려워지는건아닐테니... 하마터면 포기할뻔했다. 정말어렵다. 이미올라선 계단을 다시내려올순없고... 애간장만타더라...
결국은 계단을 내려오기로... 샤워하며 단위사각형1짜리로 쪼갠다음에 걔네들 더하면 되겠다 싶어서 그렇게 했다. 연산자중복 add의 사용은 절묘했다. 클래스하나만으로 해결하다니... [FourBoxes2.py]. FourBoxesByYong27 페이지에 기록하다.
푸는 과정의 상세한 설명
1차시도
겹쳐져있는부분 빼내기전략으로 문제풀이시작. 처음에 생각을 충분히 하지않고 출발했다. 책상에서 카드 세장갖고 이리저리 돌려보곤, 걍 각 조합별로 겹쳐져있는 부분을 빼주면 되겠네 하고 시작했다. 왠걸... 다풀고났더니 답이 틀리더라. 그림그려보고 확인해본결과, 세개이상의 조합에 대해 고려하지 않았슴이 밝혀졌다.
문제에 대해 충분히 생각하지 못한것이 실수였다. 종이와 연필로 충분히 고민하고 풀어야한다.
(1시간, 일단 [FourBoxes.py]에 기록) --[yong27/2003-01]-10
2차시도
일단, 문제에 사각형수가 더 늘어날수 있을지 모른다는 생각을 했다. 그렇다면, 사각형늘어남에 따라 문제의 복잡성이 급격히 증가하리라는 예상에, 단위1짜리 cell로 만들고 이들을 더하면 된다고 생각. 물론 실수범위에서는 계산이 안되겠지만, 어짜피 실수는 오차를 내재하고 있는것이니 이렇게 푸는것도 괜찮을것임하고 시도.
add연산자중복의 사용은 절묘했다.
(30분, [FourBoxes2.py]에 기록) --[yong27/2003-01]-10
3차시도
FourBoxesDiscussion 를 보니, 이런, wrost case에 내 문제풀이법은 무진장 시간이 오래걸리겠구만 생각들다. 실제 테스트해보니 1시간이 지나도 풀리지 않음. 1차시도때 실패했던 것을 다시꺼내들고, 시도하기 시작.
세개이상겹쳐진부분의 면적계산을 위해선, 두개이상[Combination]과 여러개(multiple argument)의 교집합함수가 필요했다. 중간에 multiple argument 함수를 호출하는 부분에도 *가 필요하다는것을 잠시 잊어서 꽤 시간소모. 그러나, TestDrivenDevelopment로 차근차근 알아낼수 있었슴. 한시간이상 걸렸던 wrost case의 문제는 2초안에 풀림
이런 문제를 접하면, 문제의 spec을 정확히 인식하는 것이 중요하다. 문제에 분명 좌표1000이하라고 했고, 그렇다면, 1000 근처가 될수도 있는것이며, 그럴경우 해당 solution은 적합치 않음을 알수 있다.
(1시간, [FourBoxes.py]갱신) --[yong27/2003-01]-12