전체 회차
A-008Day 082026.05.10mediumleetcode #271neetcode150

문자열 인코딩과 디코딩

#array#string#design
leetcode #271 · encode-and-decode-strings
01

문제

· problem
P.008

문자열 인코딩과 디코딩

leetcode #271

문자열 목록을 하나의 인코딩된 문자열로 변환하는 encode 함수와, 인코딩된 문자열을 원래의 문자열 목록으로 복원하는 decode 함수를 설계하세요. 인코딩 포맷은 쉼표나 특수 문자를 포함할 수 있는 임의의 문자열을 정확히 처리할 수 있어야 합니다. 빈 문자열도 포함될 수 있습니다.

제약
  • · 1 ≤ number of strings ≤ 1e2
  • · 0 ≤ length of each string ≤ 1e4
  • · Strings can contain any ASCII characters
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
example 1input → output
["Hello","World"]
5#Hello5#World
example 2input → output
[""]
0#
02

사전 사고

· pre-solve
● 1리스트 출력● 2선택● 3정답 공개
  • 인코딩된 문자열에서 어떻게 각 문자열의 경계를 구분할 것인가?
  • 빈 문자열(empty string)은 어떻게 처리되는가?
  • "#" 문자가 원본 문자열에 포함되면 어떻게 되는가?
  • 매우 큰 문자열(예: 1e4 길이)도 효율적으로 처리되는가?
  • CSV 형식(쉼표로 구분)을 사용하면 더 간단하지 않을까?
  • 각 문자열을 고정 길이(예: 4바이트) 정수로 인코딩하는 것이 낫지 않을까?
  • 디코더에서 길이를 어떻게 파싱하는가?
던질 질문에 체크하고 확인을 누르세요
// 결과는 세션 메모리만 — 새로고침하면 초기화됩니다 (반복 학습)
03

논리 구조

· logic
● 1슬롯 출력● 2슬롯별 선택● 3정답 공개
// 각 슬롯에 들어갈 코드 한 줄을 골라 알고리즘 흐름을 합성해보세요. 코드는 안 짜지만 논리 뼈대는 직접.
step 1· 결과 문자열 초기화
res = ""
res = []
res = ""s
step 2· 각 문자열 반복
for s in strs:
for i in range(len(strs)):
while strs:
step 3· 길이 + 구분자 + 문자열 추가중첩
res += str(len(s)) + "#" + s
res += s + "#" + str(len(s))
res += "#" + str(len(s)) + s
res += str(len(s)) + s
step 4· 인코딩된 결과 반환
return res
return res[:-1]
return ""
각 슬롯에 한 줄씩 골라보세요
// format: slot — 다른 패턴(재귀·DP 등) 은 ordering·state-first 등 별도 format. ADR-08 후속.
04

문제풀이 · 트레이스

· solve
solution.py
1
class Solution:
2
    def encode(self, strs):
3
        res = ""
4
        for s in strs:
5
            res += str(len(s)) + "#" + s
6
        return res
7
8
    def decode(self, s):
9
        res = []
10
        i = 0
11
        
12
        while i < len(s):
13
            j = i
14
            while s[j] != '#':
15
                j += 1
16
            length = int(s[i:j])
17
            i = j + 1
18
            j = i + length
19
            res.append(s[i:j])
20
            i = j
21
            
22
        return res
머릿속 dry-run 케이스
// 각 케이스를 머릿속으로 따라가보세요. 막히면 아래 worked example 펼침.
case 1
["Hello","World"]
5#Hello5#World
case 2
[""]
0#
// UI 가 walk-through 안 함 — 학습자가 머릿속으로. 막히면 worked example 펼침.