문제:
풀이방법:
여러가지 푸는 방법이 있겠지만, 가장 단순하면서 쉬운 방법을 사용하고자 한다. 브루트 포스 방식으로 가능한 모든 경우의 수를 만들고 그 중에서 해당하는 조건을 찾는 방법으로 했다.
우선 python의 itertools의 permutation을 사용해서 모든 경우의 수를 만든다. 그리고 각 조건에 맞는지 확인을 하는데, 조건의 길이와 다르면 바로 False로 가도록 하고, 길이가 같다면 그 때 조건을 비교하도록 한다.
이렇게 조건에 맞는 경우를 찾았다면 중복을 방지하기 위해서 set으로 값을 넣도록 한다.
1s
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import itertools
def check(case,banned_id):
for i in range(len(banned_id)):
if len(banned_id[i]) !=len(case[i]):
return False
else:
for j in range(len(banned_id[i])):
if banned_id[i][j]=="*":
continue
elif banned_id[i][j] != case[i][j]:
return False
return True
def solution(user_id,banned_id):
answer=[]
cases=list(itertools.permutations(user_id,len(banned_id)))
for case in cases:
if check(case,banned_id):
case=set(case)
if case not in answer:
answer.append(case)
return len(answer)
|
cs |
문제링크:
https://programmers.co.kr/learn/courses/30/lessons/64064
코딩테스트 연습 - 불량 사용자
개발팀 내에서 이벤트 개발을 담당하고 있는 무지는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량 ��
programmers.co.kr
'Algorithm > Python' 카테고리의 다른 글
[BOJ]9506. 약수들의 합 (0) | 2020.06.09 |
---|---|
[Programmers]2018 Kakao[1차]추석 트래픽 (0) | 2020.05.26 |
[BOJ]2468. 안전 영역 (0) | 2020.05.19 |
[BOJ]2167. 2차원 배열의 합 (0) | 2020.05.14 |
[BOJ]1350. 진짜 공간 (0) | 2020.05.12 |