[Python/코테공부] 배열 만들기 2
내 풀이
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
'Python' 카테고리의 다른 글
[Python/코테공부] 세로 읽기 (0) | 2023.11.02 |
---|---|
[Python/코테공부] 배열 만들기 4 (0) | 2023.10.31 |
[Python/코테공부] 코드 처리하기 (0) | 2023.10.31 |
[Python/코테연습] 더 크게 합치기 (0) | 2023.10.30 |
[Python/코테공부] 대소문자 바꿔서 출력하기 (0) | 2023.10.30 |