티스토리 뷰

Algorithm/Basic

[Algorithm] 문자열

feVeRin 2024. 3. 18. 14:23
반응형

* Python을 기준으로 합니다


문자열 (String)

- 개념

  • 문자열 : 문자들의 집합으로, emutable 객체
    • 배열처럼 사용할 수 있지만, 한번 선언된 문자열은 상수 취급을 하기 때문에 값을 임의로 변경할 수 없음
    • 대표적으로 `+` 연산은 문자열을 결합하는데, 이는 내부적으로 상수끼리의 합으로 취급됨
      - 결과적으로 새로운 상수를 생성하여 할당하는 방식으로 수행되므로 비효율적임
  • 주요 유형 : Palindrome/Anagram, 진법 변환, 문자열 조작(변환, 탐색, 정렬), 정규표현식

- 구현

1. 문자열 초기화

  • `' '`나 `" "` 사용
hello1 = 'Hello World!'
hello2 = "Hello World!"

2. 문자열 결합

  • `+` 나 `''.join()` 사용
  • 여기서 `+`는 각각의 문자열을 메모리에 복사하여 새로운 문자열을 만들기 때문에 $O(n^{2})$의 time complexity를 가짐
hi = 'Hello'
wrd = 'World!'

print(hi+wrd) #HelloWorld!
print(''.join([hi, wrd])) #HelloWorld!
print(' '.join([hi, wrd])) #Hello World!

3. 문자열 수정

  • `replace(대상 문자열, 대체 문자열)` 사용
hi1 = 'Hi'
hi2 = hi1.replace('i','ello')
print(hi2) #Hello​

4. 문자열 탐색

  • `find()` : 처음으로 발견되는 문자의 위치를 반환, 없으면 -1
hi = 'Hello World!'
print(hi.find('l')) #2
print(hi.find('z')) #-1
print(hi.find('rld')) #8
  • `rfind()` : 문자열 뒤에서부터 처음으로 발견되는 문자의 위치를 반환, 없으면 -1
hi = 'Hello World!'
print(hi.rfind('l')) #9
print(hi.rfind('z')) #-1
print(hi.rfind('rld')) #8

5. 문자열 역순

  • `[::-1]`과 같이 slicing을 이용하여 문자열을 뒤집음
hi = 'Hello World!'
print(hi[::-1]) #!dlroW olleH

6. 문자열/진법 변환

  • `ord()` : 문자를 input으로 하여 ASCII 코드 값을 반환
  • `chr()` : 정수를 input으로 하여 해당 문자를 반환
ord('H') #72
chr(72) #H
  • `bin(), oct(), hex()` : 입력된 정수를 각각 2진법, 8진법, 16진법으로 변환
bin(5) #0b101
oct(5) #0o5
hex(5) #0x5

7. 정규표현식

  • 정규표현식 (Regular Expression; regex) : 찾고자 하는 문자열이 매우 가변적일 때 사용
  • `re` 내장 library를 import 하여 사용함
    • `search(regex, 문자열)` : regex를 통해 문자열 전체에서 일치하는 결과 반환, 없으면 none
    • `match(regex, 문자열)` : regex를 통해 문자열 처음부터 일치하는 결과 반환, 없으면 none
    • `findall(regex, 문자열)` : regex를 통해 일치하는 모든 결과 반환, 없으면 `[]`
import re

hi = 'Hello World!'

print(re.match('[a-z]+', hi)) # None
print(re.search('[a-z]+', hi)) #ello
print(re.findall('l', hi)) #['l', 'l', 'l']

정규표현식의 예

 

반응형

'Algorithm > Basic' 카테고리의 다른 글

[Algorithm] 해시 테이블  (0) 2024.03.24
[Algorithm] 큐, 덱  (0) 2024.03.22
[Algorithm] 스택  (0) 2024.03.21
[Algorithm] 연결 리스트  (0) 2024.03.20
[Algorithm] 배열  (0) 2024.03.19
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday