1. Day08
- C++ 문법 학습
- 개인 공부
2. C++ 문법 학습
게임 개발자를 위한 C++ 문법(1-3, 1-4)
- 조건문, 복합 조건, for문 while문 복습
- 포인터와 레퍼런스 복습
C/C++ 가변인자
- 개수가 정해지지 않은 매개변수를 받을 수 있게 해주는 기능
- ...으로 선언하고 va_list, va_start, va_arg, va_end로 사용
핵심 도구 4가지
도구 역할 va_list 가변인자 리스트 (상자) va_start 읽기 시작 (상자 열기) va_arg 하나씩 꺼내기 va_end 읽기 종료 (상자 닫기) 끝을 알리는 두 가지 방법
방법 예시 장점 단점 개수 전달 sum(3, 10, 20, 30) 여러 타입 혼용 가능 개수를 세야 함 NULL 종료 create(a, b, c, NULL) 개수 안 세도 됨 포인터 타입만 가능 - 가변인자의 한계
- 값이 동적인 것은 OK: sum(3, a, b, c)
- 개수가 동적인 것은 불가능: sum(n, ???)
- 이유: 인자 개수는 컴파일 시점에 확정되어야 함
- 실제 사용되는 곳
- printf, scanf (C 표준 라이브러리)
- UE_LOG (언리얼 엔진)
- Sequence::create (cocos2d-x)
- 가변인자의 한계
가변인자 vs 다른 방식
방식 사용 상황 가변인자 ...경우의 수가 무한할 때 (printf) 함수 오버로딩 경우의 수가 적을 때 (sort) 기본 매개변수 일부만 생략할 때 vector/배열 런타임에 개수가 결정될 때 - 결론
- 가변인자는 printf처럼 호출 시점에 인자를 다 알고 있을 때 사용
- 동적 입력 처리에는 vector/배열 사용
- 알고리즘 문제에서는 쓸 일이 거의 없음 → if-else, map + 함수, vector로 해결
- 결론
3. 개인공부
- 실버2 21736번 헌내기는 친구가 필요해(그래프 탐색)
- 처음에는 DFS로 접근했으나 BFS가 좀더 직관적 → 처음 위치에서 시계 방향으로 진행 루트를 체크해야하기 때문에
// 실버2 21736번 헌내기는 친구가 필요해(그래프 탐색)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N, M;
// char 대신 string으로 받는다면 입력이 더 직관적이고 쉬워짐
vector<vector<char>> graph;
vector<vector<bool>> visited;
int BFS(int startX, int startY)
{
queue<pair<int, int>> q;
q.push({ startX,startY });
visited[startX][startY] = true;
int count = 0;
int dx[4] = { 0, 1, 0, -1};
int dy[4] = { -1, 0, 1, 0 };
while (!q.empty())
{
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || nx >= N || ny <0 || ny >= M)
{
continue;
}
if (visited[nx][ny] || graph[nx][ny] == 'X')
{
continue;
}
visited[nx][ny] = true;
if (graph[nx][ny] == 'P')
{
count++;
}
q.push({ nx,ny });
}
}
return count;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> N >> M;
graph.assign(N, vector<char>(M));
visited.assign(N, vector<bool>(M, false));
int x, y;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> graph[i][j];
if (graph[i][j] == 'I')
{
x = i;
y = j;
}
}
}
int result = BFS(x, y);
if (result == 0)
{
cout << "TT" << '\n';
}
else
{
cout << result << '\n';
}
return 0;
}
3. 내일 일정 : C++ 문법 학습 및 개인공부(그래프 더 풀어보기)
'내일배움캠프_Unreal 게임 개발자 부트캠프_7기 > 본캠프' 카테고리의 다른 글
| [TIL] 2025-12-10 | 본캠프 10일차 - C++ 기본기, 스마트 포인터 (0) | 2025.12.10 |
|---|---|
| [TIL] 2025-12-09 | 본캠프 9일차 - C++ 기본기 (0) | 2025.12.09 |
| [TIL] 2025-12-05 | 본캠프 7일차 - 연결 요소의 개수, 좌표 압축 (0) | 2025.12.05 |
| [TIL] 2025-12-04 | 본캠프 6일차 - 연결 요소의 개수, 좌표 압축 (0) | 2025.12.04 |
| [TIL] 2025-12-03 | 본캠프 5일차 - 레벨 디자인 과제 (0) | 2025.12.03 |
