문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/120869
내 풀이
def solution(spell, dic):
new_arr = []
# spell의 원소가 전부 한 번씩 사용되어야함
# spell의 원소 중 하나라도 dic의 각 원소에 없으면 break.
# spell의 원소를 갖고 있는 dic을 new_arr에 추가
for d in dic:
for s in spell:
if s not in d:
break
new_arr.append(d)
# new_arr에는 spell의 각 원소를 포함하는 dic원소가 모두 들어가있음
for i in new_arr:
if new_arr.count(i) == len(spell):
return 1
return 2
주어진 문제에서는 spell의 원소가 모두 있어야 spell을 조합해 만들 수 있는 단어로 여겨진다.
따라서 dic의 원소와 spell의 원소를 모두 순회하며,
spell의 원소가 하나라도 d에 없으면 break.
spell의 각 원소가 d에 있으면 각 원소에 대응되는 값을 모두 new_arr에 담는다.
이제 new_arr에는 spell의 각 원소를 포함하는 dic의 원소가 모두 들어가있다.
예를 들어,
첫 번째 케이스를 보면,,
spell은 p, o, s이다.
dic의 원소 중 sod를 기준으로 보면,
sod는 p가 없으므로 new_arr에 담지 않는다. break를 진행하여 더 이상 진행하지 않는다.
두 번째 원소 eocd 역시 p 가 없으므로 new_arr에 담지 않고 break를 진행하지 않는다.
다음으로 두 번째 케이스를 확인해보겠다.
def에는 z가 없다. -> break
dww에는 z가 없다 -> break
dzx에는 z가 있다 -> dzx를 new_arr에 append
-> dzx에는 d가 있다 -> dzx를 new_arr에 append
-> dzx에는 x가 있다 -> dzx를 new_arr에 append
==> 이 후, spell의 원소의 개수만큼 new_arr에 같은 원소가 있으면 spell을 모두 조합한 단어이므로
1을 return한다.
다른 사람 풀이
def solution(spell, dic):
for d in dic:
if sorted(d) == sorted(spell):
return 1
return 2
이 풀이는 dic의 원소를 정렬한 것과 spell을 정렬한 것이 같으면
spell을 모두 사용하여 조합한 단어로 여겨 1을 return하는 코드이다.
굉장히 깔끔한 코드인듯하다!!
느낀점
생각보다 간단한 문제인데 나는 좀 어렵게 푼듯하다!
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 저주의 숫자 3 (0) | 2024.03.19 |
---|---|
[프로그래머스][PYTHON] Lv. 0 k의 개수 (0) | 2024.03.19 |
[프로그래머스][PYTHON] Lv. 0 안전지대 (0) | 2024.03.15 |
[프로그래머스][PYTHON] Lv. 0 숨어있는 숫자의 덧셈 (2) (0) | 2024.03.14 |
[프로그래머스][PYTHON] Lv. 0 다항식 더하기 (0) | 2024.03.14 |