공 던지기
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) 예시
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회성에 그쳐버려 % 연산기호를 이용하도록 변경하여 문제를 해결할 수 있었습니다.
'Programmers Coding Test > Java' 카테고리의 다른 글
[프로그래머스 120845] Java - 코딩테스트 입문 / 주사위의 개수 (0) | 2024.02.17 |
---|---|
[프로그래머스 120844] Java - 코딩테스트 입문 / 배열 회전시키기 (0) | 2024.02.16 |
[프로그래머스 120842] Java - 코딩테스트 입문 / 2차원으로 만들기 (0) | 2024.02.16 |
[프로그래머스 120840] Java - 코딩테스트 입문 / 구슬을 나누는 경우의 수 (0) | 2024.02.13 |
[프로그래머스 120839] Java - 코딩테스트 입문 / 가위 바위 보 (0) | 2024.02.08 |