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

Python으로 문자열의 대문자와 소문자 순서가 일치하는지 확인하는 방법

문제 개요

영문 알파벳(대문자 또는 소문자)만 포함된 문자열 s가 주어졌을 때, 소문자들과 대문자들이 각각 동일한 순서를 따르는지 확인해야 합니다. 즉, 어떤 문자가 소문자로 여러 번 등장한다면, 같은 문자의 대문자도 동일한 횟수와 순서로 나타나야 합니다.

예를 들어 입력이 s = "piPpIePE"라면 결과는 True입니다. 소문자 "pie"와 대문자 "PIE"가 각각 추출되며, 두 문자열은 대소문자만 다를 뿐 문자 구성과 등장 순서가 완전히 일치하기 때문입니다.

해결 접근 방식

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

  • 빈 문자열 lowercaseuppercase를 초기화합니다.
  • 문자열 s를 처음부터 끝까지 순회하면서 각 문자를 검사합니다.
  • 현재 문자가 대문자라면 uppercase에 이어 붙이고, 그렇지 않으면 lowercase에 이어 붙입니다.
  • 순회가 끝나면 lowercase를 모두 대문자로 변환합니다.
  • 변환된 문자열과 uppercase가 같다면 True, 다르다면 False를 반환합니다.

핵심 아이디어는 간단합니다. 원본 문자열에서 소문자만 순서대로 모은 뒤 대문자로 변환했을 때, 대문자만 순서대로 모은 문자열과 정확히 같다면 두 그룹의 순서가 일치한다고 판단할 수 있습니다.

Python 구현 예제

def solve(s):
    lowercase = ""
    uppercase = ""
    for i in range(len(s)):
        if ord(s[i]) >= 65 and ord(s[i]) <= 91:
            uppercase += s[i]
        else:
            lowercase += s[i]
    to_upper = lowercase.upper()
    return to_upper == uppercase

s = "piPpIePE"
print(solve(s))

입력

"piPpIePE"

출력

True

코드 설명

위 코드에서는 ord() 함수를 사용해 각 문자의 아스키(ASCII) 코드 값을 확인합니다. 영어 대문자 'A'~'Z'의 아스키 코드 범위는 65~90이므로, 해당 범위에 속하면 대문자로 분류하여 uppercase에 추가하고, 그 외의 경우에는 lowercase에 추가합니다.

모든 문자를 분류한 후 lowercase.upper()로 소문자 문자열을 대문자로 변환하고, 이것이 uppercase와 동일한지 비교합니다. 두 문자열이 같으면 대문자와 소문자가 같은 순서로 배치되어 있다는 의미이므로 True가 반환됩니다.

개선된 구현 (isupper 활용)

아스키 코드 대신 파이썬의 내장 메서드 isupper()를 사용하면 코드를 더욱 직관적으로 작성할 수 있습니다.

def solve(s):
    lowercase = "".join(c for c in s if c.islower())
    uppercase = "".join(c for c in s if c.isupper())
    return lowercase.upper() == uppercase

이 버전은 리스트 컴프리헨션 스타일의 제너레이터 표현식과 join()을 활용해 가독성을 높였으며, 실행 결과는 동일하게 True를 출력합니다. 시간 복잡도는 두 구현 모두 O(n)으로, 문자열 길이에 비례하여 선형적으로 처리됩니다.