0Pricing
DSA Interview Prep · 강의

면접을 위한 Python 문자열 API

파싱과 변환이 필요한 면접 문제에 등장하는 split, join, replace, find, ord/chr, 문자열 서식 지정 패턴을 실습합니다.

면접을 위한 Python 문자열 API은(는) CoddyKit의 무료 DSA Interview Prep 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DSA Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DSA Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

Python의 문자열은 변경할 수 없습니다

Python 문자열은 변경 불가능하므로 문자를 제자리에서 바꿀 수 없습니다. 문자열을 수정하는 것처럼 보이는 모든 문자열 연산은 실제로 새 문자열을 만듭니다. 따라서 s[0] = 'X'를 실행하면 TypeError가 발생합니다. 제자리 조작이 필요하면 먼저 문자 목록으로 변환하고 작업을 수행한 다음 ''.join(chars)로 다시 구성하십시오. 문자열 변경 문제에서 사용하는 표준 면접 패턴입니다.

s = 'hello'
# s[0] = 'H'  # TypeError!

# In-place mutation pattern:
chars = list(s)
chars[0] = 'H'
result = ''.join(chars)
print(result)  # 'Hello'

# Reversing a string
print(s[::-1])           # 'olleh'
print(''.join(reversed(s)))  # 'olleh'

split()과 join(): 파싱 및 구성

s.split(sep)는 구분 기호를 기준으로 문자열을 나누고 부분 문자열 목록을 반환합니다. sep=None(기본값)이면 모든 공백 문자를 기준으로 나누며 빈 문자열은 제거합니다. 공백으로 구분된 입력을 파싱하는 데 이상적입니다. 'sep'.join(iterable)은 문자열 사이에 구분 기호를 넣어 문자열들을 연결합니다. ' '.join(words) 관용구는 목록에서 공백으로 구분된 문자열을 효율적으로 만드는 방법이며, 반복문에서 +를 사용해서는 안 됩니다.

# split
sentence = '  hello   world  '
words = sentence.split()    # ['hello', 'world']
print(words)

csv = 'a,b,c,d'
parts = csv.split(',')      # ['a', 'b', 'c', 'd']
print(parts)

# join
print(' '.join(words))      # 'hello world'
print(','.join(['x','y','z']))  # 'x,y,z'

# Reverse words in a sentence
print(' '.join(sentence.split()[::-1]))  # 'world hello'

find(), index() 및 포함 연산자

s.find(sub)는 sub가 처음 나타나는 위치의 인덱스를 반환하고, 찾지 못하면 -1을 반환합니다. s.index(sub)도 같은 작업을 하지만 값이 없으면 ValueError를 발생시킵니다. 처리되지 않은 예외를 피하려면 면접 코드에서는 find를 우선 사용하십시오. 문자열에 사용하는 in 연산자는 find와 같은 O(n×m) 부분 문자열 탐색입니다. 선택적 start 및 end 매개변수를 사용하면 복사하지 않고 슬라이스 범위 안에서 탐색할 수 있습니다.

s = 'abcabcabc'
print(s.find('bc'))          # 1  (first occurrence)
print(s.find('bc', 2))       # 4  (search from index 2)
print(s.find('xyz'))         # -1 (not found)
print('abc' in s)            # True

# Count occurrences manually
count = 0
start = 0
while True:
    idx = s.find('bc', start)
    if idx == -1: break
    count += 1
    start = idx + 1
print(count)  # 3

replace(), strip() 및 대소문자 메서드

s.replace(old, new, count=-1)는 모든 항목 또는 처음 count개의 항목을 바꾼 새 문자열을 반환합니다. s.strip()은 앞뒤의 공백 문자 또는 지정한 문자를 제거합니다. 대소문자 메서드인 lower(), upper(), capitalize(), swapcase()는 새 문자열을 만듭니다. 이 메서드들은 문자열을 직접 변경하지 않고 값을 반환한다는 점을 기억하십시오. 대소문자를 구분하지 않는 문제에서는 비교 전에 대소문자를 통일하는 것이 필수적입니다.

s = '  Hello, World!  '
print(s.strip())          # 'Hello, World!'
print(s.strip().lower())  # 'hello, world!'

print('banana'.replace('a', 'o'))   # 'bonono'
print('banana'.replace('a', 'o', 2)) # 'bonona'

# Normalise for comparison
def same_ignoring_case(a, b):
    return a.lower() == b.lower()

print(same_ignoring_case('Racecar', 'racecar'))  # True

startswith(), endswith() 및 isalnum()

판정 문자열 메서드는 불리언 값을 반환하며, k가 패턴의 길이일 때 O(k)입니다. s.startswith(prefix)와 s.endswith(suffix)는 여러 대안에 대해 튜플을 인수로 받을 수 있습니다. s.isalpha(), s.isdigit(), s.isalnum(), s.isspace()는 문자 종류를 검사합니다. 이러한 메서드는 유효한 회문, 유효한 숫자, URL 파싱 면접 문제에서 사용됩니다.

print('hello'.startswith('hel'))   # True
print('hello'.endswith(('lo', 'la')))  # True

# isalnum for palindrome filtering
def clean(s):
    return ''.join(c.lower() for c in s if c.isalnum())

print(clean('A man, a plan, a canal: Panama'))
# 'amanaplanacanalpanama'
print(clean('123abc!@#'))
# '123abc'

문자 코드 변환과 ASCII 산술

ord(c)는 문자 c의 유니코드 코드 포인트를 반환합니다. chr(n)은 정수를 다시 문자로 변환합니다. 소문자의 경우 ord(c) - ord('a')는 0부터 25까지의 값을 제공합니다. 이는 해시 맵 없이 고정 크기 26의 빈도 배열을 만드는 깔끔한 방법이며, 실제로 영어 알파벳을 처리할 때 더 빠릅니다. 이 기법은 애너그램과 회문 문제에 등장합니다.

print(ord('a'))   # 97
print(ord('z'))   # 122
print(chr(65))    # 'A'

# Frequency array for lowercase letters
def char_freq(s):
    freq = [0] * 26
    for c in s:
        freq[ord(c) - ord('a')] += 1
    return freq

print(char_freq('anagram'))  # [3,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0]
# index 0='a'(3), 6='g'(1), 12='m'(1), 17='r'(1)

출력을 위한 문자열 형식 지정

코딩 면접에서는 깔끔한 출력이 중요한 경우가 있습니다. Python은 세 가지 형식 지정 방식을 제공합니다. 퍼센트 형식 지정(구식), .format() 방식(고전적), f 문자열(현대적이며 권장됨)입니다. f 문자열은 가장 읽기 쉽고 표현식을 직접 지원합니다. f'{value:.2f}'는 실수를 소수점 이하 두 자리로 형식 지정합니다. 숫자 형식 지정, 문자열 채우기, 표 출력을 빠르게 수행하는 방법을 알면 압박 속에서 디버깅 시간을 줄일 수 있습니다.

name = 'Alice'
score = 95.678

# f-string (preferred in interviews)
print(f'{name}: {score:.1f}')      # Alice: 95.7
print(f'{name:>10}: {score:05.1f}') # right-align

# Zero-pad an integer
print(f'{42:04d}')   # 0042

# Join and format a list
nums = [1, 2, 3, 4]
print(', '.join(str(n) for n in nums))  # '1, 2, 3, 4'

join()으로 효율적으로 문자열 만들기

반복문에서 +로 문자열을 연결하면 매 반복마다 새 문자열이 만들어져 n개 문자를 처리하는 전체 비용이 O(n²)이 됩니다. 올바른 패턴은 각 부분을 목록에 추가한 다음 마지막에 ''.join(parts)를 호출하는 것이며, 이는 O(n)입니다. 이는 Python에서 가장 흔한 성능 저해 방식 중 하나입니다. 면접에서 이러한 트레이드오프를 언급하면 Python의 메모리 모델을 이해하고 있다는 점을 보여 줄 수 있습니다.

# SLOW: O(n^2) due to repeated string allocation
def build_bad(chars):
    s = ''
    for c in chars:
        s += c  # creates a new string each time!
    return s

# FAST: O(n)
def build_good(chars):
    parts = []
    for c in chars:
        parts.append(c)
    return ''.join(parts)  # single allocation

# Or even more concise:
def build_best(chars):
    return ''.join(chars)

print(build_best(['h','e','l','l','o']))  # 'hello'

문자열에서 정수와 실수 파싱하기

문자열과 숫자 사이의 변환은 파싱 문제의 기본입니다. int(s)와 float(s)는 숫자 문자열을 파싱하며, 잘못된 입력에 대해서는 ValueError를 발생시킵니다. 더 안전하게 파싱하려면 try-except 블록을 사용하십시오. 문자열 메서드 isdigit()과 isnumeric()을 사용하면 변환 전에 입력을 미리 검증할 수 있습니다. atoi와 같은 문제, 즉 문자열을 정수로 변환하는 문제에서는 앞쪽 공백, 부호, 오버플로를 처리해야 합니다.

def my_atoi(s):
    s = s.lstrip()  # remove leading spaces
    if not s: return 0
    sign = 1
    idx = 0
    if s[0] in '-+':
        sign = -1 if s[0] == '-' else 1
        idx = 1
    num = 0
    while idx < len(s) and s[idx].isdigit():
        num = num * 10 + int(s[idx])
        idx += 1
    result = sign * num
    INT_MAX, INT_MIN = 2**31 - 1, -(2**31)
    return max(INT_MIN, min(INT_MAX, result))

print(my_atoi('   -42'))          # -42
print(my_atoi('4193 with words'))  # 4193

알고리즘 문제에서 문자열 슬라이싱

문자열 슬라이싱은 자주 사용되지만 숨은 비용이 있습니다. s[i:j]는 길이가 j-i인 새 문자열을 만들며 O(j-i) 시간이 걸립니다. 재귀 함수에 부분 문자열을 전달해야 할 때는 O(n²) 할당 비용을 피하기 위해 실제 부분 문자열 대신 인덱스(start, end)를 전달하는 방법을 고려하십시오. 이 최적화는 많은 부분 문자열을 검사하는 최장 회문 부분 문자열과 같은 문제에서 중요합니다.

# Naive: O(n^3) because slicing inside nested loops
def is_palindrome_naive(s):
    return s == s[::-1]  # O(n) slice + O(n) compare

# Pass indices to avoid allocating substrings
def is_palindrome_range(s, left, right):
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1; right -= 1
    return True  # O(right-left) time, O(1) space

print(is_palindrome_range('racecar', 0, 6))  # True
print(is_palindrome_range('hello',   0, 4))  # False

문자열 면접 빠른 참고 자료

면접을 위해 다음 문자열 메서드를 머릿속에 정리해 두시기 바랍니다:

  • split / join — 구문 분석 및 구성
  • strip / lstrip / rstrip — 공백 제거
  • lower / upper — 대소문자 정규화
  • find / index — 부분 문자열 찾기
  • replace — 치환
  • isalnum / isalpha / isdigit — 문자 분류 확인
  • ord / chr — 고정된 알파벳 문제를 위한 ASCII 연산
  • startswith / endswith — 접두사 및 접미사 확인

# Combining methods: reverse words, preserve spaces
def reverse_words(s):
    return ' '.join(reversed(s.split()))

print(reverse_words('  hello   world  '))
# 'world hello'

# Check anagram using sorted strings
def is_anagram(s, t):
    return sorted(s) == sorted(t)

print(is_anagram('anagram', 'nagaram'))  # True
print(is_anagram('rat', 'car'))          # False

빠른 확인

이번 레슨에서 배운 자료 구조 및 알고리즘 — 코딩 면접 준비 개념을 제대로 이해했는지 확인해 보시기 바랍니다.

레슨 요약

이번 레슨에서는 다음을 배웠습니다. Python 문자열은 변경할 수 없으므로, 변경하려면 리스트로 변환한 뒤 수정하고 다시 결합해야 합니다. 또한 ord/chr을 사용하면 소문자 문제에서 크기가 26인 고정 크기 빈도 배열을 만들 수 있으며, 범위가 제한된 알파벳에서는 해시 맵보다 빠릅니다. 그리고 반복문에서 +로 문자열을 구성하면 O(n²)의 비용이 들기 때문에, 항상 리스트에 모은 다음 마지막에 ''.join()을 사용하여 O(n)으로 처리해야 합니다. 다음에는 부분 문자열 문제를 위한 슬라이딩 윈도우 기법을 살펴보겠습니다.

자주 묻는 질문

“면접을 위한 Python 문자열 API” 강의는 무료인가요?

네 — “면접을 위한 Python 문자열 API” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DSA Interview Prep 강의 전체를 잠금 해제할 수 있습니다. DSA Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.

“면접을 위한 Python 문자열 API”에서 뭘 배우나요?

파싱과 변환이 필요한 면접 문제에 등장하는 split, join, replace, find, ord/chr, 문자열 서식 지정 패턴을 실습합니다. 브라우저에서 직접 실행하는 실습 코드로 DSA Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

DSA Interview Prep을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 DSA Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“면접을 위한 Python 문자열 API” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 DSA Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 DSA Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 면접을 위한 Python 문자열 API
  2. 부분 문자열을 위한 슬라이딩 윈도우
  3. 애너그램과 문자 빈도 맵
  4. 문자열 인코딩, 뒤집기, 회문
← DSA Interview Prep(으)로 돌아가기