728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/181857
내 풀이
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
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 날짜 비교하기 (0) | 2024.02.17 |
---|---|
[프로그래머스][PYTHON] Lv. 0 특별한 이차원 배열 1 (0) | 2024.02.17 |
[프로그래머스][PYTHON] Lv. 0 무작위로 K개의 수 뽑기 (1) | 2024.02.13 |
[프로그래머스][PYTHON] Lv. 0 문자열이 몇 번 등장하는지 세기 (0) | 2024.02.08 |
[프로그래머스][PYTHON] Lv. 0 문자열이 몇 번 등장하는지 세기 (1) | 2024.02.07 |