느낌으로 얻어버린 CS를 뜯어고치느라 머릿속이 과열되고 있지만 감사한 마음으로 공부하고있다.
결혼준비 하면서 수학공부하면서 CS 공부하면서 C++과 유니티를 하면서 복습해야되는데 결혼준비와 아픔을 핑계로 복습은 거리가 멀어지는 듯 하다. 아직도 몸이 힘들고, 트라우마로 인해서 뇌가 굳어있다. 말 그대로 아직 정상적인, 단순한 사고도 하기 어렵다. 그래도 치료도 꾸준히 받으면서, 악바리로 열심히 하려고 최선을 다하고 있다. 이렇게 직장에서의 트라우마를 이겨낼 수 있을거라 스스로를 믿고 있다. 지금이 재밌다. 명확한 답을 들을 수 있어서..
업무도 그렇게 명확한 답을 들었다면 참 좋았을텐데
게임인재원에서 시험을 보았다. 점수는 처참했지만 그래도 좋았다. 앞으로 채워나가면 되는 거니까.
1. 출력 결과 : 컴파일 오류
괄호 안의 정의를 주석처리해도 오류 발생, 괄호 외의 정의 중 하나만 지우면 출력 됨
#include <iostream>
int main()
{
int n = 0;
std::cout << n << std::endl;
{
int n = 1;
std::cout << n << std::endl;
}
short n = 2;
std::cout << n << std::endl;
return 0;
}
2. 출력값 : 10
sum을 출력할 때는 5가 아닌 4부터 계산되기 시작한다.
#include <iostream>
int main()
{
int count = 5;
int sum = 0;
while (count--)
{
sum += count;
}
std::cout << sum << std::endl;
return 0;
}
3. 출력값 : 2
>>= 연산자를 어떻게 봐야하나 고민했다. +=와 같은 맥락이다. 비트 연산으로 밀어낸 값을 저장하는 것. 추측이므로 추후 확인이 필요하다.(확답을 얻으면 수정할 것)
#include <iostream>
int main()
{
int count = 4;
int n = 0;
while (count >>= 1)
{
++n;
}
std::cout << n << std::endl;
return 0;
}
4. 코드 결과는 ? gVal is false 출력
gVal이 메인 밖에서 선언된다. 반 학우들 말에 의하면 값을 저렇게 지정하지 않으면 기본적으로 변수에 0이 할당된다고 했다.
그런데 생각해보면 gVal에 1이 할당 된 것도 아니고, 정확한 값을 지정하여 정의한것도 아닌데 true가 출력될 리가 없다. 근데 이제 컴파일 에러를 생각했던 이유는 전에 단순 로직에서 변수에 값을 정의하지 않고 디버깅 했을 때 오류가 뜬 적이 있어서다. 내가 잘못했겠지뭐.. 그래서 쓰레기 값이 gVal에 할당될 것이기 때문에 에러가 날거라고 생각했다.
#include <iostream>
int gVal;
int main()
{
if (gVal)
{
std::cout << "gVal is true" << std::endl;
}
else
{
std::cout << "gVal is false" << std::endl;
}
return 0;
}
5. 출력 결과 : infinite loop
printf로 출력할 때 -- 연산자를 쓰면 계산값이 출력되는건 알고 있지만 변수 값이 업데이트가 나 한번도 해본적이 없어서 몰랐다. 그런데 n이 0이 될 수 있을거라 생각하면서 홀수값만 출력될 것이라 생각하는 이 모순은 어떤 발상인가..멍청해라
#include <stdio.h>
int main()
{
for (int n = 9; n != 0; n--)
{
printf("n = %d", n--);
}
return 0;
}
6.출력 결과 : 참 : 1
논리연산자인건 알고 있었다. ||는 왼쪽이 0이 아닌 값이면 오른쪽을 평가하지 않고 전체 표현식을 참으로 인식한다고 말씀하셨던 걸 이제서야 기억해내는 나는 일단 비교하고 보았다. 아직도 인간의 뇌로 판별한 것. a가 이미 1로 참이기 때문에 참이 출력되고, ++b는 연산 조차 안한다.
너 함정에 빠져랏! 했을 때 옙! 하고 빠지는 나라고 비유할 수 있겠다.
#include <iostream>
int main()
{
int a = 1;
int b = 1;
if (a || ++b)
{
std::cout << "참 : " << b << std::endl;
}
else
{
std::cout << "거짓 : " << b << std::endl;
}
return 0;
}
7. 출력 결과 : 참 : 2
&&는 양쪽 다 참이어야 괄호 안 연산으로 들어가기 때문에 참이고, 2가 출
#include <iostream>
int main()
{
int a = 1;
int b = 1;
if (a && ++b)
{
std::cout << "참 : " << b << std::endl;
}
else
{
std::cout << "거짓 : " << b << std::endl;
}
return 0;
}
8. 출력 결과 : 3 2
왜그랬을까..? XOR 연산자인 것은 알았다. 비트연산자이기 때문에 저 값을 이진수로 바꾸어 비교해야했다. 십진수로만 생각해버린 나는 바보가 맞다. 이제 알았으니까 두번 실수하면 진짜 멍청한거다. (넵 맞습니다)
#include <stdio.h>
void Func(int*x, int* y)
{
if(x == y) return;
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
int main()
{
int x = 2;
int y = 3;
Func(&x, &y);
printf("%d %d\n", x, y);
return 0;
}
9. 출력 결과 : 3 6
이중 배열 문제이다. 아마 복잡해지면 못풀겠지? 아니 풀어야한다.
#include <stdio.h>
int main()
{
int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
printf("%d %d\n", arr[1][0], arr[2][1]);
return 0;
}
10. 출력 결과 : 12, 50
strlen은 \n 을 만났을 때 카운팅이 종료된다. sizeof()는 위에 50개로 선언해놔서 50으로 출력된다. 만약 "Hello World!"에 sizeof 연산을 하면 null문자를 포함한 갯수를 리턴한다.
#include <stdio.h>
#include <string.h>
int main()
{
const char str[50] = "Hello World!";
int nLen = strlen(str);
int nSize = sizeof(str);
printf("%d, %d\n", nLen, nSize);
return 0;
}
'알고리즘 풀이' 카테고리의 다른 글
블록 탑 쌓기 위한 최소 에너지 구하기 C++ (0) | 2025.03.30 |
---|