여름의 서재
[프로그래머스] 불량 사용자 본문
728x90
📕 문제
https://programmers.co.kr/learn/courses/30/lessons/64064
💡 풀이법
1. 불량 사용자의 아이디 하나에서 나올 수 있는 제재 아이디의 리스트를 리턴하는 find라는 함수를 정의했다.
2. 처음 stack에 불량 사용자의 아이디와 길이가 같은 아이디만 넣는다.
3. n = 0 부터 돌면서 사용자의 아이디를 stack에서 pop해서 불량 사용자의 첫번째 글자와 사용자의 첫번째 글자가 같으면 stack에 넣는다.
4. while문을 다 돌고 만들어진 stack을 find_list에 담아준다.
5. 각 불량 사용자의 제재 사용자 리스트에서 하나씩 빼서 제재 사용자 목록을 만드는 make 함수를 정의했다.
6. find_list를 처음 인덱스부터 접근하면서 lst에 없는 id만 lst에 넣고 다시 n을 +1해서 make함수를 실행한다.
7. 모든 find_list의 원소를 다 돌면 result에 lst를 추가해준다.
def solution(user_id, banned_id):
def find(bad_id):
stack = list(filter(lambda x: len(x) == len(bad_id), user_id))
n = 0
while n < len(bad_id):
if bad_id[n] == '*':
n += 1
continue
c = len(stack)
for _ in range(c):
id = stack.pop(0)
if id[n] == bad_id[n]:
stack.append(id)
n += 1
return stack
def make(lst, n):
nonlocal result
if n == len(banned_id):
result.append(''.join(sorted(lst)))
return
for id in find_list[n]:
if not id in lst:
make(lst+[id], n+1)
find_list = []
for bad_id in banned_id:
find_list.append(find(bad_id))
result = []
make([], 0)
return len(set(result))
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드 (파이썬 & 자바) (0) | 2021.12.08 |
---|---|
[프로그래머스] 기능개발 (파이썬 & 자바) (0) | 2021.12.08 |
[프로그래머스] 큰 수 만들기 (0) | 2021.12.07 |
[프로그래머스] 멀쩡한 사각형 (0) | 2021.11.17 |
[프로그래머스] 수식 최대화 (0) | 2021.11.13 |
Comments