A로 B 만들기

2024. 9. 1. 18:00코딩테스트 입문

https://school.programmers.co.kr/learn/courses/30/lessons/120886

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명
문자열 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 과정이 필요 없이 내장 라이브러리만으로 풀이가 가능하기 때문이죠.

 

어떤 방법으로든 문제를 풀면 되긴 합니다.

'코딩테스트 입문' 카테고리의 다른 글

중복된 문자 제거  (0) 2024.09.03
k의 개수  (0) 2024.09.02
이진수 더하기  (0) 2024.08.31
치킨 쿠폰  (0) 2024.08.30
로그인 성공?  (0) 2024.08.29