어떤 정신 나간 녀석이 네이버 지식인에 코딩 질문을 올렸다.
문제 수준이 좀 애매했다 싶더니 역시 모 회사 입사 테스트 문제라고 한다.
이제 시간도 좀 지났으니 데드라인도 지났을 것이라 판단해서, 그간 작성해본 풀이를 공개함…
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