기본적으로 코딩 테스트를 준비할 때 그리디, 구현(Implementation), DFS/BFS, 다이나믹 프로그래밍을 주로 공부한다. 물론 이 네 가지의 출제빈도가 높기 때문에 중요한 것은 사실이다. 하지만 항상 이 부분만 출제되는 것은 아니다. 특히 카카오 같은 경우 문자열 처리가 필요한 문제를 많이 내기 때문에 문자열 처리와 정규표현식을 알고 있다면, 남들보다 쉽고 빠르게 알고리즘 문제를 해결할 수 있을 것이다.
출제된 문자열 처리 문제
꼭 알아둬야 할 Python 문자열 처리 함수들
개인적으로 가장 많이 쓰는 언어가 파이썬인 영향도 있지만 코딩 테스트를 준비할 때 파이썬으로 코딩하는 것을 추천한다. 특히 문자열 처리에 관해서는 파이썬이 다른 언어에 비해서 내장되어 있는 문자열 처리 함수가 많다. 따라서 C++에서는 직접 구현해야 하는 함수들도 파이썬에는 내장되어 있는 경우가 많기에 문자열 처리할 때 특히 유리하다고 할 수 있다. 물론 속도는 확실히 다른 언어에 비해서 많이 느리다.
1. 대문자, 소문자(upper, lower)
string = "Hello"
# 대문자로 변환
# HELLO
string.upper()
# 소문자로 변환
# hello
string.lower()
2. 문자열 바꾸기(replace)
string = "My favorite song is snowman by sia"
# string.replace(문자열1, 문자열2)
# 문자열1을 문자열2로 변환
# My favorate song as snowman by saa
string.replace("i", "a")
# 삭제할 수도 있다
# My favorite is snowman by sia
string.replace("song", "")
# 공백 삭제
# Myfavoritesongissnowmanbysia
string.replace(" ", "")
3. 문자열 찾기(find, count)
문자열을 찾는 함수로 indexe도 있지만 해당 문자열이 없을 경우 오류가 발생하기에 문자열이 없을 때 -1을 리턴하는 find를 사용하는 것을 추천한다.
string = "My favorite song is snowman by sia"
# find
# 찾는 문자열이 처음 나오는 위치 리턴
# 없을 경우 -1 리턴
# 17
string.find("is")
# -1
string.find("maroon")
# 해당 문자열의 개수를 리턴
# 3
string.count("i")
# 0
string.count("maroon")
4. 문자열 슬라이싱
string = "My favorite song is snowman by sia"
# 슬라이싱
# 문자열에서 원하는 부분만 추출 할 수 있다.
# string[start: end] start ~ (end - 1)까지 슬라이싱
# 생략 할 경우 처음과 끝이 들어간다.
# My favorite song is snowman by sia
string[:]
# 5번째 부터 끝까지
# vorite song is snowman by sia
string[5:]
# 처음 부터 9번째 까지
# My favorit
string[:10]
# My
string[0:2]
# 음수도 가능하다. 끝에서 부터 -1
# My favorite song is snowman by s
string[:-2]
# 세번째 인수를 생략하지 않은 경우 step으로 작용
# 2개씩 step
# M aoiesn ssomnb i
string[::2]
# Reverse
# ais yb namwons si gnos etirovaf yM
string[::-1]
5. 문자열 분리 및 결합(split, join)
string = "apple banana kiwi tomato"
# 분리
# split(문자열) 문자열을 기준으로 분리
# 생략할 경우 공백을 기준으로 분리함
# 리턴되는 결과는 리스트
# ['apple', 'banana', 'kiwi', 'tomato']
string.split()
string = "1a2a3a4a"
# ['1', '2', '3', '4', '']
string.split("a")
li = ["apple", "banana", "kiwi", "tomato"]
# 결합(리스트를 문자열로 결합)
# 문자열.join(리스트) - 리스트 원소 사이에 문자열을 삽입
# 공백을 삽입
# apple banana kiwi tomato
" ".join(li)
# ,를 삽입
# apple,banana,kiwi,tomato
",".join(li)
li = [1, 2, 3, 4]
# 리스트의 원소는 모두 str 타입이어야 한다. 아닐경우 오류발생
# 오류발생!
" ". join(li)
6. 문자열 공백 제거(strip)
string = " Hello World! "
# 공백 제거
# strip() - 양쪽 공백제거
# Hello World!
string.strip()
# lstrip() - 왼쪽 공백제거
# Hello World!
string.lstrip()
# rstrip() - 오른쪽 공백제거
# Hello World!
string.rstrip()
string = "aaaaabbbbbbaaaaa"
# 특정 문자 제거
# 해당 문자가 나오지 않을 때까지 제거
# 양쪽에서 a가 나오지 않을 때까지 제거
# bbbbbb
string.strip("a")
# 왼쪽에서 a가 나오지 않을 때까지 제거
# bbbbbbaaaaa
string.lstrip("a")
# 오른쪽에서 a가 나오지 않을 때까지 제거
# aaaaabbbbbb
string.rstrip("a")
# 양쪽에서 a또는 b가 나오지 않을 때까지 제거
# a 또는 b를 제거하기 때문에 공백이 출력된다.
# 공백출력
string.strip("ab")
7. 아스키코드 관련 함수(chr, ord)
# chr
# 아스키코드 값을 입력으로 받아 문자를 출력
# 'a'
chr(97)
# 'A'
chr(65)
# ord
# 문자를 입력 받아 아스키코드 값을 출력
# 98
ord('b')
# 48
ord('0')
알아두면 편리한 Python 정규표현식
사실 정규표현식까지 꼭 알아야 할 필요는 없다. 정규표현식을 몰라도 문자열 처리 문제들을 푸는데 아무런 지장이 없기 때문이다. 하지만 정규표현식까지 알고 있다면 문자열 처리 문제를 훨씬 더 짧은 코드로 빠르게 풀 수 있을 것이다. 전쟁터에 나가는데 무기 하나라도 더 들고나가면 좋지 않을까.
정규표현식을 알고 싶은 사람은 아래 포스팅을 참고하길 바란다.
함께 풀면 좋은 문제들
코딩 테스트 준비할 때 필수 개념! 시리즈
'개인공부 > 코테 및 알고리즘' 카테고리의 다른 글
[알고리즘] 가장 긴 증가하는 부분 수열(Longest Increasing Subsequence) (0) | 2021.01.31 |
---|---|
코딩테스트 준비할 때 필수 개념! <완전탐색> 알아보기 (4) | 2020.12.14 |
코딩테스트 준비할 때 필수 개념! <기본 자료구조> 알아보기 (0) | 2020.12.10 |
댓글