프로그래머스의 로또 최고 순위와 최저 순위 문제이다. 

 

2021 Dev-Matching: 웹 백엔드 개발 기출 

 

코딩테스트 연습 - 로또의 최고 순위와 최저 순위

로또 6/45(이하 '로또'로 표기)는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 대표적인 복권입니다. 아래는 로또의 순위를 정하는 방식입니다. 1 순위 당첨 내용 1 6개 번호가 모두 일치 2 5개 번호

programmers.co.kr

 


def solution(lottos, win_nums):
    rank = [6, 6, 5, 4, 3, 2, 1]
    pop = [] 
    zero_cnt  = 0
    match_cnt = 0
    for elem in lottos:
        if elem in win_nums and elem not in pop: 
            match_cnt+=1
        if elem == 0: zero_cnt +=1
        pop.append(elem)
        
    most  = rank[match_cnt+zero_cnt]
    worst = rank[match_cnt]
    return [most, worst]

그다지 어렵지 않으리라 생각한다. 

가장 인기있는 풀이에서는, list의 count method를 사용했다. 

나도 카운트는 생각했는데, 정확한 메소드 사용법이 기억이 나질않아 쓰지 못했다. 

이것도 코테 보기전에 체크해야할 리스트에 추가... 

https://programmers.co.kr/learn/courses/30/lessons/92334?language=python3

2022 KAKAO BLIND RECRUMENT  기출


def solution(id_list, report, k):
    answer = []
    # id_list : 사용자 이름 
    # report  : 신고자 신고당한사람 
    result=dict()
    id_order=dict()
    for i, id in enumerate(id_list): #initialization
        result[id] = dict()
        result[id]['num']=0
        result[id]['reporter']=[]
        id_order[id]=i
        answer.append(0)
        
    for line in report: #data-ordering
        keys = list(result.keys())
        s, t = line.split(" ")
        exist_reporters = list(result[t]['reporter'])
        if s not in exist_reporters:
            result[t]['reporter'].append(s)
            result[t]['num'] +=1

    for i,id in enumerate(id_list):
        if result[id]['num']>=k:
            for reporter in result[id]['reporter']:
                answer[id_order[reporter]]+=1
    return answer

 

딕셔너리를 쓰면 간단히 해결되는 문제이다.

근데 다른사람 문제 푼걸 보면 현타온다.. 

 

나는 중복 지울때 다 검사했지만, set 매서드를 쓰면 그냥 해결된다라는것을 생각 못했다!! 

set메서드도 활용할 수 있도록 해야한다. 

최대한, 파이썬3의 내장 함수를 활용할 수 있도록 해야한다.

외부 라이브러리를 사용하지 못하기 때문이다.  

앞으로 코테풀면서 자주 나오는 활용 법들을 정리할 예정이다. 

 

 

+ Recent posts