머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 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번에게 공을 던집니다.
class Solution {
public int solution(int[] numbers, int k) {
int answer = 0;
int start = 0;
for(int i=1; i<=k; i++){
answer = numbers[start];
start += 2;
if (start >= numbers.length){
start -= numbers.length;
}
}
return answer;
}
}
class Solution {
public int solution(int[] numbers, int k) {
int answer = (k - 1) * 2 % numbers.length + 1;
return answer;
}
}
k번 반복하도록 반복문을 사용했고, 인덱스 값을 2씩 증가시켰다. 증가시킨 값이 배열의 길이보다 같거나 커지면 배열의 길이만큼 빼주길 반복한 코드이다.
여기서 중요한 건! 배열을 생각하는게 아니라
제한사항에 나왔듯이 numbers 배열이 1부터 시작해서 순서대로 올라간다!
k번 던지므로 k-1을 해주고,
2씩 증가하므로 (k-1)x2
배열의 크기로 나눈 나머지에 배열은 0부터 시작하므로 +1을 해준다.
즉..(k - 1) * 2 % numbers.length + 1이 k번째로 공을 던지는 사람의 번호가 된다.
제한사항도 잘 봐야한다는 걸 느꼈다. 근데 아마 제대로 봤어도 다른 사람 풀이처럼 생각 못했을 것 같긴 하지만..
이렇게 블로그 작성하면서 내 코드만 적는 게 아니라 다른 사람의 코드엔 어떤 더 좋은 코드가 있나 참고해서 찾아보다보니 더 공부가 되는 것 같다. 👍