문제 사이트 : 코딩테스트 연습 - A로 B 만들기 | 프로그래머스 스쿨

 

TIL (Today I Learned) - 문자열 순서 바꾸기 문제 풀이


문제 개요

  • 문제 설명: 문자열 before의 순서를 바꾸어 문자열 after를 만들 수 있는지 확인하는 문제.
  • 제한 사항:
    • before와 after의 길이는 같음.
    • 문자열은 모두 소문자로 이루어져 있음.
    • 반환값은 가능하면 1, 불가능하면 0.

오늘 배운 내용

  1. 문제 풀이 접근 방식
    • 공통 문자 매칭:
      • 두 문자열의 모든 문자가 동일해야 하고, 문자별 등장 횟수도 같아야 합니다.
    • 리스트 활용:
      • 두 문자열을 리스트로 변환해, 하나의 리스트에서 문자를 제거하며 매칭 여부를 확인
  2. 코드 흐름
    • list(before)와 list(after)를 생성하여 문자별로 비교.
    • before의 각 문자가 after에 있는지 확인.
      • 매칭되는 문자는 list_after에서 제거.
      • 매칭되지 않으면 바로 0 반환.
    • 모든 문자를 처리한 뒤, list_after가 비어 있다면 1 반환.
def solution(before, after):
    list_before = list(before)
    list_after = list(after)
    
    # 두 리스트의 공통된 문자 수를 기반으로 처리
    for letter in before:
        if letter in list_after:
            list_after.remove(letter)
        else:
            return 0  # 매칭되지 않는 문자가 있으면 바로 0 반환

    # 처리 후 리스트가 비어 있으면 완벽한 매칭
    return 1 if not list_after else 0

깨달은 점

  1. 리스트와 문자열의 활용
    • 문자열을 리스트로 변환해 remove()를 사용하면, 특정 문자 제거가 가능.
    • 하지만 remove()는 리스트에 존재하지 않는 문자를 제거하려 하면 ValueError를 발생시키므로, 조건문으로 사전에 검증 필요.
  2. 효율적인 비교 방식
    • 이 코드는 매칭되지 않는 문자를 발견하는 즉시 0을 반환하므로, 불필요한 연산을 줄일 수 있음.
  3. 파이써닉한 방식과 개선 가능성
    • 더 간단한 방식으로 문제를 해결할 수도 있음.
      • 예: 문자열을 정렬한 뒤 비교.
      def solution(before, after):
          return 1 if sorted(before) == sorted(after) else 0
      
    • 정렬 방식은 코드가 간결하고, 모든 문자의 등장 횟수를 비교하므로 에러 가능성이 적음.

복습 계획

  1. 문자열 문제 풀이 방식 비교:
    • 리스트 활용 vs. 문자열 정렬.
    • 다양한 방식으로 문제를 해결하며, 효율성과 가독성을 비교.
  2. 추가 학습:
    • 파이썬의 collections.Counter를 활용해 문자열 내 문자 빈도를 비교하는 방법도 학습.
      from collections import Counter
      
      def solution(before, after):
          return 1 if Counter(before) == Counter(after) else 0
      

배운 점 요약

  • 리스트 활용: 문자열을 리스트로 변환하여 문자 제거 및 비교 가능.
  • 문제 해결의 다양성: 정렬, Counter, 리스트 비교 등 다양한 방식으로 동일한 문제를 해결할 수 있음.
  • 효율성과 가독성의 균형: 코드의 길이와 성능, 디버깅 용이성을 모두 고려해야 함.

오늘의 느낀 점

  • 처음엔 remove()를 사용해 구현했지만, 코드 작성 후 다른 방식(정렬, Counter)을 학습하며 더 간결한 방법도 있다는 걸 깨달음.
  • 문제 해결 방법이 여러 가지 있다는 걸 알게 되었고, 상황에 따라 적절한 방법을 선택하는 것이 중요하다는 걸 배움.

 

+ Recent posts