코테 준비/프로그래머스

[level 1] 숫자 짝꿍

쿠쿠*_* 2023. 5. 2. 16:46

https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이 문제도 크게 두 부분으로 나눠서 풀어본다.

1)  count() 함수를 사용해서 개수를 count해주고 원소가 두 정수에 존재할 경우에 더 작은 걸 take하기

=> 위에 방법을 안하고 dictionary를 사용해서 해주었다. count는 복잡할것같아서.. 오히려 dictionary가 한번에 count하기가 더 편한 것 같다. (그치만 count를 사용한 방법도 잘 봐두자.)

2) 모아진 공통된 수로 가장 큰 정수를 만들기

def solution(X, Y):
    d_1={a:0 for a in set(X)}
    d_2={a:0 for a in set(Y)}
    temp={}
    answer=[]
    
    # 각 X,Y에 있는 문자열에 대해 count해주기
    for i in X:
        d_1[i]+=1
    for j in Y:
        d_2[j]+=1
    
    # temp에다가 min함수를 사용해 공통으로 가진 최소의 수만큼 count한 값을 넣어주기
    for i in d_1:
        if i in d_2:
            temp[i]=min(d_1[i], d_2[i])
    
    # answer에다가 해당 수만큼 append시켜주기
    for a in temp:
        for numb in range(temp[a]):
            answer.append(a)
            
    if len(answer)==0:
        return '-1'
    if sum(list(map(int,answer)))==0:
        return '0'
    answer.sort(reverse=True)
    
    return ''.join(answer)

 

딕셔너리를 요긴하게 잘 쓰면 효율적인 것 같다. 앞으로 잘 써야지.

아래는 프로그래머스에서 가장 채택을 많이 받은 코드다.

 

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

'코테 준비 > 프로그래머스' 카테고리의 다른 글

[level 1] 옹알이(2)  (0) 2023.05.03
[level 1] 콜라 문제  (1) 2023.05.02
[level 1] 성격 유형 검사하기  (0) 2023.05.02
[level 1] 신고 결과 받기  (0) 2023.05.02
[level 1] 최소직사각형  (0) 2023.05.02