🎮 주제 : 알고리즘 성능 지표와 SFML 환경 설정의 이해
태그 : #C++ #알고리즘 #시간복잡도 #브루트포스 #SFML #빌드환경
📌 학습 요약
- 성능 분석의 기초 : 알고리즘의 효율성을 측정하는 시간 복잡도와 공간 복잡도의 개념을 파악하고, 불필요한 상수를 제외한 **점근적 표기법(Big-O)**의 원리 이해
- 완전 탐색(Brute-force) : 가능한 모든 경우의 수를 일일이 확인하는 가장 원시적이지만 확실한 문제 해결 기법의 구현 및 특징 분석
- SFML 그래픽스 설정 : 32비트 컬러 깊이(RGBA 각 8비트)가 성능과 호환성 면에서 권장되는 이유와 그래픽 라이브러리의 표준 설정 숙지
- 빌드 아키텍처 구분 : Visual Studio에서의 **x86(32비트)**과 x64(64비트) 차이를 명확히 하고, 프로젝트 환경에 맞는 빌드 구성 선택의 중요성 체득
🛠 주요 코드 및 구현 상세
1. 완전 탐색(Brute-force) 기반 비밀번호 찾기
// 3자리 비밀번호를 찾기 위해 000부터 999까지 모든 경우를 조사
int password[3] = {5, 1, 7};
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
if (password[0] == i && password[1] == j && password[2] == k) {
cout << "비밀번호 찾음 : " << i << j << k << endl;
return 0; // 찾은 즉시 함수 종료 (불필요한 연산 방지)
}
}
}
}
2. SFML 윈도우 생성 및 컬러 비트 설정
// 800x600 해상도, 32비트 컬러(RGBA 각 8비트) 권장 설정
sf::RenderWindow window(sf::VideoMode(800, 600, 32), "SFML Window");
✅ 주요 문법 및 개념 정리
복잡도 등급 표기법 특징
| 상수 시간 | $O(1)$ | 입력 크기와 상관없이 즉시 실행 |
| 로그 시간 | $O(\log n)$ | 실행할 때마다 탐색 범위가 절반으로 감소 (이진 탐색) |
| 선형 시간 | $O(n)$ | 데이터 개수만큼 비례하여 시간 소요 |
| 다항 시간 | $O(n^2)$ | 중첩 반복문 사용 시 발생 (브루트포스 등) |
💡 주의 : 점근적 표기법의 핵심
- 최고 차수 항 중심 : $f(n) = 3n^2 + 5n + 10$ 이라면, 영향력이 가장 큰 $n^2$만 남겨 $O(n^2)$으로 표기함
- 상수 무시 : $O(2n)$이나 $O(n)$이나 증가율 관점에서는 동일하므로 상수는 생략함
✨ 느낀 점
- 알고리즘 문제를 풀 때 단순히 답을 내는 것보다, 시간 복잡도를 고려해 최적의 효율을 찾는 것이 엔지니어링의 핵심임을 깨달음
- 완전 탐색 로직 구현 시 원하는 결과를 찾은 즉시 return이나 break를 사용하여 불필요한 순회를 끊어주는 습관이 중요함을 배움
- SFML 컬러 설정이나 Visual Studio 빌드 아키텍처와 같은 환경 설정이 프로그램의 호환성에 미치는 영향력을 체감함
- #pragma region과 같은 도구를 사용하여 방대한 코드를 구조적으로 정리하는 습관이 코드 가독성에 큰 도움이 됨을 느낌
'SBS아카데미 > 게임프로그래밍' 카테고리의 다른 글
| [C++ - TIL] 삽입 정렬의 메커니즘과 유클리드 호제법의 재귀적 구현 (0) | 2025.08.14 |
|---|---|
| [C++ - TIL] 선택 정렬 알고리즘의 메커니즘과 배열 조작의 기초 (0) | 2025.08.13 |
| [C++ - TIL] 원형 연결 리스트의 중복 데이터 제거 및 포인터 관리 (0) | 2025.08.07 |
| [C++ - TIL] 이진 탐색 트리(BST) 삭제 알고리즘의 완성 - 모든 케이스 구현 (0) | 2025.08.06 |
| [C++ - TIL] 이진 탐색 트리(BST) 노드 삭제의 기초 - 리프 노드 제거 로직 (0) | 2025.08.05 |