[프로그래머스/JAVA] Lv.0 공 던지기

또치·2023년 1월 25일
0

프로그래머스 JAVA

목록 보기
12/20
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

답안

class Solution {
    public int solution(int[] numbers, int k) {
        int answer = 0;
		int i=0;
        int count=0;
		while(count<k) {
			count++;
            System.out.println(count+"번째");
			if(count==k) {answer=numbers[i]; break;}
            System.out.println(i+" : 들어올때 i");
			i+=2;
            System.out.println(i+" : 숫자 더해진 i");
			if(i>=numbers.length) {i=i%numbers.length;}
            System.out.println(i+" : 값 나눈 i");
			
		}
        return answer;
    }
}

🎲 과정

반복문으로 i 값 올려주면서 카운트를 세서 k랑 값이 같아지는 순간에 인덱스값을 가지고 오려고 생각했는데 순서가 헷갈려서 힘들었고 두바퀴 돌면 다시 인덱스 0이나 1로 돌아와야되는데 그걸 설정해주는게 좀 힘들었다.
처음에는 for문으로 했었는데 계속 다시 인덱스 0으로 돌아와야되니까 while문으로 했다. 근데
애초에 조건을 배열의 length로 안주고 k이하로 설정해줬으면 for문으로 해도 됐을듯
암튼 i의 값이 더해지고 length가 넘어가면 다시 줄여주는 이 순서가 너무 헷갈렸어
while문 들어오면 카운트 올리고 옆자리 사람은 통과니까 i값은 2씩 올려줬다.
그리고 배열의 마지막이랑 그 앞자리의 값부터는 다시 배열의 시작으로 돌아가야되니까 if(i>=numbers.length) {i=i%numbers.length;} 요런 조건도 줬다.
카운트가 k랑 같아지면 더 이상 i한테 값을 더해주지 말고 바로 answer 구해서 반복문 종료시켰다. (자꾸 이 조건을 i에 값 더한 뒤에 넣어가지고 answer가 이상하게 나왔었다.)
결론 규칙 찾는게 너무 안됐어...푼것도 너무 내맘대로 규칙같아...수학 잘하고싶다...

0개의 댓글