728x90
반응형
- 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17686
- level2
- 문자, 숫자 판별 함수
Q1) 문제를 어떻게 이해했나요?
A1) 파일명은 [HEAD][NUMBER][TAIL] 형태
정렬 기준은 다음과 같아요:
1. HEAD를 대소문자 구분 없이 정렬 (사전 순)
2. HEAD가 같으면 NUMBER를 정수로 비교해 정렬
3. 둘 다 같으면 입력 순서를 유지 (Stable Sort)
Q2) 문제를 어떻게 풀 예정인가요?
A2)
1. 파일명을 HEAD, NUMBER, TAIL로 나누기
2. HEAD는 소문자로 변환해서 비교
3. NUMBER는 정수로 변환해서 비교
4. 정렬 후 원래 문자열 반환
💫 최적화된 코드 (정규표현식 안쓰고, 하나씩 순회하는 방법)
def solution(files):
def split_file(index, file):
head, number, i = '', '', 0
length = len(file)
while i < length and not file[i].isdigit():
head += file[i]
i += 1
while i < length and file[i].isdigit():
number += file[i]
i += 1
return (head.lower(), int(number), index, file) # index 추가!
# 튜플 정렬 → 정렬 기준은 head, number, index 순서
# i = 0
# f = files[0]
for i, f in enumerate(files):
files[i] = split_file(i, f)
# files[i] = (files[i][0], files[i][1], i, files[i][3]) # index 추가
sorted_files = sorted(files)
# 결과에서 파일명만 추출
return [x[3] for x in sorted_files]
함수명 설명 🧸💕
isdigit() | 문자열이 숫자(0~9)로만 구성됐는지 확인 | '123'.isdigit() → True |
isalpha() | 문자열이 알파벳(az, AZ)만 포함했는지 확인 | 'abc'.isalpha() → True |
isalnum() | 알파벳 + 숫자로만 구성됐는지 확인 | 'abc123'.isalnum() → True |
isspace() | 문자열이 공백 문자(스페이스 등)인지 확인 | ' '.isspace() → True |
islower() | 문자열이 소문자로만 구성됐는지 확인 | 'abc'.islower() → True |
isupper() | 문자열이 대문자로만 구성됐는지 확인 | 'ABC'.isupper() → True |
728x90
반응형
'Algorithm' 카테고리의 다른 글
[카카오 코테 2022 | python] 주차 요금 계산 (0) | 2025.06.24 |
---|---|
[카카오 코테 2019 | python] 인턴십크레인 인형뽑기 게임 ✅ (1) | 2025.06.23 |
[백준 15649 | python] N과 M (1) (백트레킹) (0) | 2025.06.21 |
[카카오 코테 2018 | python] 비밀지도 (0) | 2025.06.19 |
[카카오 코테 2018 | python] [1차] 다트 게임 (0) | 2025.06.19 |