본문 바로가기
  • AI 개발자가 될래요
Python

[Python/코테공부] 배열 만들기 2

by 꿀개 2023. 10. 31.

[Python/코테공부] 배열 만들기 2

 

배열만들기 2 python 파이썬

 

내 풀이

def solution(l, r):
    answer = [i for i in range(l, r + 1) if not(set(str(i))-{'0', '5'})]
    return answer if len(answer)>0 else [-1]

 

풀리긴 한다. 근데 특정 테스트 케이스에서 시간이 오래 걸렸다. 

 

테스트 결과

내 풀이 결과

 

다른 사람의 풀이

def solution(l, r):
    answer = []
    i = 1
    n = 5

    while True:
        if n > r: break
        n = 5 * int(bin(i)[2:])
        if l <= n <= r:
            answer.append(n)
        i += 1

    return [-1] if len(answer) == 0 else answer

 

언듯 보면 이해가 잘 가지 않는다. 자세히 라인 바이 라인으로 따져봐야 한다.

bin() 은 정수를 바이너리 표현으로 바꿔주는 파이썬 내장 메소드이다.

정답은 0과 5만 가질 수 있고, 두 정수는 1 이상 1,000,000 이하이므로 가질 수 있는 수는 5, 50, 55, 500, ... 등 바이너리 값의 규칙성을 갖고있다. 

그래서 일단, 바이너리 값들 1, 10, 11, 100, 101, 110, 111, ... 을 구하고 5를 곱해서 원하는 숫자를 만들고 범위를 설정해줬다.

 

효율성 측면에서도 매우 좋고, 아이디어도 매우 탁월하다. 배워야 할 부분이다..

 

테스트 결과

 

바이너리 방식 사용시 테스트 결과

 

시간 효율이 정말 좋다.. 나도 언젠간 이런 아이디어를 생각해 낼 수 있겠지.!

 

*문제 출처 프로그래머스

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

 

프로그래머스

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

programmers.co.kr