[문제 링크] 👇
풀이
알파벳 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하여 루프를 종료한다.
👩💻 회고
개선된 코드로 제출하니 실행 시간이 절반으로 줄었다. 굳이 검사하지 않아도 될 건 미리 없애는 것이 좋겠다.
'SWEA' 카테고리의 다른 글
[SWEA] 12004. 구구단 1 (Python/D3) (0) | 2024.11.04 |
---|---|
[SWEA] 4299. 태혁이의 사랑은 타이밍 (Python/D3) (0) | 2024.11.04 |
[SWEA] 19185. 육십갑자 (Python/D3) (0) | 2024.11.03 |
[SWEA] 10912. 외로운 문자 (Python/D3) (0) | 2024.11.01 |
[SWEA] 1222. [S/W 문제해결 기본] 6일차 - 계산기1 (Python/D4) (0) | 2024.10.31 |