알고리즘 문제 풀이/배열
Find the Winner of the Circular Game
가나무마
2021. 4. 11. 15:56
시계 방향으로 원에 n만큼 사람이 있음.
처음 인덱스에서 시작해서 k번째 인덱스를 삭제함.
삭제한 인덱스에서 k번째 사람을 또 삭제함.
1명 남을 때까지 반복.
답지 보기 전에 짠 코드
import java.util.ArrayList;
import java.util.List;
class Solution {
public int findTheWinner(int n, int k) {
List<Integer> list = new ArrayList<>(); //요소들을 담을 리스트.
for (int i = 1; i<=n; i++) {
list.add(i);
}
//일정하게 증가하는 인덱스 증가값.
int cycle = k;
//처음부터 시작하는 인덱스.
int index = 0;
//1개가 남을 때까지 반복.
while (list.size() > 1) {
//인덱스에 증가값을 더해줌. (자기 자신부터 세므로 -1함)
index += cycle-1;
//인덱스가 list보다 크면 리스트를 한 바퀴 이상 돈 것임.
if (index >= list.size()) {
//배열을 도는 것은 의미가 없습니다.
//3바퀴 돌고 1번째 인덱스에 있나,
//10바퀴 돌고 1번째 인덱스에 있나 상관없음.
//배열의 사이즈로 나눠서 나머지 인덱스가 실제 위치임.
index = index%list.size();
}
//해당 인덱스 요소를 삭제해줌.
list.remove(index);
}
return list.get(0);
}
}