코딩테스트/PYTHON
[프로그래머스][PYTHON] Lv. 0 배열의 길이를 2의 거듭제곱으로 만들기
_알파카
2024. 2. 13. 01:32
728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/181857
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 풀이
def solution(arr):
if len(arr) > 512:
app = 1024-len(arr)
else:
for i in range(10):
if 2**i == len(arr):
return arr
elif 2**i > len(arr):
app = 2**i - len(arr)
break
for j in range(app):
arr.append(0)
return arr
생각할 조건이 많아서 꽤 오래 풀었던 문제였다. 테스트 코드는 다 맞는데, 실제 채점에서는 실패가 떠서 여러 번 수정해보고 완성한 코드이다.
for문과 if else 문이 반복적으로 있어 보기에는 좋지 않았던 코드였다.
개선한 풀이
def solution(arr):
for i in range(11):
if 2**i == len(arr):
return arr
elif 2**i > len(arr):
app = 2**i - len(arr)
for j in range(app):
arr.append(0)
return arr
다른사람의 풀이를 보고 개선해보았다.
원래 코드 문제점 : 512(2의 9제곱)을 나눌 필요가 없다. arr의 길이가 1000 이하인 것이지, 반환 값의 길이 조건은 없기 때문에,
만약 arr 길이가 512보다 크면, 무조건 1024까지의 길이로 맞추면 되는 것이다!
다른 사람 풀이
def solution(arr):
answer = [2**i for i in range(11)]
while len(arr) not in answer:
arr.append(0)
return arr
이 사람은 answer로 나올 수 있는 값들을 미리 지정해두고, arr 길이가 answer 중에 없으면 append(0)을 하게 했다.
사실 문제는 길게 설명했지만, 종합해서 하고자하는 말은 arr 길이가 2의 제곱수가 아니면, 0을 추가하라인데
괜히 arr 길이에 신경이 쓰여 단순하게 풀지 못했다!
앞으로는 사소한 것에 집중하지 말고 일단 큰 그림을 세워서 생각해보는 습관을 가져야겠다.
끄읏-!
728x90