어떤 정신 나간 녀석네이버 지식인에 코딩 질문을 올렸다.

문제 수준이 좀 애매했다 싶더니 역시 모 회사 입사 테스트 문제라고 한다.


이제 시간도 좀 지났으니 데드라인도 지났을 것이라 판단해서, 그간 작성해본 풀이를 공개함…



1. 파스칼의 삼각형의 합


사실, 파스칼의 삼각형의 합은 간단한 일반식이 나와있다.


sum = 2^n-1


그런데, 이런 식으로 만들라는 얘긴 아닌 것 같다. ㅋ


#include <stdio.h>
#include <stdlib.h>

int *makeNewRaw(int *oldRaw, int oldLen)
{
    int *ret;
    if (oldLen < 1) {
        ret = new int[1];
        ret[0] = 1;
        return ret;
    }

    ret = new int[oldLen + 1];
    for (int i = 1; i < oldLen; i++) {
        ret[i] = oldRaw[i - 1] + oldRaw[i];
    }
    ret[0] = ret[oldLen] = 1;

    delete oldRaw;
    return ret;
}

int sumOfRaw(int *raw, int len)
{
    int ret = 0;
    for (int i = 0; i < len; i++) {
        ret += raw[i];
    }

    return ret;
}

const int height = 10;

int main(int argc, char* argv[])
{
    printf("-= sum of pascal's triangle(h=%d) =-\n", height);
    int *raw = NULL;
    int sum = 0;
    for (int i = 0; i < height; i++) {
        raw = makeNewRaw(raw, i);
        sum += sumOfRaw(raw, i + 1);
    }
    delete raw;

    printf("sum = %d\n", sum);
    return 0;
}


워낙 기본적인 코드라 별도의 설명은 필요 없고, 결과는 아래와 같다.


-= sum of pascal's triangle(h=10) =-
sum = 1023


당연한 얘기지만, 위에 적은 일반식의 결과와 동일하다.


sum = 2^{10}-1 = 1023



2. ASCII 문자열의 xor과 합


이건 그냥 C/C++ 언어를 쓸 줄 아는가를 묻는 문제다.

틀리면 그냥 이 바닥 진입 금지.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char str[] = "Hello world!"

int main(int argc, char* argv[])
{
    printf("-= xor and sum of str \"%s\" =-\n", str);

    int len = strlen(str);

    unsigned char xor = 0;
    unsigned int sum = 0;
    for (int i = 0; i < len; i++) {
        xor ^= (unsigned char)str[i];
        sum += (unsigned int)str[i];
    }

    sum |= (xor << 24);
    printf("result = %08x\n", sum);
    return 0;
}


결과는 아래와 같다.


-= xor and sum of str "Hello world!" =-
result = 2100045d



+ Recent posts