본문 바로가기
코딩 테스트

[프로그래머스] 불량 사용자 (Python)

by zoodi 2021. 4. 5.
728x90

1. 문제

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

 

프로그래머스

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

programmers.co.kr

 

2. 풀이

1) banned_id 별 user_id에서 일치하는 유저 아이디를 찾아낸다.

   *rodo : [frodo, crodo]

 

2) 2중 포문 (res) 을 돌면서 찾은 유저아이디가 각 내부 리스트에 존재하지 않으면 추가해준다.

기존에 있던 리스트에 추가해주기 위해서 c+user[i] 사용

즉, res의 한 행은 경우의 수가 된다.

이 경우의 수를 찾는 방법을 잘 모르겠어서 다른 사람의 코드를 참고했다. (참조)

 

3) res 2차원 배열을 돌면서 set을 해주고 answer 리스트에 존재하지 않으면 추가한다.

set을 사용해서 중복되는 경우의 수 제거

 

3. 코드

def solution(user_id, banned_id):
    answer = []
    res = [[]]

    for ban in banned_id:
        li = []
        for user in user_id:
            if(len(ban) != len(user)):
                continue
            else:
                ok = True
                for i in range(len(ban)):
                    if(ban[i] == '*' or ban[i] == user[i]):
                        continue
                    elif(ban[i]!=user[i]):
                        ok = False
                        break
                if(ok == True):
                    for c in res:
                        if user not in c:
                            li.append(c + [user])
        res=li
    #print(res)
    for s in res:
        if set(s) not in answer:
            answer.append(set(s))
    
    return len(answer)

참고:

dev-note-97.tistory.com/169

 

[프로그래머스] 불량 사용자 / Python / 반례

문제주소 :programmers.co.kr/learn/courses/30/lessons/64064 코딩테스트 연습 - 불량 사용자 개발팀 내에서 이벤트 개발을 담당하고 있는 무지는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로

dev-note-97.tistory.com

 

728x90

댓글