이건 내 풀이를 모아놓은 깃헙 레포.
언어는 깃헙 언어 통계에서도 보이듯, F#, C++, 어셈블리, text(얘는 통계 안잡힘)만 사용함.
난 백준은 취미로 하는 거라 코테마냥 시간 재면서 하는 것도 아니고, 그냥 내 생각에 재밌어보이는 문제 위주로 푼거임.
여하튼 여태 F#으로 백준 하면서 느낀 점은
1. 시간 제한이 빡센 문제가 몇몇 있지만 이건 함수형 때문이 아니라 닷넷이라 그런 듯함. 같은 닷넷인 C#도 백준에선 마이너한 언어라 정확한 비교는 어려워서 보통 파이썬 통과자랑 비교하는데, 통과 시간이 비슷한 경우가 많음.
2. 생각없이 리스트 만들면 메모리가 터지는 경우가 많다. 이거 때문에 iter, map, fold 등등을 쓰고 싶은데 반복문으로 우회한게 좀 많음.
3. mutable을 많이 쓰게 됨. 이론적으론 mutable없이 가능하지만 메모리 제한 때문에 안되거나 많이 돌아가는 느낌이라 mutable을 상당히 많이 쓸 수 밖에 없어짐.
4. 문제 유형에 따라 함수형 패러다임이 가능한 경우도 있고, 불가능한 경우도 있다. DP가 특히 함수형으로 최적화하는게 불가능하거나 힘든 것 같음. 간단한 DP면 상관 없는데, 복잡한 케이스일수록 함수형으로 어떻게 짜야 할 지 잘 모르겠어서 그냥 if/for 도배해놓게 됨. 반대로 수학이나 자료구조 관련 문제는 함수형 스타일의 최적화/추상화가 가능해서 함수형으로 짜기 편함. 이건 내 능력이 부족한 것일 수도 있음.
사실 백준에서 하스켈을 지원했으면 좀 더 머리를 굴려봤을텐데 F#으로 짜느라 모로 가도 서울로만 가면 된다는 느낌으로 짠게 많긴 함.
만약에 하스켈로 짰으면 DP문제들도 어떻게든 함수형으로 통과시켜보려고 시도는 해봤을 듯.
백준에서 마이너한 언어로 풀다 보면 시간이랑 메모리 제한 때문에 사실상 못 푸는 경우도 종종 나와서
그런 경우에 꼭 풀고 싶다면 C++을 쓰는데, 그 빠듯한 시간 제한이 함수형 때문인 것 같지는 않다는 얘기임.
말이 좀 애매한거 같은데... 함수형 언어로 시간 난제에 부딪혔을때 반복문이나 mutable 등 함수형과 상극인 도구들을 사용한다면 함수형이라 느린거 맞는거 아님?
이게 하스켈마냥 native 언어로 짜서 얻은 결과면 함수형이라서 느리다가 맞겠는데, F#은 닷넷 위에서 돌아가는 언어고, 내가 코드를 함수형으로 짰더라도 얘네는 결국 IL로 번역이 되어서 C#으로 짠거랑 동일한 결과물이 나올거임. 그래서 가상머신 때문에 느린 것 같다고 생각하는데 비교할만한 다른 샘플이 없어서 확실치는 않긴 함
근데 mutable 쓸거면 굳이 함수형하는 의미가 없지않음?
어디에 의미를 두느냐에 따라 다르다고 생각함. 코드 전체를 엄격한 함수형으로 짜야겠다면 mutable을 용납해서는 안되지. 그런데 난 함수형이 더 나은 곳은 함수형으로 짜고, 아닌 곳은 절차지향 혹은 oop로 짜는게 더 낫다고 생각해서 mutable 쓰는데에 딱히 거부감은 없었음. 그리고 F#은 이런 식으로 멀티 패러다임을 쓰기에 적합한 언어이기도 함.
사실 수학 함수처럼 입력값이 같으면 출력값이 항상 같도록 구현만하면 호출하는 입장에서는 로컬 mutable을 쓴건 상관없지
절차지향이나 객체지향에 비해 함수형으로 풀 때 확실히 궁합이 잘 맞는 일부 문제들이 있긴 함. 굳이 어느 게 낫다고 우열을 가리기보단 문제를 풀어나가는 하나의 도구 개념으로 봐야지 여기서 가끔 보이는 함슬람마냥 함수형 병 걸리는 거도 별로 안 좋음
ㅎㄷㄷ 대단하시네...
파이썬으로 함수형은 어떠신가요...
어떻냐는게 무슨 의미인지 모르겠는데, 파이썬으로 함수형을 입문하는걸 얘기하는거면 글쎄... 개인적으로 그리 좋아보이진 않음. 내가 하는건 어떻냐는 의미면 굳이? 개인적으로 파이썬이란 언어를 그리 좋아하지 않는데다가 굳이 파이썬으로 함수형을 할 바엔 다른 좋은 선택지가 많아서 이것도 별로임.
백준은 하스켈을 도입해라
와 미친..