📝 오늘 학습을 시작하며 (작성 이유)
- 오늘부터 본격적으로 C++ 및 프로그래머스 코딩 테스트 학습 시작.
- 처음 마주하는 개념들이 빠르게 쏟아져 나와 머릿속 지식들이 아직 파편화되어 있음.
- 나중에 혼자 다시 보며 완벽하게 복습하고, 같은 실수를 반복하지 않기 위해 기록으로 남김.
📌 1. 핵심 개념 한눈에 보기 (요약 표)
| 분류 | 함수 및 문법 | 핵심 기능 / 용도 | 복습용 한줄 팁 |
| 문자열 | s[index] = 'Char'; | 특정 위치의 문자 직접 수정 | 단일 문자를 바꿀 때는 replace보다 훨씬 빠르고 간결함. |
| 자료구조 | v.push_back(value); | 벡터(배열) 맨 뒤에 데이터 추가 | 데이터가 들어올 때마다 배열 크기가 알아서 늘어남. |
| 자료구조 | v.erase(Iterator); | 특정 위치의 데이터 삭제 | 인덱스 정수(0, 1)가 아니라 **메모리 주소(Iterator)**를 넣어야 함. |
| 알고리즘 | min_element(begin, end) | 배열 내 최솟값의 주소 찾기 | 값 자체가 아니라 **주소값(반복자)**을 반환하므로 주의할 것. |
| 알고리즘 | max_element(begin, end) | 배열 내 최댓값의 주소 찾기 | min_element와 세트. 마찬가지로 주소값을 반환함. |
| 알고리즘 | swap(A, B); | 두 변수/배열 칸의 값 맞바꾸기 | 임시 변수(temp)를 생성하는 번거로움 없이 한 줄로 처리 가능. |
| 기초 문법 | for (int i=1; i<=n; ++i) | 지정한 횟수만큼 반복 연산 | i < n은 n 직전까지, i <= n은 n 본인까지 포함하여 반복함. |
| 기초 문법 | if (num % 2 == 1) | 홀수 / 짝수 조건 판별 | %는 나머지 연산자. 나머지가 1이면 홀수, 0이면 짝수임. |
🔍 2. 깊이 파고들기: 오늘 발생한 트러블슈팅
🚨 핵심 이슈: 주소값(Iterator)과 인덱스(정수)의 혼동
C++ 벡터를 다룰 때 min_element나 erase 같은 함수들은 숫자가 아니라 메모리 주소(Iterator)를 기준으로 작동함. 이 개념을 헷갈리면 엉뚱한 메모리를 참조하여 런타임 에러가 발생할 수 있음.
- arr.begin(): 배열의 첫 번째 칸 주소
- arr.end(): 배열의 마지막 칸 바로 다음 주소 (경계면)
- min_element(begin, end): 최솟값이 들어있는 칸의 주소
💡 해결 공식: 주소로 인덱스(방 번호) 구하기
- "최솟값 주소 - 시작 주소"를 수행하면 그 사이의 칸수(인덱스 정수)를 얻을 수 있음.
- 숫자끼리의 뺄셈이 아니라 주소끼리의 뺄셈을 통해 거리를 구하는 원리임.
C++
// 1. 올바른 인덱스 구하기 (최솟값 주소 - 시작 주소 = 0부터 시작하는 정수)
int min_index = min_element(arr.begin(), arr.end()) - arr.begin();
// 2. 인덱스 변환 없이 주소로 바로 지우기 (더 깔끔한 방식)
auto it = min_element(arr.begin(), arr.end());
arr.erase(it); // erase는 주소를 인자로 받으므로 바로 전달 가능
🚀 3. 코딩 테스트 풀이 역량 향상을 위한 체크리스트
- 반복문 경계 조건 디테일 챙기기
- 문제를 읽고 이하(<=), 미만(<) 조건을 정확히 구분할 것.
- 끝자리 숫자 하나 때문에 정확성 테스트에서 탈락할 수 있음.
- for문 증감식 최적화 (굳이 if문을 안 써도 되는 경우)
- 홀수나 배수만 골라내야 할 때, 1씩 키우며 if문으로 매번 검사하기보다 i += 2(홀수), i += 3(3의 배수)처럼 건너뛰기를 활용하는 것이 연산 횟수를 줄이는 방법임.
- 자료구조 변형 시 메모리 흐름 의식하기
- 벡터(vector)에서 중간에 있는 원소를 erase로 지우면, 뒤에 있던 데이터들이 빈자리를 채우기 위해 앞으로 한 칸씩 밀려와 인덱스가 재조정됨을 기억할 것.
'TIL' 카테고리의 다른 글
| [UE5] 언리얼 엔진 5.5 프로젝트 실행파일(패키징) 만드는 방법 정리 (1) | 2026.05.20 |
|---|---|
| [C++] 코딩 테스트 오답 노트 & 코드 개선 (가운데 글자 / 수박수박수) (0) | 2026.05.19 |
| [UE5]스플라인을 통해서 얼만큼 왔는지 실시간으로 나타내는 방법 (0) | 2026.05.15 |
| [UE5]Reverse & Keyframe – 언리얼 엔진 내에서 기존 애니메이션 재구성하기 (0) | 2026.05.14 |
| [UE5] 외부 툴 없이 엔진 내에서 애니메이션 수정 및 몽타주 적용하기 (0) | 2026.05.13 |