포스트

백준 27903 인생 문제 풀이

어제는 구데기컵이 개최된 날입니다. 구데기컵의 열성팬으로서 제대로 참여하고 싶었지만, 부대 내부 사정으로 컨테이너 사지방을 가지 못해 제대로 참여할 수 없었습니다.

27903번 인생 문제는 어제 열린 구데기컵에서 제가 유일하게 푼 문제입니다. 휴대폰으로 적당히 타이핑해도 풀 수 있으므로 시도해볼만 합니다.

풀어보기

코드 안에 백준 아이디를 구성하는 그 어떤 문자도 포함하면 안됩니다. 제 기준에선 아이디가 belline0124이므로 b, e, i, l, n, 0, 1, 2, 4를 코드에 사용하지 못하는 셈입니다.

1. 아이디에 포함된 문자 피하기

문자도 결국 일정한 정수로 표현할 수 있습니다. 제 경우 아래 수를 통해 문자를 구성할 수 있습니다.

문자문자
b98048
e101149
i105250
l108452
n110  

2. 아이디에 포함된 숫자 피하기

정수로 문자를 표현할 수 있지만, 피해야 하는 것은 정수 뿐이 아닙니다. 제 경우 0, 1, 2, 4 역시 코드에 사용할 수 없습니다.

어떻게 보면 치명적일 수도 있지만, 사실 모든 자연수는 다른 어떤 자연수의 사칙연산에서 이끌어낼 수 있으므로 큰 문제는 아닙니다.

1
2
3
4
5
#DEFINE ZERO 5 - 5
#DEFINE ONE  6 - 5
#DEFINE TWO  7 - 5
#DEFINE FOUR 9 - 5
#DEFINE TEN  5 * TWO

3. 난해한 프로그래밍 언어 사용하기

아이디에 따라 상황이 다르겠지만, 일반적으로 통상적인 print, printf, cout, echo 등은 사용하지 못할 것입니다. 그나마 고려할만한 선택지인 puts 역시 네 글자 중 하나라도 아이디에 포함되어있으면 사용하지 못합니다. 루비의 사전 정의 변수인 $> 정도는 되어야 사용할만 합니다.

지엽적인 경우지만 지금까지 논의한 전략도 0부터 9까지 모든 수가 아이디에 포함된 사용자는 사용하지 못합니다.

지금까지 이야기한 전략들은 사실 난해한 프로그래밍 언어에서 자주 사용하는 것들입니다. 만약 아희를 사용해본 적 있다면, 위 이야기를 쉽게 떠올릴 수 있을 것입니다.

난해한 프로그래밍 언어는 처음부터 읽기 어렵게 설계되었으므로 일반적인 영어/숫자 문자열을 사용하지 않습니다.

대표적으로 아희와 엄준식은 한국어 문자셋을 사용하고, 브레인퍽은 일부 특수문자만을 사용합니다. 즉 이 문제에서 모든 아이디에 대해 범용성을 갖는 언어는 이러한 난해한 프로그래밍 언어뿐입니다.

1
2
3
4
5
6
7
8
밤밣따빠밣밟따뿌
빠맣파빨받밤뚜뭏
돋밬탕빠맣붏두붇
볻뫃박발뚷투뭏붖
뫃도뫃희멓뭏뭏붘
뫃봌토범더벌뿌뚜
뽑뽀멓멓더벓뻐뚠
뽀덩벐멓뻐덕더벅

답안 구현

답안에는 가장 익숙한 난해한 프로그래밍 언어, 아희를 사용했습니다.

27903 아희 답안