머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
| numbers | k | result |
|---|---|---|
| [1, 2, 3, 4] | 2 | 3 |
| [1, 2, 3, 4, 5, 6] | 5 | 3 |
| [1, 2, 3] | 3 | 2 |
입출력 예 #1
1번은 첫 번째로 3번에게 공을 던집니다.
3번은 두 번째로 1번에게 공을 던집니다.
입출력 예 #2
1번은 첫 번째로 3번에게 공을 던집니다.
3번은 두 번째로 5번에게 공을 던집니다.
5번은 세 번째로 1번에게 공을 던집니다.
1번은 네 번째로 3번에게 공을 던집니다.
3번은 다섯 번째로 5번에게 공을 던집니다.
입출력 예 #3
1번은 첫 번째로 3번에게 공을 던집니다.
3번은 두 번째로 2번에게 공을 던집니다.
2번은 세 번째로 1번에게 공을 던집니다.
※ 공지 - 2023년 1월 25일 테스트 케이스가 추가되었습니다. 기존에 제출한 코드가 통과하지 못할 수도 있습니다.
def solution(numbers, k):
answer = 0
temp = []
if len(numbers) % 2 == 0:
for i in range(0,len(numbers),2):
temp.append(numbers[i])
if k % len(temp) == 0:
answer = temp[-1]
else:
answer = temp[k % len(temp) -1]
if len(numbers) % 2:
for i in range(0,len(numbers),2):
temp.append(numbers[i])
for i in range(1,len(numbers),2):
temp.append(numbers[i])
if k % len(temp) == 0:
answer = temp[-1]
else:
answer = temp[k % len(temp) -1]
return answer
def solution(numbers, k):
return numbers[2 * (k - 1) % len(numbers)]
나머지 연산자를 이용하여 기존 배열 안에서 계속 순환
1) 2칸씩 이동하므로 2를 곱해주고
2) 0번 인덱스부터 시작해서 '공을 던지는 사람'을 찾아야 하므로 (k-1)
3) numbers 길이를 넘어갈 수 없으므로 % 연산자 사용
따라서 공이 움직인 횟수를 numbers의 길이로 나누면 원하는 답을 구할 수 있다.