-
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
반응형