오늘은 JavaScript 로 3문제를 풀었다. 하나는 어제 효율성을 통과 못했던 구명 보트를 다른 사람 풀이 참조 해서 풀었다. 탐욕은 그대로 바보같이 탐욕적으로 풀어야한다. 앞에 있는것만 보고 미래를 생각하지 않는 풀이법이다. 그 다음 문제는 단속 카메라를 풀었다. 이번에는 찐 탐욕적으로 당장 보이는 것 부터 처리를 해서 성공적으로 풀었다. 마지막으로 섬 연결하기를 풀었다. 이번에는 진심 바보처럼 탐욕적으로 풀기 위해서 README도 생략하고 풀었더니 실패했다. 너무 그리디하게 풀었더니 진심 바보처럼 풀었다.
문제를 푼 후에 NextStep 문익점 “2단계 문자열 계산기”를 따라 공부 할 겸 계산기를 만들었다. 객체 지향적으로 사고를 하면서 짰어야 했는데 결국엔 기능을 먼저 생각을 하면서 짜게 되었다. 물론 책임과 행동을 생각 하면서 짜는것도 좋지만 도메인 모델을 써서 구조적으로 짰어야 했다.
Feelings
그리디 푸는 방법은 미래를 안보고 당장 최선의 선택을 골라서 하는거다. 문제가 이 당장 최선의 선택이 모호하다는것. 어떤 사람이 한 기준으로 봤다면 다른 사람은 다른 기준으로 잡을 수 있어서 이건 너무 주관적이라서 뭔가 문제 푸는 것 보단 찍는 느낌이 더 든다.
계산기를 만들면서 객체지향적인 사고가 부족하다는것을 느꼈다.
Findings
그리디 풀이법은 당장 최선의 선택을 골라서 푸는것이다. 그러나 당장, 최선이 사람마다 기준이 달라서 제출자 마음대로 인게 많다.
리펙토링은 나중에 몰아서 하는게 아니라 당장 바로 하는게 리펙토링이다.
Future Action
그리디 문제는 너무 주관적인게 많고 뭔가 문제를 풀어도 문제 푼 느낌이 안들고 그냥 때려 맞췄다는 느낌이 크다. 이럴려고 문제 푸는게 아니니 다른 문제를 풀면서 알고리즘 실력을 향상하자.
객체지향적인 사고를 배우기 위해서 지금 하는 연습을 하고 있는데 나는 그러지 않았다. 그러므로 다음에는 더 오래 걸리더라도 처음 부터 객체 지향적으로 짤 수 있도록 하자.