Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 문자열이 아이소그램(Isogram)인지 확인하는 방법

문자열 s가 주어졌을 때, 해당 문자열이 아이소그램(Isogram)인지 판별하는 문제를 살펴보겠습니다. 아이소그램이란 모든 문자가 정확히 한 번씩만 등장하는 문자열을 의미합니다.

예를 들어 입력이 s = "education"이라면 출력은 True가 됩니다. "education"의 모든 문자(e, d, u, c, a, t, i, o, n)가 각각 한 번씩만 나타나기 때문입니다.

해결 접근 방식

이 문제는 다음 단계를 통해 해결할 수 있습니다.

  • 빈 리스트 char_list를 생성합니다.
  • 문자열의 각 문자를 순회하면서 다음을 확인합니다.
  • 문자가 알파벳인 경우:
  • - 이미 char_list에 존재하면 False를 반환합니다.
  • - 존재하지 않으면 char_list의 끝에 추가합니다.
  • 모든 문자를 검사한 후 문제가 없으면 True를 반환합니다.

여기서 핵심 아이디어는 이미 등장한 문자를 리스트에 기록해 두고, 새로운 문자가 이전에 나타났는지 매번 확인하는 것입니다. 만약 중복된 문자를 발견하면 즉시 False를 반환하여 불필요한 연산을 줄일 수 있습니다.

구현 예제

다음 코드를 통해 더 잘 이해할 수 있습니다.

def solve(word):
    char_list = []
    for char in word:
        if char.isalpha():
            if char in char_list:
                return False
            char_list.append(char)
    return True

s = "education"
print(solve(s))

입력

"education"

출력

True

추가 팁: 더 효율적인 방법

위 방법은 리스트에서 `in` 연산자를 사용하기 때문에 시간 복잡도가 O(n²)입니다. 파이썬의 set 자료구조를 활용하면 O(n)으로 개선할 수 있습니다.

def solve(word):
    return len(set(word.lower())) == len([c for c in word.lower() if c.isalpha()])

set은 중복을 허용하지 않으므로, 문자열을 set으로 변환한 길이와 원래 알파벳 문자 수가 같다면 그 문자열은 아이소그램입니다. 대소문자 구분 없이 비교하려면 lower() 메서드를 사용하는 것이 좋습니다.