
2026 - 04 - 24
오늘의 학습
- C
- UnrealEngine
코드카타
오늘도 코드카타에서 본 문제들 중 헷갈렸던 문제들에 대해 정리해볼게요! (블루프린트보다 코드카타가 더 재밌어졌... 아 안돼..!)
이 문제에서는 제한조건을 잘 봤어야 했다. a와 b는 대소관계가 정해져 있지 않다...!
(이 조건 안보고 무작정 a가 b보다 크다고 생각해버린 1인... 이젠 조건부터 무조건 정독한다...)
정수 a,b가 주어지고 그 사이의 정수들의 합을 리턴하는 문제이다. 문제는 간단하지만 조건을 안보는 실수를 했으니 다시 실수 안하도로 정리해보자...!
가장먼저해야하는건... a가 큰지 b가 큰지를 알아내는것이다. 두 정수 사이의 정수들의 합을 구하려면 아무래도 둘 중 어느게 큰지를 알아야 한다. (7이상 3이하가 되면 사이에 존재하는 정수가 있겠는가....) 큰수, 작은수를 알아냈다면 다음 할 일은 두 수 사이의 정수들을 더해주는것이다.
다음과 같이 코드를 구현하였다.
long long solution(int a, int b) {
long long answer = 0;
int start = (a < b) ? a : b;
int end = (a < b) ? b : a;
for(int i = start; i <= end; i++){
answer += i;
}
return answer;
}
삼항 연산자를 사용해서 코드 길이를 줄였다. 알아보기도 더 쉽기 때문이기도 하다.
코드를 보면, start, end에 대해서 a,b를 비교해 작은값을 start에, 큰 값을 end에 할당하였다.
그 다음 for문을 이용해 start부터 end사이의 정수들을 모두 더하고 값을 리턴하였다.
다른 방법으로 구현해보고 싶어진다. 수열에 대해 공부할때 배웠던 공식이 있는데 가우스의 등차수열 합 공식! 어렴풋이 기억이 나서되짚어서 생각해보았다. 공식이 어떻게 되더라? 일단. 두 값을 더하고 개수로 곱한 다음 2로 나누면...! 예를 들어.. 3, 5 일때,(3+5) /2 = 4, 5-3+1 = 3. 4*3 = 12가 나온다. 정리하면 (첫 항 + 마지막 항) * (항의 개수) / 2 인 것이다. 이 공식이라면 코드를 한줄만 작성해도 되겠는데? 한번 해보자!
long long solution(int a, int b) {
return (long long)(a > b ? a - b + 1 : b - a + 1) * (a + b) / 2;
}
와~ 코드가 한줄로 끝났다. 작동도 문제없이 잘 되는것을 알 수 있다.

입력된 수가 짝수일때 2로 나눈다. 홀수라면 3을 곱하고 1을 더한다. 결과가 1이 될때까지 반복하는 것이 콜라츠 추측이다. (처음들어보는...) 문제에서는 만약 과정이 500번이 넘는다면 -1을 반환하라고 한다. 그러면... 과정 진행할때마다 횟수를 1씩 더하고 500 이상이 됐을때 -1로 리턴하면 되겠구나~
int solution (int num) {
int count = 0;
while(num != 1){
if(count >= 500) return -1;
num = (num % 2 == 0 ? num /= 2 : num * 3 + 1);
count++;
}
return count;
}
실행해보았다. 어라?

실패했다. 실행한 결괏값 488이 기댓값 -1과 다릅니다. 어째서 488까지밖에 작업이 진행이 안된걸까? 코드를 살펴보니... 아차 num이 int로 선언되어있다. 범위가 너무 작아서 오버플로우가 발생한것이다. 입력값은 int범위 내이지만 코드의 num*3+1 계산 과정에서 숫자가 커져서 32비트 정수범위를 넘어가게 된다. 그렇다면 범위를 키워주면 되겠지!
int solution (long long num) {
int count = 0;
while(num != 1){
if(count >= 500) return -1;
num = (num % 2 == 0 ? num /= 2 : num * 3 + 1);
count++;
}
return count;
}
범위를 아~주 크게 키웠다. 다시 실행해보자.

성공 ~~~ *^-^*
[ C ]
오늘은 반복문 중 for문, do-while문, 무한 반복문, break, continue, 이중 반복문에 대해 학습했다.
그리고 배열에 대해서도 학습했다.
for문은 아주 많이 사용되는 반복문 중 하나로 나도 자주 사용하는 편이다. 초기식, 조건식, 증감식을 지정해주고 for문 안에 명령어를 넣어주면 반복구간 만큼 명령어가 실행된다.
int i;
for (i = 1; i < 5; ++i)
{
printf("%d ", i);
}
위 코드를 분석해보자. 변수 i가 선언되어있고 for문에서 사용되고있다. for문을 살펴보면 초기식, 조건식, 증감식이 잘 들어가있다. 초기식은 i가 1, 조건식은 i가 5보다 작을때, 증감식 ++i 는 전치 증감 연산자(for문에선 전치인지 후치인지는 상관이 없다). 실행 결과를 예측해본다면..
1 2 3 4
i가 1부터 5보다 작을때까지 출력하고 i에 1을 더한 결과이다.
do-while문은 나는 자주 사용하는 편은 아니다. 알고는 있지만 말은 안섞어본 같은 반 친구 느낌.. do{명령어;...}while(조건식); 구조라서 첫 1회를 실행한 다음에 조건식 검사하고 다음을 진행한다. 처음부터 조건을 검사하는 다른 반복문과는 다르게 좀 젠틀하다.
무한반복문은 멈춰주지 않으면 계에에속 실행된다.
소방차는 빨간불에도 멈추지 않...
멈추는 코드가 없다면...마치 브레이크 없는 스포츠카..?!
코드에도 브레이크가 필요하다! break 구문을 꼭 넣어주자. 그리고 continue를 넣어 특정 순회번째를 무시할 수 있다.
이중반복문은 말 그대로! 이중이다. 반복문 안에 반복문...또 안에 반복문... 실행이 어떤식으로 되는지를 잘 파악하는것이 중요하다. 안쪽에 위치한 반복문부터 읽어보는걸 추천한다!
배열은 마치 아파트 같은것이다. 쭉 나열된 공간이 있고 그 안에 데이터가 연속적으로 들어간다.
배열은 자료구조의 기초! 사용할 메모리의 크기를 선언하는것이 특징이다. 선언 후에는 크기 변경이 불가능하다는걸 유의하자!
자료형 배열명[배열크기];
자료형 배열명[배열크기] = {값0, 값1, ..., 값(배열크기-1)};
배열은 선언할때마가 헷갈려하는 편이다. 손으로 종이에 직접 써가면서 확실하게 외운다!!!!!!!
중요한건 배열에 들어간 값들의 인덱스는 0부터 시작된다. 즉, 맨 앞에서부터 인덱스 값이 0, 1, 2... 이런식이라는것이다. 배열의 크기가 5인 배열이 있다 했을때 마지막 값의 인덱스 값은 5-1=4가 된다. (아파트인데 0호실, 1호실... 이런느낌!)
이중반복문처럼 배열도 여러개를 한번에 사용하기도 한다.
2차원 배열은 1차원 배열을 쌓아올린 느낌! 메모리 상으로는 1차원인데 우리는 이해하기 쉽게 2차원이라고 봐줍시다.
자료형 배열명[배열크기1][배열크기2];
자료형 배열명[줄개수][칸개수] = { { 값00, 값01, ..., 값0(칸개수-1)},
...
{ 값(줄개수-1)0, 값(줄개수-1)1, ..., 값(줄개수-1)(칸개수-1) } };
이렇게 보면 좀 어려운데 다시 아파트라고 생각해보자. 우리아파트는 총 (줄개수-1)층까지 있고 호실은 총 (칸개수-1)호 까지 있습니다. 그렇다면 0층의 00호실, 01호실... 0(칸개수-1)호실. 1층의 10호실, 11호실... 1(칸개수-1)호실 .... 맨 마지막 집은 (줄개수-1)(칸개수-1)호실이 된다.
// Main.c
#include <stdio.h>
int main(void)
{
int i, j;
int Array2D[4][3] = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
{10, 11, 12 } };
for (i = 0; i < 4; ++i)
{
for (j = 0; j < 3; ++j)
{
printf("%2d ", Array2D[i][j]);
}
printf("\n");
}
return 0;
}
위 코드를 보면 더 잘보인다. Array2D를 보면 층은 4개, 호실은 3개이다. 인덱스 값으로 표현해보면..
{{[0][0], [0][1], [0][2]},
{[1][0], [1][1], [1][2]},
{[2][0], [2][1], [2][2]},
{[3][0], [3][1], [3][2]}}
금요일이라서 그런지 마음이 들떠서 집중을 잘 못한 것 같다. 반성하자... 언리얼엔진도 정리해야하지만 아직 이해하지 못한 부분이 있어 주말에 복습하면서 이해해보려고 한다. 자료구조와 알고리즘에 대한 지식이 있으면 코드카타 문제를 푸는데 도움이 된다는 조언을 받았다. 대선배님의 조언은 무조건 믿고 따라야 정의! 주말에 언리얼엔진 복습을 끝낸 후 자료구조와 알고리즘 공부를 시작하려 한다. 주말이라 수업이 없어 헤이해지지 않도록 휴대폰으로 아침 알람을 맞춰두자!
주말이 남았지만 이번 주 열심히 공부했다!
주말엔 그동안 공부했던 내용들을 복습하고 다음주에 공부 할 내용을 예습하고자 한다. 물론, 자료구조와 알고리즘 공부도 빼놓지 않는다!
같이 캠프 수업을 듣는 분들 중엔 벌써 본인만의 프로젝트를 만들고 있는 분들이 계시다.. 나 혼자 뒤쳐지는건 아닐까 하느 걱정이 앞선다. 하지만 이런말이 있다. 늦었다고 생각할때가 가장 빠를때이다. 나는 나만의 페이스를 잘 유지하려한다. 늦추지만 않으면.. 내 실력도 차근차근 잘 쌓아 올라갈것이라 믿는다.
오늘도 수고 많았습니다. 즐거운 주말 되세요~!
'내일배움캠프' 카테고리의 다른 글
| 내일배움캠프 언리얼트랙 7일차 (0) | 2026.04.28 |
|---|---|
| 내일배움캠프 언리얼트랙 6일차 (0) | 2026.04.27 |
| 내일배움캠프 언리얼트랙 4일차 (0) | 2026.04.23 |
| 내일배움캠프 언리얼트랙 3일차 (1) | 2026.04.22 |
| 내일배움캠프 언리얼트랙 2일차 (4) | 2026.04.21 |