728x90
📚문제
📝풀이
# 내풀이 (오답)
def solution(numbers, k):
odd = []
even = []
if len(numbers) % 2==0:
for i in numbers:
if i % 2 !=0:
odd.append(i)
return odd[(k % len(odd))-1]
else:
for i in numbers:
if i % 2 !=0:
odd.append(i)
else:
even.append(i)
if k <= len(odd):
return odd[(k % len(odd)-1)]
else:
return even[(k % len(even)-1)]
엄청 오래걸려서 풀었는데
너무 복잡하게 생각했다...
코드실행해서 예시 3개까지는 맞았는데
제출 했을 때 테스트 케이스에서 많이 틀렸다.
구글링 하여 다른 코드 참고
def solution(numbers, k):
answer = numbers[2*(k-1) % len(numbers)]
return answer
어떻게 이렇게 생각을 할 수있을까...ㅎ
자세히 살펴보면 핵심은
2*(k-1)
이게 무슨 의미인지 생각해봤는데
numbers 리스트에서 슬라이싱 할 때 2칸씩 움직이니까 *2
그리고 k=1부터 시작하므로 0번인덱스(1)부터 시작하려면 -1
그 다음 k 가 len(numbers)보다 크면 안되므로 len(numbers)로 배열 한 번 돈 다음 나머지 수로 리스트 슬라이싱
% len(numbers)
제일 간단하고 그나마 직관적인 풀이를 참고하였다
+
내 오답 코드에서 이해가 잘 가지 않았었던 부분
if len(numbers) % 2==0:
for i in numbers:
if i % 2 !=0:
odd.append(i)
return odd[(k % len(odd))-1]
---------------------------------------
if len(numbers) % 2==0:
for i in numbers:
if i % 2 !=0:
odd.append(i)
return odd[(k % len(odd))-1]
밑에 처럼 if문 밖에서 return 해주면 계속 오류가 난다
주피터 노트북에서 print()로 바꿔서 해주면 잘 돌아가는데
if문과 for문을 돌면서 어차피 odd에 모든 값이 다 들어가 있는 상태아닌가 ?
왜 if문이 종료되고나서 return하면 오류가 나는걸까
한 번 헷갈리니까 계속 헷갈린다
728x90
'Python(알고리즘,문제풀이) > 프로그래머스(입문100제)' 카테고리의 다른 글
코딩테스트입문 / 합성수 찾기 (0) | 2023.07.22 |
---|---|
코딩테스트입문 / 배열 회전시키기 (0) | 2023.07.21 |
코딩테스트입문 / 구슬을 나누는 경우의 수 (0) | 2023.07.20 |
코딩테스트입문 / 순서쌍의 개수 (0) | 2023.07.19 |
코딩테스트입문 / 진료순서 정하기 (0) | 2023.07.19 |