Code golf란
Golf scripting이라고도 불리는 Code golf는 알고리즘이 주어졌을 때 가장 짧은 코드로 구현하는 방법입니다. 이름은 가장 낮은 점수를 획득해야 하는 골프와 비슷하다고 하여 지어졌습니다. 숏 코딩이라고도 부르는데 대부분 실용적으로 사용하지는 않고, 알고리즘의 이해나 재미로 해보는 경우가 많습니다.
골프 쳐보기
C 언어에서 두 정수의 값을 입력받아서 합을 출력하는 코드는 다음과 같습니다.
#include <stdio.h>int main(){int a, b;scanf("%d%d", &a, &b);printf("%d", a + b);return 0;}
116byte
이제 이 코드를 가지고 골프를 쳐보겠습니다. 표준처럼 main 함수를 int main()
으로 정의했는데 사실 main()
으로만 정의해도 동작합니다. K&R이라고도 하는 옛날 코딩 스타일입니다. 그리고 return 0;
부분도 생략할 수 있습니다.
#include <stdio.h>main(){int a, b;scanf("%d%d", &a, &b);printf("%d", a + b);}
97byte
#include <stdio.h>
부분도 지울 수 있습니다. 컴파일 과정 중 링커가 C 라이브러리를 링크하기 때문입니다. 아마 gcc에서만 되는 것 같습니다.
main(){int a, b;scanf("%d%d", &a, &b);printf("%d", a + b);}
77byte
main 함수는 두 인수를 받는 함수입니다. main(int argc, char *argv[])
와 같은 꼴을 본 적이 있을 것입니다. 이 코드에서 선언한 변수도 두 개이기 때문에 이를 활용해 지웁니다.
main(a, b){scanf("%d%d", &a, &b);printf("%d", a + b);}
66byte
이제 가독성을 위해 사용한 공백과, 개행을 지웁니다.
main(a,b){scanf("%d%d",&a,&b);printf("%d",a+b);}
48byte
숏 코딩을 마쳤더니 116byte
에서 48byte
로 줄었습니다.
정리
간단한 문제를 예로 들었는데 다른 문제에는 더 많은 방법을 적용시킬 수 있습니다. 나름 프로그래밍을 하는 옛날 기법들도 알게 되고, 어두운 면도 알 수 있게 됩니다.
가독성, 표준, 유지보수를 포기하면 재미를 얻을 수 있습니다!