프로그래머스 코딩테스트 고득점 Kit의 문제입니다.
https://programmers.co.kr/learn/challenges?tab=algorithm_practice_kit
문제
https://programmers.co.kr/learn/challenges
내가 작성한 코드
import re
from collections import defaultdict
def set_tuple(candidates, d, crnt, result):
for id in candidates[d]:
if id not in crnt:
crnt.append(id)
if d == len(candidates)-1:
result.append(crnt[:])
else:
set_tuple(candidates, d+1, crnt, result)
crnt.pop()
def solution(user_id, banned_id):
answer = 0
candidates = []
for banned in banned_id:
pattern = re.compile("^" + re.sub("\*", ".", banned) + "$")
crnt = []
for id in user_id:
if re.search(pattern, id):
crnt.append(id)
candidates.append(crnt)
comb = []
set_tuple(candidates, 0, [], comb)
check = defaultdict(bool)
for res in comb:
res = frozenset(res)
if len(res) == len(banned_id) and not check[res]:
check[res] = True
answer += 1
return answer
- brute-force
- banned id에 해당하는 id를 모두 색출
- 가능한 모든 id의 조합에 대해 중복되는 조합 제외하고 카운팅
다른 사람이 작성한 코드
None
기억해야할 것
- brute-force를 떠올리는 것이 힘든 것 같다
- 무언가 다른 방법이 있을 거라 생각하면 시간을 많이 소모했다
- 중복이 제거된 집합이나 조합 방법을 도출하고 싶어했다
'코딩테스트' 카테고리의 다른 글
[프로그래머스][KAKAO_인턴][2019] 징검다리 건너기 (0) | 2021.09.08 |
---|---|
[프로그래머스][KAKAO_인턴][2019] 호텔 방 배정 (0) | 2021.09.08 |
[프로그래머스][KAKAO_인턴][2019] 튜플 (0) | 2021.09.08 |
[프로그래머스][KAKAO_인턴][2020] 크레인 인형뽑기 게임 (0) | 2021.09.08 |
[프로그래머스][KAKAO_인턴][2020] 동굴 탐험 (0) | 2021.09.08 |