티스토리 뷰
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 함수로 중복 제거 과정이 필요없어진다.
'PS' 카테고리의 다른 글
Python 자주 쓰는 함수 정리 (0) | 2022.01.02 |
---|---|
백준 10610. 30 (0) | 2022.01.02 |
프로그래머스. 순위 (0) | 2021.12.30 |
프로그래머스. 합승 택시 요금 (플로이드 와샬) (0) | 2021.12.30 |
백준 1783. 병든 나이트 (0) | 2021.12.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- binary search
- 이분탐색
- 자료구조
- back tracking
- graph
- Implementation
- Python
- Dijkstra
- two pointer
- C++
- 조합
- Unity
- permutation
- BFS
- dfs
- Spring
- Tree
- recursion
- C
- greedy
- Stack
- MVC
- CSS
- Kruskal
- db
- Brute Force
- floyd warshall
- DP
- priority queue
- 재귀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
글 보관함