본문 바로가기
Algorithm/etc

[파이썬] 프로그래머스 : 불량 사용자 (Lv.3)

by 베짱이28호 2023. 10. 13.

[파이썬] 프로그래머스 : 불량 사용자 (Lv.3)

 

프로그래머스

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

programmers.co.kr


풀이

방향성 생각

  • 케이스 수 매우 적다. 완탐으로 탐색
  • 두 문자열을 비교한다. 길이가 같아야 하고, 모든 위치에서 알파벳이 같아야함.
  • *있으면 그 위치는 패스
  • answer라는 set에 저장하려면 집합은 안된다. 튜플로 넣는다.
  • 튜플에서는 순서가 보장되니 같은 군집이라도 다르게 표현되므로 정렬을 해서 저장

전체코드

from itertools import permutations as P

def solution(user_id, banned_id):
    
    def check(user, ban):   
        if len(user) != len(ban):
            return False     
        for a,b in zip(user,ban):        
            if b != '*' and a != b:
                return False           
        return True
    
    answer = set()
    for temp in P(user_id,len(banned_id)):
        flag = True
        for user,ban in zip(temp,banned_id):
            if not check(user,ban):
                flag = False
                break
        if flag:
            answer.add(tuple(sorted(temp)))
    
    return len(answer)

 

코멘트

처음에는 트라이처럼 풀어보려고 했는데 브루트포스가 나은거같아서 완탐으로 진행

댓글