본문 바로가기
알고리즘

Programmers - 불량 사용장(Python)

by 장중앙 2021. 10. 4.

https://programmers.co.kr/learn/courses/30/lessons/64064?language=python3 

 

코딩테스트 연습 - 불량 사용자

개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량

programmers.co.kr

 

풀이

유저 ID를 불량 아이디 개수에 맞게 조합하여 탐색

  - 매칭되는 유저와 불량 아이디의 길이가 같아야함

  - 불량 사용자와 유저의 문자를 비교

    - 불량 사용자의 문자가 '*'이 아니라면 유저와 같은 문자여야함

  * 위의 조건에 부합하고 현재 조합된 유저 아이디가 List에 없다면 List에 추가

  

 

from itertools import permutations

def isMatch(candidate, banned_id):
    # 문자마다 비교
    for i in range(len(candidate)):
        if banned_id[i]=='*':continue
        # 불량 사용자의 문자가 *이 아니고 아이디가 다르면 False
        elif (banned_id[i] != candidate[i]):
            return False
    return True

def check(candidate, banned_id):
    # 조합에 따른 유저 ID의 후보와 불량 사용자 아이디 각각을 비교
    for i in range(len(banned_id)):
        # 불량 사용자와 유저의 아이디 길이가 다르면 false
        if len(candidate[i])!=len(banned_id[i]):
            return False
        # 길이가 같다면 해당 쌍을 비교
        if isMatch(candidate[i], banned_id[i]) is False:
            return False
    return True

def solution(user_id, banned_id):
    answer = []
    
    for candidate in permutations(user_id, len(banned_id)):
        if check(candidate, banned_id) is True:
            res=set(candidate)
            if res not in answer:
                answer.append(res)
            
    return len(answer)

'알고리즘' 카테고리의 다른 글

BOJ 14889 - 스타트와 링크(C++)  (0) 2021.10.05
BOJ 1912 - 연속합(C++)  (0) 2021.10.05
Programmers - 복서 정렬하기(C++)  (0) 2021.10.04
Programmers - 모음사전(Python)  (0) 2021.09.29
BOJ 3190 - 뱀(C++)  (0) 2021.09.29

댓글