1. 코드 골프란?

**코드 골프(code golf)**는 어떤 문제를 가장 짧은 코드로 구현하기 위해 경쟁하는 것을 말합니다.

가독성, 시간복잡도를 모두 제쳐두고 오직 더 짧은 코드만을 위해 대결합니다.

실제 골프 또한 주어진 코스를 가장 적은 타격 횟수로 완주해야 한다는 점이 비슷하여 이런 이름이 붙여졌습니다.


2. 코드 골프 맛보기

간단한 문제로 코드 골프를 한번 체험해봅시다.

출처: https://www.acmicpc.net/problem/18108

출처: https://www.acmicpc.net/problem/18108

백준 18108번 문제입니다.

입력값을 정수로 받은 뒤, 543을 빼고 출력하면 되는 간단한 문제네요.

우선 C언어로 이 문제를 한 번 풀어봅시다.

#include <stdio.h>

int main() {
	int a;
	scanf("%d", &a);
	printf("%d", a-543);
}

불필요하게 필요한 문구가 많아 82byte나 나오는 모습입니다.

같은 코드를 파이썬으로 작성해 볼까요?

a = int(input())
print(a-543)

같은 로직의 C언어 코드에 비해 훨씬 줄어든 29byte가 되었습니다.

이제 코드를 더 줄여봅시다.

print(int(input())-543)

변수 a를 생략하면 무려 23byte까지 줄였습니다!

파이썬도 훌륭하지만, 코드 골프의 최강자는 따로 있습니다.

바로 오늘의 주인공인 golfscript입니다.

이름에서부터 알 수 있듯이 오직 코드 골프만을 위해 태어난 언어입니다.

설명에 들어가기 전, 같은 문제를 golfscript로 푼 코드를 봅시다.

~543-

같은 문제를 단 5byte만에 풀어내는 위엄을 보여줍니다.

처음 작성한 C언어 코드에 비해 16.4배, python 코드에 비해 4.6배나 짧은 코드입니다.

이거.. 정말 재밌어 보이는데요?

golfscript, 한번 해봅시다.


3. golfscript 시작하기

golfscript를 실행할 준비를 해봅시다.

  1. Ruby 설치하기

Download Ruby

golfscript는 Ruby 기반으로 제작된 golfscript 전용 인터프리터를 이용해 실행됩니다.

따라서 Ruby를 우선 설치해야 합니다.

공식 사이트나 Homebrew를 이용하여 Ruby를 설치해 줍니다.

brew install ruby
  1. golfscript 인터프리터 설치

스크린샷 2023-04-30 오후 2.29.12.png

golfscript 공식 repo(https://github.com/darrenks/golfscript)에 들어가서 clone을 받습니다.

여기서 golfscript.rb가 인터프리터입니다.

  1. golfscript 실행

이제 모든 준비가 끝났으니, 방금 clone 받은 폴더 안으로 들어가서 코드를 작성하고 실행하면 됩니다.

기본적인 실행 방법은 다음과 같습니다.

echo <입력> | ruby golfscript.rb <golfscript 코드가 적힌 파일명>

스크린샷 2023-04-30 오후 3.02.31.png

예시로 풀어본 문제의 예시를 입력해 보면, 잘 실행됨을 확인할 수 있습니다.


4. golfscript의 기본 개념

후위표기법과 스택

golfscript는 스택 구조의 언어입니다.

또한, 후위 표기법(Postfix Notation)을 사용해 연산을 진행합니다.

후위 표기법을 쉽게 익히기 위해 사칙연산을 통해 연습해 봅시다.

1 3 + 2 *

위의 5가지 문자가 스택으로 왼쪽부터 들어온다고 생각해 봅시다.

숫자가 들어오면 그대로 스택에 쌓이고, 연산자가 들어오는 경우는 스택의 top에 있는 2개 원소를 연산합니다.

stack       input
            1
1           3
1 3         +
4           2
4 2         *
8

후위 표기법은 이런 식으로 연산이 진행됩니다.

golfscript도 이와 같은 방식으로 작동합니다!


5. golfscript의 문법

golfscript는 한 연산자에 매우 많은 기능들을 넣어놨습니다.

다 정리하기에는 무리가 있으니 몇 가지 연산자 예시만 살펴봅시다.

  1. ~
  1. \\
  1. p

더 자세한 내용은 아래 공식 사이트에서 학습해 보세요.

언어와 정말 잘 맞는 홈페이지 디자인

언어와 정말 잘 맞는 홈페이지 디자인

GolfScript


6. 마치며

개발에서 가장 중요한 것은 보기 좋은 코드, 효율 좋은 코드입니다.

따라서 개발할 때 무분별한 코드 골프는 피해야 합니다.

하지만 재밌으면 된 거 아닐까요?

이번 글을 통해 지루한 코딩 생활 중 잠시 쉬어갈 수 있는 코드 골프를 즐겨보셨으면 좋겠습니다.