728x90
1. 문제
programmers.co.kr/learn/courses/30/lessons/64064/solution_groups?language=python3
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)
참고:
728x90
'코딩 테스트' 카테고리의 다른 글
[프로그래머스] 징검다리 건너기 (Python) (0) | 2021.04.10 |
---|---|
[프로그래머스] 키패드 누르기 (C++) (0) | 2021.04.10 |
[프로그래머스] 순위 검색 (Python) (0) | 2021.03.30 |
[프로그래머스] 쿼드압축 후 개수 세기 (C++) (0) | 2021.03.30 |
[프로그래머스] 신규 아이디추천 (Python) (0) | 2021.03.29 |
댓글