개발

[Practice] Reverse and Add

TK 2007. 11. 20. 00:52
반응형
대학시절 '프로그래밍 언어론' 과목의 첫 과제가 "언어가 사고의 한계 지을 수 있을까?" 였다. 그땐 아마 언어로 표현하기 힘든 '사랑의 감정' 등이 있으므로 언어로 표현할 수 없는 것도 사고할 수 있기에 언어가 사고를 완전히 한계 지을 순 없다고 했던것으로 기억한다.

몇년간 직업으로 프로그래밍을 해오며 드는 생각은 '적어도 프로그래밍 언어 안에서는 언어가 사고를 한계 짓는다.'이다. 늘 사용하는 언어, 규칙, 설계에 익숙해져 능숙해 지긴 했지만 대신 문제를 접했을때 하는 사고는 이 틀을 벗어나기 힘들어 졌다.

우연찮은 기회에 참 오랜만에도 프로그래밍 문제를 풀어봤다. :
Reverse and Add

+ C 풀이
void reverse(const char *str, char *r_str, int start, int end)
{
    if(start > end)
        return;
    r_str[start] = str[end];
    r_str[end] = str[start];
    reverse(str, r_str, ++start, --end);
}

void func(int x, int cnt)
{
    char str[100], r_str[100];
    sprintf(str, "%d", x);
    r_str[strlen(str)] = 0;
    reverse(str, r_str, 0, strlen(str)-1);

    if(!strcmp(str, r_str)) {
        printf("%d:%s\n", cnt, str);
        return;
    }
    func(atoi(str) + atoi(r_str), ++cnt);
}

이런..그다지 깨끗하지 않은 코드가 나와 버렸다. 잠도 오고, 내일 출근해야 하니 이만..
(이클립스는 왜 말썽 ㅡㅜ)

+ C++ 풀이
void func(int x)
{
    ostringstream toa;
    toa << x;
    string str(toa.str());
    string rstr(str.rbegin(), str.rend());
    if(str != rstr)
        func(atoi(str.c_str())+atoi(rstr.c_str()));
}
대안언어 축제에서 위 문제를 여러가지 언어로 풀이한 것이 여기 있다. 언어만 다르지 해결 방식이 유사한 풀이도 많지만 이해하기 힘든 몇몇 언어의(특히 J) 풀이 방법은 어떨지 정말 궁금하다.

반응형