반응형
공 던지기 (JAVA)
0. 문제 및 입출력 예제
문제
머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다.
공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다.
친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.
제한사항
- 2 < numbers의 길이 < 100
- 0 < k < 1,000
- numbers의 첫 번째와 마지막 번호는 실제로 바로 옆에 있습니다.
- numbers는 1부터 시작하며 번호는 순서대로 올라갑니다.
입출력 예
- 입출력 예 #1
1번은 첫 번째로 3번에게 공을 던집니다.
3번은 두 번째로 1번에게 공을 던집니다.
- 입출력 예 #2
1번은 첫 번째로 3번에게 공을 던집니다.
3번은 두 번째로 5번에게 공을 던집니다.
5번은 세 번째로 1번에게 공을 던집니다.
1번은 네 번째로 3번에게 공을 던집니다.
3번은 다섯 번째로 5번에게 공을 던집니다.
- 입출력 예 #3
1번은 첫 번째로 3번에게 공을 던집니다.
3번은 두 번째로 2번에게 공을 던집니다.
2번은 세 번째로 1번에게 공을 던집니다.
1. 문제 분석
입출력 예시를 통해서 그림을 그려보면,
numbers = [1,2,3,4] , k = 2 일 경우에 1 -> 3 3 -> 1 로 공을 던진다.
numbers = [1,2,3,4,5,6] , k = 5 일 경우에 1 -> 3 3 -> 5 5 -> 1 1 -> 3 3 -> 5 로 공을 던진다.
우선 배열의 길이가 짝수일 경우와 홀수일 경우를 나눈다.
배열의 길이가 홀수일 경우 에는 ++2 와 --2 를 반복하면 될 것 간다.
배열의 길이가 짝수일 경우 에는 6
그렇다면 인덱스값을 이용해서 ++2 값을 구한다.
그리고 만약 배열의 총 길이보다 길 경우에는 ...
생각을 정리하면서 손으로 작성해보면서 경우의 수를 따져보았다..
2. 방법
어찌저찌 완성은 했는데 ㅋㅋㅋㅋㅋㅋㅋ 제출하고 다른 사람 풀이 보니 내꺼 완전 신기하게 풀었다.... 왜 저렇게 풀었나 싶을정도로 복잡하게 생각한 것 같기도 하고......
조금 많이 부족함을 느꼈던 문제였다.
class Solution {
public int solution(int[] numbers, int k) {
int answer = 0;
int count = 0;
for(int i = 0; i<numbers.length; i++){
answer = numbers[i];
i++;
if(i == numbers.length){
i = 0;
}
if(i == numbers.length-1){
i = -1;
}
count++;
if(count == k){
return answer;
}
}
return answer;
}
}
너무 있는 그대로 풀려고 했던 것 같기도하고 다가가는 방식을 조금 다르게 해보았어도 좋았을 것 같은 풀이들도 많이 보였다.
다른 사람들의 풀이에 대해서는 내일 살펴볼 예정이다.
3. 느낀점
우선 알고리즘 중에 가장 기초를 보고있지만 항상 어렵다.
하지만 내가 목표로 하는 것은 내 힘으로 풀기 이다.
그러니 꾸준히 학습하면서 차근차근 쌓아가려고 한다.
반응형
'알고리즘 > 프로그래머스:LV00' 카테고리의 다른 글
[LV00] 점의 위치 구하기 (0) | 2023.06.19 |
---|---|
[LV00] 배열 회전시키기 (0) | 2023.06.19 |
[LV00] 구슬을 나누는 경우의 수 (0) | 2023.06.19 |
[LV00] 구슬을 나누는 경우의 수 (0) | 2023.05.09 |
[LV00] 가위 바위 보 (0) | 2023.05.08 |