문자열) Pro Lv1 신규 아이디 추가

Tarte·2025년 9월 5일

코딩테스트

목록 보기
21/28

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 하나를 계속 덮어쓰기 하는 게 안전 + 깔끔
profile
기술 블로그

0개의 댓글