ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 문자열 알고리즘(1)-애너그램 찾기, 팰린드롬 찾기
    Algorithm 2025. 2. 9. 18:38

    문자열 알고리즘

    문자열 알고리즘은 기술 면접에 가장 자주 나오는 알고리즘입니다.

    문자열 알고리즘에서 가장 많이 나오는 주제로는

    • 애너그램 찾기
    • 팰린드롬 찾기
    • 마지막 숫자
    • 시저의 암호

    등이 있습니다.

     

    이번 블로그에서는 애너그램 찾기팬린드롬 찾기 알고리즘에 대해 공부해보겠습니다.

    애너그램 찾기

    애너그램이란 숫서와 대소에 관계없이 똑같은 문자로 구성된 두 문자열을 의미합니다. 예를 들어 Car와 arc는 애너그램입니다. 

     

    먼저 s1과 s2가 애너그램인지 아닌지를 판별해주는 함수를 작성해보겠습니다.

    1. 먼저 s1, s2를 인자로 받습니다.
    2. s1 ,s2 둘 다 띄어쓰기를 없애고 대문자를 소문자로 바꿉니다.
    3. 둘 다 정렬을 한 상태로 같은지 비교합니다.
    4. 두 인자가 같다면 True, 다르다면 False를 리턴합니다.

    시간 복잡도

    👉애너그램을 찾는 알고리즘은 sorted함수를 사용하므로 0(n log n)을 따릅니다.

     

    팬린드롬 찾기

    팬린드롬(회문)이란 앞에서 읽으나 거꾸로 읽으나 똑같은 단어를 뜻합니다. 예를 들어 mom, wow, Hannah 등이 모두 팰린드롬 입니다.

     

    python 함수 - 문자열 슬라이싱
    문자열 슬라이싱은 string[start:end:step]으로 나누어져 있습니다.
    • start: 부분 문자열의 시작 인덱스입니다. 이 인덱스의 문자는 부분 문자열에 포함됩니다. 시작 인덱스를 생략하면 기본값인 0이 지정됩니다. 
    • end: 부분 문자열의 끝 인덱스입니다. 이 인덱스의 문자는 부분 문자열에 포함되지 않습니다. end가 생략되거나 지정된 값이 문자열 길이를 초과하면 기존 문자열의 길이와 동일하다고 가정합니다. 
    • step: 현재 문자에서 step간격으로 문자를 추출합니다. step을 생략하면 기본값인 1로 설정됩니다.

     

    따라서 

    를 출력하면

    위의 결과가 출력됩니다.

     

    이를 이용하여 문자열이 팰린드롬인지를 확인해보는 코드를 작성해보겠습니다.

     

    1. 먼저 s1이라는 문자열을 인자로 받습니다.
    2. s1에 존재하는 대문자들을 모두 소문자로 바꿉니다.
    3. 그리고 그 s1을 s1의 문자열을 뒤집은 s1과 비교하고 같으면 True, 다르면 False를 리턴합니다.

    Hannah라는 단어가 팰린드롬인지 is_palindrome함수를 사용해서 확인해보면

     

    True를 리턴하는 것을 알 수 있습니다.

     

    시간 복잡도

    👉리스트를 뒤집기 위해서는 요소 전체를 하나씩 비교하야 합니다. 따라서 전체 알고리즘의 시간 복잡도는 0(n)을 따릅니다. 

     

     

    'Algorithm' 카테고리의 다른 글

    Sort Algorithm-정렬 알고리즘(2)  (0) 2025.02.07
    Sort Algorithm-정렬 알고리즘(1)  (0) 2025.02.02
    Search Algorithm-탐색 알고리즘  (0) 2025.01.27
    Ierative Algorithm-반복 알고리즘  (0) 2025.01.26
Designed by Tistory.