본문 바로가기

Python(알고리즘,문제풀이)/프로그래머스(입문100제)

코딩테스트입문 / 공 던지기

728x90

📚문제

출처 : 프로그래머스 / 공 던지기 (https://school.programmers.co.kr/learn/courses/30/lessons/120843)

 

📝풀이

# 내풀이 (오답)

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)

 

제일 간단하고 그나마 직관적인 풀이를 참고하였다

(출처 : https://dduniverse.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EA%B3%B5-%EB%8D%98%EC%A7%80%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-python)

 

 

 

 

 

+

내 오답 코드에서 이해가 잘 가지 않았었던 부분

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