쉬움
Reverse String
코드 라인과 단계 ID를 동기화하고, 변수/포인터/배열·행렬·그래프 엔티티의 상태 스냅샷을 단계마다 갱신한다.
입력
1함수 뒤집기(글자):2 왼 = 0, 오 = 글자수 - 13 동안 왼 < 오:4 글자[왼] ↔ 글자[오] // 교환5 왼 = 왼 + 1, 오 = 오 - 16 반환 글자
변수
- 왼
- 0
- 오
- 4
1 / 4양끝에 포인터를 두고 안쪽으로 좁히며 맞바꿉니다.
양끝 문자를 맞바꾸며 안쪽으로 좁혀, 추가 배열 없이 제자리에서 뒤집는다.
왜 헷갈리는가
`arr.reverse()`나 새 배열로 쉽게 되는데 왜 투포인터를 배우나 — 핵심은 'in-place(제자리) O(1) 공간'이다. 큰 버퍼를 복사 없이 뒤집어야 할 때 이 방식이 필요하다.
핵심 아이디어
첫 글자와 끝 글자를 맞바꾸고 안쪽으로 한 칸씩 좁히면, 중앙에서 만날 때 전체가 뒤집혀 있다.
복잡도
시간 O(n)·공간 O(1). n/2번 교환한다. 새 배열을 만드는 방식은 O(n) 공간.
실무에서 어디에 쓰나
제자리 뒤집기는 메모리가 귀한 곳·저수준 처리에서 자주 쓰인다.
- 버퍼/바이트 순서: 엔디안 변환, 고정 버퍼 뒤집기(복사 금지)
- 배열 회전: 부분 뒤집기 3번으로 O(1) 공간 회전 구현
- 문자열 처리: 단어 단위 뒤집기(문장 반전)의 하위 연산
- 임베디드/게임: 추가 할당 없이 in-place로 데이터 뒤집기
흔한 실수
유니코드 결합 문자·이모지(서로게이트 페어)를 코드유닛 단위로 뒤집으면 깨짐 — 그래프임 단위로 처리.
기억할 것
- 핵심은 in-place O(1) 공간.
- n/2 교환.
- 배열 회전의 부분연산.
- 유니코드는 그래프임 단위로.