코딩테스트 문제

[프로그래머스/Python] 숫자 짝궁

왕초보코딩러 2024. 1. 11. 15:07
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

X, Y 의 공통된 수가 없으면 -1 리턴, 공통된 수가 있다면 최대값을 만들어서 리턴


 

1. min() 사용

0~9 갯수를 저장할 리스트를 만든다

for문을 돌면서 각 리스트에 갯수 저장

최대값을 만들기 위해 9부터 0까지 아래로 내려간다

둘 다 리스트 안이 0이 아닐 때 두 리스트 중 최솟값을 찾는다 : min()

최솟값만큼 숫자 반복

 

 

문자열 반복 : *

예) 'a' * 3 -> 'aaa'

 

def solution(X, Y):
    list_x = [0]*10
    list_y = [0]*10
    answer = ''
    for i in range(len(X)):
        list_x[int(X[i])] += 1
        
    for i in range(len(Y)):    
        list_y[int(Y[i])] += 1
        
    for i in range(9, -1, -1):
        if list_x[i] != 0 and list_y[i] !=0:
            answer += str(i) * min(list_x[i], list_y[i])
    if len(answer) == 0:
        return '-1'
    if answer[0] == '0':
        return '0'
    return answer

 

아무래도 for문을 3번 돌려서 시간이 걸린다.

 

 

2. min(),  count() 사용

최대값을 만들기 위해 9부터 0까지 아래로 내려간다

숫자가 몇 개 들어있는지 확인 : count()

둘 다 0이 아닐 때 둘 중 최솟값만큼 숫자 반복

def solution(X, Y):
    answer = ''
        
    for i in range(9, -1, -1):
        x_count = X.count(str(i))
        y_count = Y.count(str(i))
        if x_count != 0 and y_count !=0:
            answer += str(i) * min(x_count, y_count)
    if len(answer) == 0:
        return '-1'
    if answer[0] == '0':
        return '0'
    return answer

 

 

리스트명.count(찾을 문자열)

https://blockdmask.tistory.com/410

 

[python] 파이썬 count, len 함수 설명과 에제

안녕하세요. BlockDMask 입니다. 오늘은 파이썬 빌트인 함수들중 문자열에서 쓸 수 있는 함수 2가지를 가지고 왔습니다. 미리 요약을 해보자면 문자열의 길이를 구하는 len 함수, 문자열 내부에서 특

blockdmask.tistory.com