프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 공 던지기(Java)

Sigfriede 2023. 6. 2. 01:10

  문제 설명

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

 

  제한사항

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

 

  입출력 예

numbers k result
[1, 2, 3, 4] 2 3
[1, 2, 3, 4, 5, 6] 5 3
[1, 2, 3] 3 2
class Solution {
    public int solution(int[] numbers, int k) {
        int answer = 0;
        int count = 0;
        int index = 0;
        while (count < k) {
            if (index >= numbers.length) {
                index %= numbers.length;
            }
            answer = numbers[index];
            index += 2;
            count++;
        }
        return answer;
    }
}

  각각 answer, count, index 변수를 생성합니다.

  while문이 count가 k보다 작은 동안 반복합니다. if문에서 index가 numbers의 길이보다 크거나 같다면 index에 index를 numbers의 길이로 나눈 나머지를 할당합니다.

  answer에 numbers의 index번째 원소를 할당합니다. 공은 한 사람을 건너뛰어야 하므로 index가 2씩 증가하고 공을 던질 때마다 횟수를 세는 변수 count는 1씩 증가합니다. 반복문이 종료될 때까지 앞선 과정을 반복하여 답을 도출합니다.

  수학적 사고가 뒷받침된다면 이보다 간단히 푸는 방법도 존재합니다만, 제가 그렇게 되기까지는 먼 이야기인 듯합니다.

  아직도 풀어야 하는 문제가 한참 남았다는 사실이 적잖이 당황스럽습니다. 0단계를 세 달째 풀고 있네요. 알고리즘도 공부해야 하는데….