[ 프로그래머스 ][ Java ] 공 던지기

chorok ☘️·2025년 6월 20일

코딩테스트

목록 보기
10/54
post-thumbnail

코딩테스트 연습 > 코딩테스트 입문 > 공 던지기

⚡ 문제 설명

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

⚡ 제한사항

  • 2 < numbers의 길이 < 100
  • 0 < k < 1,000
  • numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
  • numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.

⚡ 입출력 예

numberskresult
[1, 2, 3, 4]23
[1, 2, 3, 4, 5, 6]53
[1, 2, 3]32

입출력 예 #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번째로 공을 던지는 사람의 번호가 된다.

🍏 회고 및 느낀점

제한사항도 잘 봐야한다는 걸 느꼈다. 근데 아마 제대로 봤어도 다른 사람 풀이처럼 생각 못했을 것 같긴 하지만..

이렇게 블로그 작성하면서 내 코드만 적는 게 아니라 다른 사람의 코드엔 어떤 더 좋은 코드가 있나 참고해서 찾아보다보니 더 공부가 되는 것 같다. 👍

profile
백엔드 개발자 chorok's velog

0개의 댓글