ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5. 셋(집합)
    코딩테스트 2024. 3. 20. 23:07
    반응형

    외계어 사전 - https://school.programmers.co.kr/tryouts/85920/challenges

    def solution(spell, dic):
        answer = 0
        for item in dic:
            check = True
            for c in spell:
                if c not in item:
                    check = False
                    break
            if check:
                return 1
        return 2

     


    중복된 문자 제거 - https://school.programmers.co.kr/tryouts/85921/challenges

    def solution(my_string):
        ans = ""
        table = set()
        for c in my_string:
            if c not in table:
                ans += c
                table.add(c)
        return ans

     


    최빈값 구하기 - https://school.programmers.co.kr/tryouts/85922/challenges

    set 활용해서 최빈값 기억

    def solution(array):
        table = dict()
        max_n = set()
        max_cnt = 1
        for n in array:
            if n in table:
                table[n] += 1
            else:
                table[n] = 1
            if table[n] > max_cnt:
                max_cnt = table[n]
                max_n = {n}
            if table[n] == max_cnt:
                max_n.add(n)
        if len(max_n) > 1:
            return -1
        else:
            return list(max_n)[0]

     


    포켓몬 - https://school.programmers.co.kr/tryouts/85923/challenges

    def solution(nums):
        answer = 0
        n = len(nums)
        cnt = set(nums)
        if len(cnt) > n//2:
            return n//2
        else:
            return len(cnt)

     


    둘만의 암호 - https://school.programmers.co.kr/tryouts/85924/challenges

    skip 최대 길이 10이므로 최소 패턴 길이 16, index 최대 길이 20이므로 패턴 길이 3배까지 해야됨

    def solution(s, skip, index):
        pattern = "abcdefghijklmnopqrstuvwxyz"
        for c in skip:
            pattern = pattern.replace(c, "")
        pattern *= 3
        ans = ""
        for c in s:
            next_pos_index = (pattern.find(c)) + index
            ans += pattern[next_pos_index]  
        return ans

     


    신고 결과 받기 - https://school.programmers.co.kr/tryouts/85925/challenges

    중복 신고 허용 안되므로, set으로 기록한 뒤 신고 인원이 k명 이상이면 1씩 더해주도록 함

    def solution(id_list, report, k):
        id_reporting = {v:set() for v in id_list}
        for record in report:
            id1, id2 = record.split(" ")
            id_reporting[id2].add(id1)
        
        result = [0 for _ in range(len(id_list))]
        mapping = {k:idx for idx, k in enumerate(id_list)}
        for key, value in id_reporting.items():
            if len(value) >= k:
                for id_for_mail in value:
                    result[mapping[id_for_mail]] += 1
        return result
    반응형

    '코딩테스트' 카테고리의 다른 글

    7. 큐와 데크  (0) 2024.03.21
    6. 스택  (1) 2024.03.20
    4. 딕셔너리(해시맵)  (0) 2024.03.20
    3. 배열/리스트  (2) 2024.03.18
    2. 구현  (5) 2024.03.18
Designed by Tistory.