A로 B 만들기
2024. 9. 1. 18:00ㆍ코딩테스트 입문
https://school.programmers.co.kr/learn/courses/30/lessons/120886
문제 설명
문자열 before와 after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.
제한사항
- 0 < before의 길이 == after의 길이 < 1,000
- before와 after는 모두 소문자로 이루어져 있습니다.
입출력 예
before | after | result |
"olleh" | "hello" | 1 |
"allpe" | "apple" | 0 |
입출력 예 설명
입출력 예 #1
- "olleh"의 순서를 바꾸면 "hello"를 만들 수 있습니다.
입출력 예 #2
- "allpe"의 순서를 바꿔도 "apple"을 만들 수 없습니다.
두 개의 문자열 before, after이 주어지고, before을 재배열해서 after을 만들 수 있는지 구하는 문제입니다.
재배열한다는 게 순서 제한도 없는 듯 보이니, 이 문제는 동일한 문자들이 동일한 개수를 갖는지 구하면 풀 수 있습니다.
또 다른 접근법으로는 문자들을 정렬했을 때 동일한 순서로 정렬되는지 확인하면 구할 수 있습니다.
위의 방법은 Counter을, 아래의 방법은 리스트와 정렬을 사용한 방법입니다.
1. Counter 패키지 사용
# Counter 패키지를 import합니다.
from collections import Counter
def solution(before, after):
# before, after의 문자들을 셉니다.
bCnt, aCnt = Counter(before), Counter(after)
# Counter 객체가 동일한지 검사합니다.
return int(bCnt == aCnt)
2. 리스트 + 정렬 사용
def solution(before, after):
# before, after을 문자 리스트로 정렬합니다.
bList = sorted(before)
aList = sorted(after)
# 리스트가 동일한지 확인합니다.
return int(bList == aList)
저는 개인적으로 아래 방법을 선호하는 편입니다.
Counter 패키지가 편하기는 하지만 어쨌든 import 과정이 필요한데, 아래 방법은 import 과정이 필요 없이 내장 라이브러리만으로 풀이가 가능하기 때문이죠.
어떤 방법으로든 문제를 풀면 되긴 합니다.