C언어 문자열 뒤집기 (포인터 활용)
코딩C언어
읽는데 4분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-03-21
조회수: 113
선수학습(1개)
요약
C언어에서 포인터 두 개를 활용해 문자열을 뒤집는 알고리즘을 알아봅니다. 정보처리기사 실기에 출제된 양 끝에서 가운데로 이동하며 swap하는 방식을 정리합니다.
문자열 뒤집기 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 두 포인터 | 양 끝에서 시작하여 가운데로 이동 | p1 = str, p2 = str + len - 1 |
| swap | 두 포인터가 가리키는 값을 교환 | t = *p1; *p1 = *p2; *p2 = t; |
| 종료 조건 | 두 포인터가 만나거나 교차할 때 | while(p1 < p2) |
문자열 뒤집기란? 쌩기초
문자열 뒤집기 개념을 몰라도 문제는 풀 수 있습니다
문자열 뒤집기(String Reverse) 는 문자열의 순서를 거꾸로 바꾸는 알고리즘입니다.
text
코드 하이라이팅 중...
C언어에서는 포인터 두 개를 사용해 양 끝에서 시작하여 가운데로 이동하며 값을 교환(swap)하는 방식이 자주 사용됩니다.

strlen 함수 쌩기초
strlen()은 문자열의 길이를 반환하는 표준 라이브러리 함수입니다. 널 문자('\0')는 포함하지 않습니다.
사용하려면 #include <string.h>를 작성해야 합니다.
c
코드 하이라이팅 중...
| 문자열 | strlen 결과 |
|---|---|
"HELLO" | 5 |
"ABCDEFGH" | 8 |
"" (빈 문자열) | 0 |
알고리즘 구현 기초
코드에서 *p1은 "p1이 가리키는 칸의 값"이라는 뜻입니다. 포인터가 아직 익숙하지 않다면 먼저 읽고 오는 것을 추천합니다.
c
코드 하이라이팅 중...
포인터 초기 위치
c
코드 하이라이팅 중...
| 변수 | 가리키는 위치 | 값 |
|---|---|---|
p1 | str + 0 (= &str[0]) | 'A' |
p2 | str + 7 (= &str[7]) | 'H' |
str + len - 1이 마지막 문자인 이유
문자열 길이가 8이면 인덱스는 0부터 7까지입니다. str + 8은 널 문자 위치이고, str + 7이 마지막 문자 위치입니다.
동작 과정 기초
"ABCDEFGH"를 뒤집는 과정을 단계별로 살펴봅니다.
초기 상태
text
코드 하이라이팅 중...
1회차: A와 H 교환
c
코드 하이라이팅 중...
text
코드 하이라이팅 중...
2회차: B와 G 교환
c
코드 하이라이팅 중...
text
코드 하이라이팅 중...
3회차: C와 F 교환
c
코드 하이라이팅 중...
text
코드 하이라이팅 중...
4회차: D와 E 교환
c
코드 하이라이팅 중...
text
코드 하이라이팅 중...
p1 < p2 조건이 거짓이 되어 루프 종료.

시험 문제 분석 심화
24년 1회 문제에서는 뒤집은 후 홀수 인덱스 위치의 문자만 출력합니다.
c
코드 하이라이팅 중...
홀수 인덱스 = 인덱스 1, 3, 5, 7
'홀수 번째'가 아니라 '인덱스 값이 홀수인 위치'입니다. i가 1부터 시작해서 2씩 증가하므로 i = 1, 3, 5, 7 위치를 출력합니다.
뒤집은 후 str = "HGFEDCBA":
| 인덱스 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|---|
| 출력 여부 | O | O | O | O | ||||
| 값 | H | G | F | E | D | C | B | A |
i = 1, 3, 5, 7일 때 출력하므로 결과는 GECA입니다.