파이썬 코드 골프
·2018.09.09 00:00
파이콘 2018의 다이아몬드 출력 문제를 코드 골프로 551자에서 237자까지 줄였다.
파이콘 2018에서 레블업이 진행한 코드 골프에 참여해, 문자 수를 최소화하는 방식으로 문제를 푼 과정을 정리한다. 코드 골프는 가장 짧은 코드로 알고리즘을 구현하는 경기로, 실제로 이를 위한 사이트와 책도 있을 만큼 하나의 놀이 문화로 자리 잡아 있다.
문제는 n개의 다이아몬드 크기를 입력받아, 가장 큰 크기인 max(s) 만큼의 정사각형 영역에 다이아몬드의 선만 *로 겹쳐 그리는 것이었다. 모든 다이아몬드의 크기가 같으면 하나만 보이도록 처리해야 했고, 각 줄은 마지막 * 뒤에도 오른쪽 공백까지 모두 채워야 했다.
처음에는 551자의 평이한 풀이로 시작했다. 큰 공백판을 만들고, 각 다이아몬드의 중심과 사분면 좌표를 계산해 *를 찍는 방식이었다.
이후 코드 골프식 최적화를 단계적으로 적용했다.
- 주석, 공백, 변수명, 들여쓰기를 최소화해 551자에서 289자로 축소
- 반복 사용 값을 변수로 빼고,
range와*를 짧은 이름으로 치환해 271자로 축소 int(n/2)를n//2로 바꾸고, 공백판 생성도 리스트 컴프리헨션으로 줄여 258자로 축소- 여러 문장을 한 줄로 붙여 최종적으로 237자까지 줄임
마지막에는 더 줄일 여지가 남아 있지만, 코드 골프의 핵심은 문제를 가장 단순한 방식으로 풀고 그다음에 극단적으로 압축하는 데 있다는 점을 강조한다. 회사에서는 쓰기 어려운 흑마술 같은 최적화지만, 컨퍼런스를 즐기는 또 다른 방식이자 개발자만의 놀이로서 충분히 매력적이라는 결론으로 마무리한다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.