728x90
시계 방향으로 원에 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);
}
}
728x90
반응형
'알고리즘 문제 풀이 > 배열' 카테고리의 다른 글
프로그래머스 - 로또의 최고 순위와 최저 순위 (0) | 2021.11.17 |
---|---|
1200. Minimum Absolute Difference (0) | 2021.09.13 |
1122. Relative Sort Array (0) | 2021.09.06 |
169. Majority Element (0) | 2021.07.03 |