새소식

Programmers Coding Test/Java

[프로그래머스 120843] Java - 코딩테스트 입문 / 공 던지기

  • -

 

 

공 던지기

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120843

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

1)  문제

머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 
공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 
친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, 
k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
제한사항
2 < numbers의 길이 < 100
0 < k < 1,000
numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.

 

 

 

2)  예시

 

 

Result Table
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번에게 공을 던집니다.

 

 

 

 

 

 

3)  풀이

 

 

 

1. 클래스 선언을 해줍니다

● class Solution {

클래스명은 대문자로 시작해야하고, 정답이라는 의미로 Solution이라는 단어를 사용하였습니다.

 

 

 

 

2. 정수배열 numbers와 정수 k을 매개변수로 하는 solution 메소드를 선언합니다.

solution은 정수를 반환하므로 데이터타입을 int로 합니다.

●    public int solution(int[] numbers, int k) {

 

 

 

 

3. 제한사항을 검사합니다. 제한사항을 만족하지 않을 경우, 예외처리합니다.

●    if (numbers.length < 2 || numbers.length >= 100 || k <= 0 || k >= 1000) {
            throw new IllegalArgumentException("제한사항을 확인하세요");
        }

 

 

 

 

4. numbers 배열에서 값만 딱 맞게 꺼내주면 되는 문제입니다.

index를 찾아줄 때 아래와 같은 사항들을 고려합니다.

  • k-1 을 해준 이유 : 첫번째 뽑은 사람은 index 0 이므로 0을 만들어주기 위함입니다.
  • * 2 를 해준 이유 : 오른쪽으로 한칸 건너띄고 그 다음 사람에게 던져야하기 때문입니다.
  • % numbers.length를 해준 이유 : 만약 (k-1) * 2가 numbers.length를 초과한 경우를 방지하기위해서입니다. 

   return numbers[((k-1)*2)%numbers.length];
        }
    }

 

 

 

 

 

 

 

 

 

4)  코드

 

class Solution {
    public int solution(int[] numbers, int k) {
        if (numbers.length < 2 || numbers.length >= 100 || k <= 0 || k >= 1000) {
            throw new IllegalArgumentException("제한사항을 확인하세요");
        }
        
        return numbers[((k-1)*2)%numbers.length];
        }
    }

 

 

 

 

 

 

 

5)  느낀점

단순한 문제였으나 어떻게 인덱스를 찾아내야할까 에서 고민을 많이 했습니다.

처음에는 numbers.length를 2로 나눠서 홀수일 때, 짝수일 때 케이스를 나눠서 그에 따른 index 계산법을 달리해야하나 싶었지만, 하다보니 결국 계산방법이 동일해서 홀짝 if문을 없애고 그냥 return문으로 바로 돌렸습니다.

또한, numbers.length를 초과한 경우처리에 대해 제일 처음에는 numbers.length를 한번 빼주었지만 그렇게 될 경우 1회성에 그쳐버려 % 연산기호를 이용하도록 변경하여 문제를 해결할 수 있었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.