greenhelix
greenhelix
greenhelix
05-15 20:50
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

불량사용자 - 카카오 코딩테스트
Algorithm/Algorithm

불량사용자 - 카카오 코딩테스트

2021. 5. 6. 17:43

불량사용자 

2019 카카오 개발자 겨울 인턴십

Level 3

 

응모자가 아래와 같이 있고, 불량으로 응모한 아이디가 있다. 이를 걸르기 위해 불량아이디인 경우를 모두 뽑아내라.

응모자 아이디 불량 사용자
frodo fr*d*
fradi abc1**
crodo  
abc123  
frodoc  
제재 아이디  경우1 제재 아이디 경우2
frodo fradi
abc123 abc123

Retrun 값은 2가 된다. 

 

입력은 배열의 형태로 주어진다.

["frodo", "fradi", "crodo", "abc123", "frodoc"]
["fr*d*", "abc1**"]

Permutations를 사용하여 푼다. 

1. 사용자 아이디의 조합을 불량 사용자 인원의 수 만큼 조합을 만들어낸다. 

2. 이러한 조합에서 각 조합을 check()함수를 통해서 문자열 하나하나 조건이 맞는지 반복문을 돌려준다. 

3. 조건이 다 맞은 아이디 조합의 경우 answer에 추가해준다. (set()을 사용하여 중복을 제거 해준다.)

4. 마지막으로 answer의 길이를 뽑아내면 모든 경우의 수가 된다. 

rom itertools import permutations as pm
user = ["frodo", "fradi", "crodo", "abc123", "frodoc"]
bann = ["fr*d*", "*rodo", "******", "******"]


def check(kind, bann):
    for i in range(len(kind)):
        if len(kind[i]) != len(bann[i]):  # 아이디 조합의 길이가 다른면 바로 False
            return False
        for j in range(len(kind[i])):  # 각 아이디의 글자를 비교
            if bann[i][j] == '*':  # *부분은 아무 거나 와도 상관없으므로 통과
                continue
            elif bann[i][j] != kind[i][j]:  # 글자가 다른것이 있으면 바로 False
                return False
    return True


def solution(user, bann):
    answer = []
    kinds = list(pm(user, len(bann)))
    # print(kinds)
    for i in kinds:
        if check(i, bann):  # 아이디 조합별로 글자를 비교하여 통과된 경우 해당 아이디 조합을 사용

            i = set(i)  # set으로 변경 - 중복 제거

            if i not in answer:
                print('------')
                print(i)
                answer.append(i)

    print('answer:', answer)
    return len(answer)


print(solution(user, bann))

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Algorithm' 카테고리의 다른 글

Undirected Graph Adjacency List, Matrix:: 무 방향 그래프, 인접 목록, 행렬  (0) 2021.05.12
Binary Search 이진 탐색 이분 탐색  (0) 2021.05.06
🧩 코딩 테스트 정복기 @21#B*06  (0) 2021.02.18
    'Algorithm/Algorithm' 카테고리의 다른 글
    • [프로그래머스] 수식 최대화
    • Undirected Graph Adjacency List, Matrix:: 무 방향 그래프, 인접 목록, 행렬
    • Binary Search 이진 탐색 이분 탐색
    • 🧩 코딩 테스트 정복기 @21#B*06
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바