티스토리 뷰

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 함수로 중복 제거 과정이 필요없어진다.

 

 

'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
링크
«   2025/06   »
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
글 보관함