이번 구간은 단순히 답을 내는 것을 넘어, "얼마나 더 효율적이고 안전하게 코드를 짤 수 있는가"를 고민하게 만든 회차였습니다.
1. 문자열 파싱과 포인터의 이해 (컨트롤 제트, 모스부호)
- strtok의 활용: 공백으로 구분된 문자열을 자를 때 strtok을 사용했다.
- 복기: strtok은 원본 문자열에 \0을 삽입하므로 반드시 복사본(strcpy)을 만들어 작업해야 안전하다.
- 포인터 비교 vs 문자 비교: ptr == 'Z'가 아니라 strcmp(ptr, "Z") == 0 또는 ptr[0] == 'Z'로 비교해야 한다는 점을 다시 한번 새겼다.
2. 계수 정렬(Counting Sort)의 응용 (한 번만 등장한 문자)
- 인덱스 매핑: 알파벳 빈도수를 int alp[26]에 담아 관리했다.
- 복기: 'a'부터 'z'까지 루프를 돌며 빈도수가 1인 것만 출력하면 별도의 qsort 없이도 자동으로 사전 순 정렬이 된다.
3. 최솟값/최댓값 알고리즘의 예외 처리 (가까운 수)
- 초기값 설정: close 변수를 초기화할 때 어설픈 숫자(100) 대신 INT_MAX를 사용해 안전성을 높였다.
- 동점 처리: 거리가 같을 경우 더 작은 수를 선택하는 else if (range == close) 로직을 추가하여 문제의 세부 조건을 충족했다.
4. 자릿수 및 연속 데이터 처리 (k의 개수, 숨어있는 숫자의 덧셈 2)
- 변수 보호: for문의 제어 변수 a를 직접 나누지 않고 temp 복사본을 만들어 자릿수를 계산했다.
- 숫자 덩어리 만들기: num = num * 10 + (s[i] - '0') 공식을 통해 문자열 속 연속된 숫자를 하나의 정수로 추출하는 법을 익혔다.
💡 스스로 주는 피드백 (성장을 위한 기록)
- 전역 변수 지양: 테스트 케이스가 반복되는 환경에서는 전역 변수보다 함수 내 지역 변수 초기화가 훨씬 안전하다는 것을 배웠다.
- 메모리 해제(free): malloc으로 만든 copy나 answer를 다 쓴 뒤에는 반드시 해제하여 메모리 누수를 막는 습관을 들여야 한다.
- 라이브러리 활용: isdigit(), isupper(), abs() 등 표준 라이브러리 함수를 적재적소에 쓰면 코드의 가독성이 비약적으로 상승한다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [C] 코딩 테스트 입문 100제 (84 ~ 100) (0) | 2026.04.01 |
|---|---|
| [C] 코딩 테스트 입문 100제 (72 ~ 83) (0) | 2026.03.30 |
| [C] 코딩 테스트 입문 100제 (40 ~ 60) (0) | 2026.03.26 |
| [C] 코딩 테스트 입문 100제 (27 ~ 39) (0) | 2026.03.24 |
| [C] 코딩 테스트 입문 100제 (1 ~ 26) (0) | 2026.03.23 |