문제 사이트 : 코딩테스트 연습 - A로 B 만들기 | 프로그래머스 스쿨
TIL (Today I Learned) - 문자열 순서 바꾸기 문제 풀이
문제 개요
- 문제 설명: 문자열 before의 순서를 바꾸어 문자열 after를 만들 수 있는지 확인하는 문제.
- 제한 사항:
- before와 after의 길이는 같음.
- 문자열은 모두 소문자로 이루어져 있음.
- 반환값은 가능하면 1, 불가능하면 0.
오늘 배운 내용
- 문제 풀이 접근 방식
- 공통 문자 매칭:
- 두 문자열의 모든 문자가 동일해야 하고, 문자별 등장 횟수도 같아야 합니다.
- 리스트 활용:
- 두 문자열을 리스트로 변환해, 하나의 리스트에서 문자를 제거하며 매칭 여부를 확인
- 공통 문자 매칭:
- 코드 흐름
- 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
깨달은 점
- 리스트와 문자열의 활용
- 문자열을 리스트로 변환해 remove()를 사용하면, 특정 문자 제거가 가능.
- 하지만 remove()는 리스트에 존재하지 않는 문자를 제거하려 하면 ValueError를 발생시키므로, 조건문으로 사전에 검증 필요.
- 효율적인 비교 방식
- 이 코드는 매칭되지 않는 문자를 발견하는 즉시 0을 반환하므로, 불필요한 연산을 줄일 수 있음.
- 파이써닉한 방식과 개선 가능성
- 더 간단한 방식으로 문제를 해결할 수도 있음.
- 예: 문자열을 정렬한 뒤 비교.
def solution(before, after): return 1 if sorted(before) == sorted(after) else 0 - 정렬 방식은 코드가 간결하고, 모든 문자의 등장 횟수를 비교하므로 에러 가능성이 적음.
- 더 간단한 방식으로 문제를 해결할 수도 있음.
복습 계획
- 문자열 문제 풀이 방식 비교:
- 리스트 활용 vs. 문자열 정렬.
- 다양한 방식으로 문제를 해결하며, 효율성과 가독성을 비교.
- 추가 학습:
- 파이썬의 collections.Counter를 활용해 문자열 내 문자 빈도를 비교하는 방법도 학습.
from collections import Counter def solution(before, after): return 1 if Counter(before) == Counter(after) else 0
- 파이썬의 collections.Counter를 활용해 문자열 내 문자 빈도를 비교하는 방법도 학습.
배운 점 요약
- 리스트 활용: 문자열을 리스트로 변환하여 문자 제거 및 비교 가능.
- 문제 해결의 다양성: 정렬, Counter, 리스트 비교 등 다양한 방식으로 동일한 문제를 해결할 수 있음.
- 효율성과 가독성의 균형: 코드의 길이와 성능, 디버깅 용이성을 모두 고려해야 함.
오늘의 느낀 점
- 처음엔 remove()를 사용해 구현했지만, 코드 작성 후 다른 방식(정렬, Counter)을 학습하며 더 간결한 방법도 있다는 걸 깨달음.
- 문제 해결 방법이 여러 가지 있다는 걸 알게 되었고, 상황에 따라 적절한 방법을 선택하는 것이 중요하다는 걸 배움.
'내일배움캠프 TIL' 카테고리의 다른 글
| 2025.01.09TIL - 프로그래머스 문제풀이 (0) | 2025.01.09 |
|---|---|
| 2025.01.08TIL - 프로그래머스 문제풀이 (문자열) (0) | 2025.01.08 |
| 2025.01.06 TIL - 프로그래머스 입문 문제 풀이 (2) | 2025.01.06 |
| 2025.01.03 TIL- 클래스(2) (1) | 2025.01.03 |
| 2025.01.02TIL - 클래스 (2) | 2025.01.02 |