Stay Hungry Stay Foolish

SWEA

[SWEA] 15230. 알파벳 공부 (Python/D3)

dev스카이 2024. 11. 4. 15:13

[문제 링크] 👇

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

알파벳 26자를 따로 저장한다.

입력받은 문자와 알파벳 26자의 인덱스가 일치하면 순서에 맞게 적혀 있다는 것이다.

일치하지 않으면 반복문을 중단시킨다.

 

Solution

T = int(input())  # 테스트 케이스 수
for test_case in range(1, T + 1):
    input_alpha = input().strip()
    alpha = "abcdefghijklmnopqrstuvwxyz"  # 알파벳
    result = 0

    while result < len(input_alpha):
        if input_alpha[result] == alpha[result]:
            result += 1
        else:
            break
    print(f"#{test_case} {result}")

 

개선할 점

위 코드도 간결하지만, 이미 result를 인덱스로 쓰고 있어서 더 효율적으로 개선할 수는 없다. 다만, 문자열 슬라이싱을 통해 코드의 가독성을 살짝 높일 수는 있다. alpha[:len(input_alpha)]로 input_alpha와 동일한 길이만큼의 alpha를 슬라이싱해서 두 문자열을 비교할 수 있다.

 

 

개선된 코드

T = int(input())  # 테스트 케이스 수
for test_case in range(1, T + 1):
    input_alpha = input().strip()
    alpha = "abcdefghijklmnopqrstuvwxyz"[:len(input_alpha)]  # 입력 길이만큼 슬라이싱
    result = 0

    for _, (a, b) in enumerate(zip(input_alpha, alpha)):
        if a != b:
            break
        result += 1
        
    print(f"#{test_case} {result}")

 

  • alpha[:len(input_alpha)]로 input_alpha와 동일한 길이로 알파벳을 제한하여 불필요한 비교를 줄인다.
  • enumerate를 사용해 인덱스와 문자를 동시에 받아와 input_alpha와 alpha가 다를 때 즉시 break하여 루프를 종료한다.

 

 

 

👩‍💻 회고

개선된 코드로 제출하니 실행 시간이 절반으로 줄었다. 굳이 검사하지 않아도 될 건 미리 없애는 것이 좋겠다.