반응형

programmers.co.kr/learn/courses/30/lessons/64064

 

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

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

programmers.co.kr

 

def solution(user_id, banned_id):
    answer = []
    if len(user_id) == len(banned_id): # user의 수와 ban_id 수가 같으면 모두 불량 사용자인 1가지 경우임
        return 1 			# 이 코드가 없으면 한 가지 test case에서 시간초과가 발생함..
    
    def equal(n1, n2): # *처리된 banned_id와 user_id가 일치될 수 있는지 판단하는 함수
        if len(n1) != len(n2):
            return False
        for i, j in zip(n1, n2):
            if i == '*' or j == '*':
                continue
            if i != j:
                return False
        return True

    def search(remain_user, remain_banned):
        # 사용자들과 불량사용자들을 모두 매치시킨 경우, 정상 사용자들의 경우를 중복 없이 저장
        if remain_banned == [] and remain_user not in answer:
            answer.append(remain_user) 
            return
        for ban_id in remain_banned:
            for us_id in remain_user:
                if equal(us_id, ban_id):
                    temp1 = remain_user[:]
                    temp2 = remain_banned[:]
                    temp1.remove(us_id)
                    temp2.remove(ban_id)
                    search(temp1, temp2)

    search(user_id, banned_id)
    
    return len(answer) # 정상으로 판단된 사용자 경우의 수 = 불량으로 판단된 사용자 경우의 수 이므로,

→ 더 좋은 방법이 많을것 같음. 추후에 방법이 생각나면 다시 구현해보자

반응형

'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글

키패드 누르기  (0) 2021.02.05
호텔 방 배정  (0) 2021.02.03
징검다리 건너기  (0) 2021.02.02
튜플  (0) 2021.02.01
크레인 인형 뽑기  (0) 2021.02.01

+ Recent posts