ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4. 딕셔너리(해시맵)
    코딩테스트 2024. 3. 20. 00:30
    반응형

    로그인 성공? - https://school.programmers.co.kr/tryouts/85912/challenges

    dict 메소드 활용해서 리스트를 변환한 후 해결

    def solution(id_pw, db):
        hash_db = dict(db)
        if id_pw[0] in hash_db:
            ans = "login" if hash_db[id_pw[0]] == id_pw[1] else "wrong pw"
        else:
            ans = "fail"
        return ans
    

     


    성격 유형 검사하기 - https://school.programmers.co.kr/tryouts/85913/challenges

    zip으로 묶어서 비교하는게 포인트

    def solution(survey, choices):
        check = "RTCFJMAN"
        table = {"R":0, "T":0, "C":0, "F":0, 
                  "J":0, "M":0, "A":0, "N":0}
        for idx, c in enumerate(choices):
            x, y = survey[idx]
            if c > 4:
                table[y] += c-4
            elif c < 4:
                table[x] += 4-c
        ans = ""
        for c1, c2 in zip(check[::2], check[1::2]):
            if table[c1] >= table[c2]:
                ans += c1
            else:
                ans += c2
        return ans

     


    가장 가까운 같은 글자 - https://school.programmers.co.kr/tryouts/85914/challenges

    dict의 keys 메소드를 활용해 현재 문자의 출현 여부를 판단하는게 포인트

    def solution(s):
        ans = [-1 for _ in range(len(s))]
        cur_pos = {}
        for idx, c in enumerate(s):
            if c in cur_pos:
                ans[idx] = idx - cur_pos[c]
                cur_pos[c] = idx
            else:
                cur_pos[c] = idx
        return ans

     


    숫자 문자열과 영단어 - https://school.programmers.co.kr/tryouts/85915/challenges

    각 경우의 수를 dict로 만든 뒤 items로 순회하면서 변환

    def solution(s):
        answer = 0
        table = {"zero":0, "one":1, "two":2, "three":3, "four":4, "five":5,
                "six":6, "seven":7, "eight":8, "nine":9}
        for k, v in table.items():
            s = s.replace(k, str(v))
        return int(s)

     


    완주하지 못한 선수 - https://school.programmers.co.kr/tryouts/85916/challenges

    전체 순회하면서 하나하나 체크하고, 완주한 선수 del로 지워주는게 포인트

    def solution(participant, completion):
        dict_participant = {}
        for p in participant:
            if p in dict_participant:
                dict_participant[p] += 1
            else:
                dict_participant[p] = 1
        for c in completion:
            if c in dict_participant:
                dict_participant[c] -= 1
                if dict_participant[c] == 0:
                    del dict_participant[c]
        return list(dict_participant.keys())[0]

     


    전화번호 목록 - https://school.programmers.co.kr/tryouts/85917/challenges

    사전 순 정렬 후 비교하는게 포인트

    def solution(phone_book):
        phone_book.sort()
        for i in range(len(phone_book) - 1): # 인근 번호만 비교
            if phone_book[i] == phone_book[i + 1][:len(phone_book[i])]:
                return False
        return True

     


    의상 - https://school.programmers.co.kr/tryouts/85918/challenges

    수학적으로 사고 → 각 카테고리 별 옷 개수 + 1 들의 곱에서 모두 안입는 경우 1 빼줌

    def solution(clothes):
        category = {}
        for (name, c) in clothes:
            if c in category:
                category[c] += 1
            else:
                category[c] = 2
        ans = 1
        for v in category.values():
            ans *= v
        return ans-1

     


    베스트 앨범 - https://school.programmers.co.kr/tryouts/85919/challenges

    sort 메소드를 자유자재로 사용하는게 포인트. 하나의 곡만 존재할 수 있다는 예외 사항 주의

    def solution(genres, plays):
        records = {}
        for i in range(len(genres)):
            if genres[i] in records:
                records[genres[i]][0] += plays[i]
                records[genres[i]][1].append([plays[i], i])
            else:
                records[genres[i]] = [plays[i], [[plays[i], i]]]
        
        for k, v in records.items():
            v[1].sort(key=lambda x:(-x[0], x[1])) # 장르 내 정렬
        list_records = list(records.values())
        list_records.sort(key=lambda x: -x[0]) # 장르 별 정렬
        ans = []
        for i in range(len(records.keys())):
            ans.append(list_records[i][1][0][1])
            if len(list_records[i][1]) > 1:
                ans.append(list_records[i][1][1][1])
        return ans
    반응형

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

    6. 스택  (1) 2024.03.20
    5. 셋(집합)  (0) 2024.03.20
    3. 배열/리스트  (0) 2024.03.18
    2. 구현  (4) 2024.03.18
    1. 문자열 다루기  (2) 2024.03.17
Designed by Tistory.