PS
프로그래머스. 불량 사용자
tose33
2021. 12. 30. 20:31
https://programmers.co.kr/learn/courses/30/lessons/64064
코딩테스트 연습 - 불량 사용자
개발팀 내에서 이벤트 개발을 담당하고 있는 "무지"는 최근 진행된 카카오이모티콘 이벤트에 비정상적인 방법으로 당첨을 시도한 응모자들을 발견하였습니다. 이런 응모자들을 따로 모아 불량
programmers.co.kr
재귀형식의 DFS 방식으로 풀었다.
순열을 만들듯이 각 불량이용자 아이디와 이용자 아이디를 대조해봐서 제외되어야 할 아이디가 될 수 있다면 벡터에 넣는 방식이다.
제외되어야 할 아이디인지 판단은
1. 길이가 같지 않다면 아니다
2. 길이가 같다면, 유저 아이디에 *을 같은 위치에 넣었을때 같은 문자열이 아니라면 아니다.
이렇게 하면 다음과 같이 될 수 있는 모든 경우를 구할수 있다.
input:
vector<string> user_id =
{
"frodo", "fradi", "crodo", "abc123", "frodoc"
};
vector<string> banned_id =
{
"fr*d*", "*rodo", "******", "******"
};
경우의수:
그런데 나열된 순서와 관계없이 아이디 목록의 내용이 동일하다면 같은 것으로 처리
위 조건 때문에,
frodo crodo abc123 frodoc
frodo crodo frodoc abc123
이런 경우 하나로 처리해야한다.
따라서 모든 경우를 저장해 놓고, 정렬 한후 erase, unique 함수를 이용해 중복을 제거해서 남은 경우의수의 갯수가 답이다.
user_id 벡터의 최대크기가 8이기 때문에, 시간초과 걱정은 없다.
다른 분들 코드를 참조해 set 컨테이너를 이용해봤다.
sort,unique, erase 함수로 중복 제거 과정이 필요없어진다.