본문 바로가기
개인공부/코테 및 알고리즘

코딩테스트 준비할 때 필수 개념! <문자열 처리> 알아보기

by BuyAndPray 2020. 12. 7.
반응형

기본적으로 코딩 테스트를 준비할 때 그리디, 구현(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 정규표현식

사실 정규표현식까지 꼭 알아야 할 필요는 없다. 정규표현식을 몰라도 문자열 처리 문제들을 푸는데 아무런 지장이 없기 때문이다. 하지만 정규표현식까지 알고 있다면 문자열 처리 문제를 훨씬 더 짧은 코드로 빠르게 풀 수 있을 것이다. 전쟁터에 나가는데 무기 하나라도 더 들고나가면 좋지 않을까.

 

정규표현식을 알고 싶은 사람은 아래 포스팅을 참고하길 바란다.

 

 

Python 정규표현식 완전정복!

* Regular Expression HOWTO를 참고하여 작성되었습니다. 정규표현식이란? 정규표현식(정규식)은 복잡한 문자열 처리를 위해 사용되는 기법으로 특정 문자열 내에서 내가 찾고자 하는 패턴을 쉽게 찾을

buyandpray.tistory.com

 

함께 풀면 좋은 문제들

 

코딩 테스트 준비할 때 필수 개념! 시리즈

반응형

댓글