CODE WITH GOLFSCRIPT

GolfScript 배우기

GolfScript는 코드를 최대한 짧게 쓰는 데 특화된 스택 기반 언어입니다. 값이 스택에 쌓이고, 연산자가 스택에서 값을 꺼내 계산한 뒤 결과를 다시 올립니다. 아래 내용을 따라가며 직접 문제에 적용해 보세요.

1. 스택이 핵심입니다

모든 값은 스택에 쌓입니다. 숫자나 문자열을 쓰면 스택에 올라가고, 연산자는 스택 위의 값들을 꺼내 계산합니다. 프로그램이 끝나면 스택에 남은 값이 모두 출력됩니다.

5 3 +8

5와 3을 스택에 올리고, +가 둘을 꺼내 더한 8을 올립니다. 끝에 8이 출력됩니다.

"Hello"Hello

문자열도 그대로 스택에 올라가 출력됩니다.

2. 입력 다루기

표준 입력 전체가 처음에 문자열 하나로 스택에 올라옵니다. 숫자로 계산하려면 ~ (eval) 로 평가해야 합니다.

~ 2 *42

입력이 "21"일 때: ~로 숫자 21로 만들고 2를 곱해 42.

~ 2 %1

입력이 "7"일 때: 7을 2로 나눈 나머지 1 (홀짝 판별에 활용).

3. 기본 연산자

기호설명
+더하기 (문자열/배열은 이어붙이기)
-빼기
*곱하기 (문자열/배열은 반복)
/나누기 (몫)
%나머지
~eval / 비트반전

4. 스택 조작

기호설명
.맨 위 값 복제
\위 두 값 자리 바꾸기(swap)
;맨 위 값 버리기
:변수에 저장 (예: :x)
5 :x; x x *25

:x로 5를 변수 x에 저장(;로 스택 정리), x를 두 번 올려 곱하면 25.

5. 배열과 범위

기호설명
,숫자 n → [0..n-1] 배열 / 배열 → 길이
[ ]배열 묶기
<비교 또는 앞부분 자르기
=같은지 비교 / 인덱스 접근
"hello" ,5

문자열에 , 를 쓰면 길이가 나옵니다.

6. 블록과 반복

{ } 로 묶은 코드 덩어리(블록)는 나중에 실행됩니다. 배열과 함께 쓰면 강력합니다:

기호설명
{}%map: 각 원소에 블록 적용
{}*fold: 누적 적용 (합/곱 등)
{}/each: 각 원소에 대해 실행
)1 더하기 (또는 배열 마지막 떼기)
(1 빼기 (또는 배열 첫 원소 떼기)
~ ) , { + } *5050

입력이 "100"일 때: 1부터 100까지의 합. )로 101, ,로 [0..100], {+}*로 모두 더함.

7. 문자열 테크닉

기호설명
"abc"-1%문자열 뒤집기
n줄바꿈 문자
*문자열 반복
"abc" -1 %cba

-1 스텝으로 거꾸로 훑어 뒤집습니다.

8. 골프 팁

  • 공백은 가능한 한 줄이세요. 숫자와 연산자 사이 외엔 대부분 생략 가능합니다.
  • 출력은 스택에 남은 값으로 자동 처리됩니다. print 를 따로 쓸 필요가 거의 없어요.
  • ~, ., \\ 같은 1글자 연산자를 적극 활용하세요.
  • 변수 저장보다 스택 조작이 더 짧은 경우가 많습니다.

이제 직접 풀어 볼까요?

단계별 학습으로 쉬운 문제부터 차근차근 도전하세요.