[프로그래머스]코딩테스트 입문 | 공던지기

sun_U·2023년 2월 9일
0
post-thumbnail

문제

머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.

입출력 예시

풀이 방법

1차 시도 실패

def solution(numbers, k):
    answer = (1 + (2 * (k - 1))) % len(numbers)
    return answer

세 번째 예시에서
1번은 첫 번째로 3번에게 공을 던지고,
3번은 두 번째로 2번에게 공을 던지고
2번은 세 번째로 1번에게 공을 던진다.

1부터 값이 2씩 k번만큼 커지고 이것을 리스트 개수만큼 나눈 나머지로 구하는 방법을 생각했는데 몇몇 테스트 케이스를 통과하지 못했다.
...
첫 번째 시도의 1을 나눈 나머지를 구하기 전에 더하지 않고, 2 * (k -1)을 먼저 리스트 개수로 나눈 나머지에 1을 더했더니 통과했다.

def solution(numbers, k):
    answer = (2 * (k - 1)) % len(numbers) + 1
    return answer

첫 번째 풀이가 틀린 이유를 찾아보자!

numbers 개수가 5이고, k가 3일 때, 실패했던 코드에서는 (1 + (2 * (k - 1))) % len(numbers)에서 5 % 5 이므로 0이 나온다. 반면 통과한 코드에서는 4 % 5 + 1이므로 5가 나온다. 나머지가 0이 되는 경우 문제가 발생했다.

1의 위치에 따라 결과가 달라지는데 꼼꼼하게 따지지 못했다.😢

다른 풀이로는 어차피 numbers는 1부터 순서대로 값이 올라가기 때문에 굳이 1을 더하지 않고 인덱스로 접근하는 방법도 있다.

def solution(numbers, k):
    return numbers[2 * (k - 1) % len(numbers)]
profile
Data Engineer🐣

0개의 댓글