Git: https://github.com/Tarte12/CodingTest_KUT/commit/6e506cfaae082bb2a20905f81afb9f6abaac1087
1. 문제 접근 & 설계
- 문제는 총 7단계 규칙을 순서대로 적용해야 함
- 각 단계를 리스트(
level2, level3, ...)로 따로 두어 구현 => 눈에는 잘 들어오는데, 코드가 너무 길고 비효율적
- 최종적으로는
new_id를 최대한 덮어쓰는 방식으로 수정
2. 시행착오 & 디버깅 포인트
1) 2단계 - 허용 문자 필터
- 문제:
islower()/isdigit() 사용
=> 유니코드 문자가 포함되므로 완벽한 필터 X
- 교정: ASCII 한정 필터 필요
=> set("abcdefghijklmnopqrstuvwxyz0123456789-_.") 사용
2) 3단계 - 연속 마침표 처리
- 문제:
level3[-1]을 바로 비교
=> level3이 비어 있으면 IndexError
- 교정: ASCII 한정 필터 필요
if not level3 or level3[-1] != '.':
level3.append(word)
3) 4단계 - 앞뒤 마침표 제거
- 문제1:
[1:-1] 같은 슬라이싱으로 앞뒤를 동시에 잘라 데이터 손실
- 문제2:
level3 기준으로 두 번 자르면서 한쪽 수정이 무효화 → 숨김 테스트에서 "abc." → "abc" 처리가 안 되고 "abc." 그대로 남음
- 교정: 리스트를 앞/뒤 각각 조건부로 한 글자만 제거
5) 채점 결과: 정확도 64%
- 문제: 4단계 잘못된 처리(앞뒤 점 동시 제거 문제) + 2단계 유니코드 누수
- 교정: 정확도 100%
3. 추가 정리
1) 문자열 vs 리스트
- 문자열은 불변(immutable) → append, pop 불가
- 따라서 중간 과정에서 문자를 모을 땐 리스트 버퍼 사용 후 ''.join()으로 합침
- 하지만 대부분의 단계는 문자열 메서드(lower, strip, replace, 슬라이싱 등)로 바로 처리 가능
2) 파이썬 관용적 풀이
- for ch in new_id: → 문자열도 iterable이라 가능
- 불필요한 변수보다는 new_id 하나를 계속 덮어쓰기 하는 게 안전 + 깔끔