최근 수정 시각 : 2023-09-13 11:11:57

코드 골프

숏코딩에서 넘어옴
1. 개요2. 전용 언어3. 여담

1. 개요

Code golf 또는 golf scripting. 가장 짧은 코드로 주어진 알고리즘을 구현하는 프로그래밍 방식. 골프 스크립팅 혹은 숏코딩으로도 불리며, 1999년 Perl에서 이 단어가 탄생했다. 공을 최소한 적게 쳐서 골을 넣어야 하는 골프와 비슷하다고 하여 그런 이름이 지어졌다고 한다.

최대한 코드를 단순화하는 것도 기본적으로 코드 골프와 같은 맥락이다. 가령 정수형 변수 하나를 선언하는 상황에서
#!syntax cpp
int value = 10;
위와 같은 선언문을
#!syntax cpp
int v=10;
이렇게 단순화하는 것. 이것을 변수 선언에 국한하지 않고 소스코드 전반에 걸쳐 극한으로 줄이고 줄여서 누가 더 짧고 메모리를 적게 쓰는지 경쟁하는 것이 코드 골프.

가독성이나[1] 데이터 절약 등의 특정 목적을 위해 일부 변수명이나 코드를 단순화하는 것은 흔하지만, 아예 소스코드 전반을 이런식으로 작성하는 것은 딱히 실용성이 없는데다 추후에 코드를 파악하는 것도 어려워 자충수가 될 수도 있다. 실제로 사용하는 경우는 거의 없고 사실상 재미를 위한 오락 내지 흑마법에 가깝다(...). 진짜로 팀에서 코드 골프하듯 구현하면 맞는다. 다만 코딩을 공부하는 초심자 단계에서는 숏코딩을 해보는게 유효한 경험이 될 수 있다. 최대한 깔끔하고 간결하면서도 효율적인 코드를 작성하는 법을 공부하는 것은 최적화 능력의 기반이 된다.

언어에 따라서 이름이 다르게 불리기도 하며, Perl Golf 같은 경우가 대표적이다. 특히 Perl은 이 분야의 원조인 만큼 특히 규모가 큰 편이다.

2. 전용 언어

코드 골프를 위해 만들어진 언어도 많은데, GolfScript나 FlogScript 같은 경우가 대표적이다. 최대한 코드 길이를 줄여야 하다 보니 난해한 프로그래밍 언어와도 어느 정도 통하는 편이고, 실제로 GolfScript는 공식 홈페이지에 난해한 프로그래밍 언어라고 명시해 두었다. 아래의 코드는 GolfScript로 소수점 아래 1000자리의 원주율을 출력한다(29 bytes).
#!syntax perl
6666,-2%{2+.2/@*\/10.3??2*+}*
 -> 31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989

입력 받은 수 N개의 합을 출력하는 문제의 경우, 다음과 같이 Golfscript 언어로 단 6 Byte만에 푸는 것이 가능하다.
#!syntax perl
~]{+}*

3. 여담

Baekjoon Online Judge에서는 각 문제의 모든 정답 코드를 바이트 크기 오름차순으로 정렬해주는 기능을 제공하여, 난이도가 낮은 문제들의 경우 치열한 코드 골프 경쟁이 이루어지는 것을 볼 수 있다.


[1] 혹은 의도적으로 가독성을 낮추는 난독화도 해당