수학 잘하고싶다...
🎯 문제
머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 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 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가 이상하게 나왔었다.)
결론 규칙 찾는게 너무 안됐어...푼것도 너무 내맘대로 규칙같아...수학 잘하고싶다...