본문 바로가기
[스파르타코딩클럽]데이터분석 과정/PYTHON

[Python 코드카타] 61 ~ 63번 (프로그래머스)

by doo_ 2024. 1. 25.

61번 로또의 최고 순위와 최저 순위

> 번호를 맞출 때마다 rank에 -1을 해주는 방식으로 문제를 품, 케이스 1개만 틀렸는데.. 이유를 모르겠다..ㅠㅠ

def solution(lottos, win_nums):
    answer = []
    rank = 7
    # 최저 순위 구하기
    # 1) 해당 번호가 있다면 순위를 올려준다.
    for i in lottos :
        if i in win_nums :
            rank -= 1
    # 2) 단 아무 번호도 없다면 순위는 6
    if rank == 7 :
        answer.append(6)
    else :
        answer.append(rank)
    # 최고 순위 구하기
    # 3) 0의 숫자가 있다면 어떤 번호든 될 수 있기에 순위를 올려준다.
    for j in lottos :
        if j == 0 :
            rank -= 1
    # 4) 만약 0도 없을 수 있기 때문에 다음과 같이 코드 작성
    if rank == 7 :
        answer.append(6)
    else :
    answer.append(rank)
    answer.sort()
    return answer

> 깔끔한 답 👏👏 rank 리스트를 미리 만들어주고 맞춘 수를 인덱스로 표현

def solution(lottos, win_nums):

    rank=[6,6,5,4,3,2,1]

    cnt_0 = lottos.count(0)
    ans = 0
    for x in win_nums:
        if x in lottos:
            ans += 1
    return rank[cnt_0 + ans],rank[ans]

> set 집합 함수와 교집합을 활용하여 답안 👏

def solution(lottos, win_nums):
    rank = {
        0: 6,
        1: 6,
        2: 5,
        3: 4,
        4: 3,
        5: 2,
        6: 1
    }
    return [rank[len(set(lottos) & set(win_nums)) + lottos.count(0)], rank[len(set(lottos) & set(win_nums))]]
    # 교집합의 길이 + 0의 개수 = 최고 순위 / 교집합의 길이 : 최저 순위

 

62번 옹알이

def solution(babbling):
    answer = 0
    can = ['aya', 'ye', 'woo', 'ma']
    for i in babbling: 
        for c in can:
            if c*2 not in i :
                i = i.replace(c,' ')
        if i.isspace():  
            answer += 1
    return answer

 

63번 숫자짝꿍

> 61번에서 배운 set 함수와 count(i)를 활용해서 풀어봤다.

def solution(X, Y):
    answer = ''
    a = []
    same = set(X)&set(Y)
    for i in same :
        for j in range(min(X.count(i),Y.count(i))):
            a.append(i)
    if len(a) == 0 :
        return '-1'
    else: 
        a.sort(reverse = True)
        answer = ''.join(a)
    if a[0] == '0':
        return '0'
    return answer

> 우와..👏👏 9부터 0 순차적으로 확인함으로써 sort함수를 안쓰고 count()와 min()을 적절하게 활용 

def solution(X, Y):
    answer = ''

    for i in range(9,-1,-1) :
        answer += (str(i) * min(X.count(str(i)), Y.count(str(i))))

    if answer == '' :
        return '-1'
    elif len(answer) == answer.count('0'):
        return '0'
    else :
        return answer