1. 문제

1 - 1. 문제 설명
PROGRAMMERS-962 행성에 불시착한 우주비행사 머쓱이는 외계행성의 언어를 공부하려고 합니다. 알파벳이 담긴 배열 spell과 외계어 사전 dic이 매개변수로 주어집니다. spell에 담긴 알파벳을 한번씩만 모두 사용한 단어가 dic에 존재한다면 1, 존재하지 않는다면 2를 return하도록 solution 함수를 완성해주세요.
1 - 2. 제한사항
- spell 과 dic의 운서는 알파벳 소문자로만 이루어져있습니다.
- 2<= spell의 크기 <=10
- spell의 원소의 길이는 1입니다
- 1<=dic의 크기<=10
- 1<= dic의 원소의 길이 <= 10
- spell의 원소를 모두 사용해 단어를 만들어야 합니다
- spell의 원소를 모두 사용해 만들 수 있는 단어는 dic에 두개 이상 존재하지 않습니다
- dic과 spell 모두 중복된 원소를 갖지 않습니다
1 - 3. 입출력 예 설명
- 입출력 예#1
"p", "o" ,"s"를 조합해 만들 수 있는 단어가 dic에 존재하지 않습니다,따라서 2를 return합니다 - 입출력 예#2
"z","x","d"를 조합해 만등수 있는 단어가 "dzx"가 dic에 존재합니다 따라서 1을 return합니다 - 입출력 #3
"s", "o" ,"m","d"를 조합해 만들 수 있는 단어가 dic에 존재하지 않습니다,따라서 2를 return합니다
2. 문제해결방법
제 생각엔 이 문제의 핵심포인트는 dic과 spell 모두 중복된 원소가 없다는 것이다. 이 말을 보고 set을 생각했다. set은 중복값이 허용이 안되니까 ...? 그래서 spell의 알파벳과 dic의 단어를 비교를해서 spell의 알바벳이 들어간 단어를 찾아야겠다고 생각이 들었다.
def solution(spell, dic):
spell = set(spell)
for i in dic:
if spell.issubset(set(i)):
return 1
return 2
1. 먼저 spell 리스트를 set타입으로 만들었다.
2. for문을 이용해 dic의 단어를 하나씩 넣냈다
3. issubset함수를 이용해 만약 spell 알바벳이 dic의 단어에 포함이 되는지 구현해주는 코드이다. 만약 true가나오면 1을 return false가 나오면 2를 return하게 만들었다.
** issubset **
부분집합인지 아닌지 값을 doolean타입으로 반환해주는 메소드이다.
a.issubset(b) >>> b가 a의 부분집합인가 ? 맞으면 True , 틀리면 Fasle
3. 다른 사람 풀이
def solution(spell, dic):
for d in dic:
if sorted(d) == sorted(spell):
return 1
return 2
sort()를 써서 spell과 dic의 단어가 같으면 ... 1 을 반환한다는 코드가 이해안된다 ... 왜 정렬을 한 것에 같은걸 썼을까 ..
혹시 아시는분있으면 댓글로 설명부탁드립니다 ...
4. 느낀점
문제를 본 순간 set으로 풀어야지 생각을했었는데 막상 풀려고 하니까 set이 하나도 기억이 안나서 공부를 하면서 풀어봤다. 다시 set의 개념과 동작원리를 복습했다. 그리고 set에 대한 메소드를 공부하다가 우연히 issubset 메소드를 봤는데 혹시 이걸로 풀수 있지 않을까 싶어 구현을 해봤는데 정답이여서 굉장히 뿌듯한 기분이 들었다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 피자 나눠 먹기(3) (0) | 2023.04.04 |
---|---|
[프로그래머스] 중앙값 구하기_python (0) | 2023.04.04 |
[프로그래머스] 등수 매기기_python (0) | 2023.03.30 |
[프로그래머스] 피자 나눠 먹기(2)_Python (0) | 2023.03.29 |
[프로그래머스] 피자나눠먹기 (1)_python (0) | 2023.03.27 |