본문으로 바로가기
쉬움

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 교환.
  • 배열 회전의 부분연산.
  • 유니코드는 그래프임 단위로.
Reverse String | KIE