code/[프로그래머스] python

[코딩 테스트 연습 입문] A로 B 구하기

오리는짹짹 2022. 12. 30. 16:41

문제

문자열 before after가 매개변수로 주어질 때, before의 순서를 바꾸어 after를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.

 

❗제한사항

  • 0 < before의 길이 == after의 길이 < 1,000
  • before와 after는 모두 소문자로 이루어져 있습니다.

 

입출력 예

 

입출력 예 설명

입출력 예 #1

  • "olleh"의 순서를 바꾸면 "hello"를 만들 수 있습니다.

입출력 예 #2

  • "allpe"의 순서를 바꿔도 "apple"을 만들 수 없습니다.

 

✔풀이

def solution(before, after):

    for alphabet in range(0, len(before)):
        if before[alphabet] in after:
            after=after.replace(before[alphabet],'',1)
            
    if after=="":
        answer= 1
    else:
        answer= 0
        
    return answer

📝설명

문자열 before의 순서를 바꿨을 때, after을 만들 수 있다면 1을, 없다면 0을 return시켜야 한다.

for문을 통해서 before의 알파벳을 하나씩 꺼내서, 그 알파벳에 after에 있다면 after의 해당 알파벳을 제거해나가도록 했다.

이 때 if문에서 사용한 replace()에 첫번쨰에는 빼고 싶은 문자를 넣었고, 그 문자를 제거하고 싶기 때문에 두번째에는 ''을 넣었다. 마지막으로 after에 제거하고싶은 문자가 여러개일 경우에, 하나만 삭제하기 위해서 1을 넣었다.

for문을 다 돌렸을 떄, after이 빈 문자열이라면 before과 after의 구성알파벳이 같다고 볼 수 있다.

따라서 return으로 1을 할 수 있도록 answer에 1을 저장한다.

반대의 경우에는 after이 비어있지 않다는 건데, 이는 before과 after의 구성 알파벳이 다르다는 말과 같고, answer에 0을 저장한다. 

 

👑모범 답안

🔎 sorted를 통해 알파벳 순으로 정렬하고, before과 after이 같다면 1을, 다르다면 0을 호출하도록 한다.

 

👀느낀 점

: replace()를 제대로 사용한 건 처음인 것 같다. 

sorted()로 하면 문제를 더 쉽게 풀 수 있었다 우하하

 

💻 문제 출처

코딩테스트 연습 - A로 B 만들기 | 프로그래머스 스쿨 (programmers.co.kr)