1823. Find the Winner of the Circular Game / c++ / Medium / 5분
문제 및 코드
class Solution {
public:
int findTheWinner(int n, int k) {
int removedCount = 0;
vector<int> friends = vector<int>(n);
for (int i = 0; i < n; ++i)
{
friends[i] = i + 1;
}
int currentPos = 0;
while (friends.size() > 1)
{
currentPos = (currentPos + k - 1) % friends.size();
friends.erase(friends.begin() + currentPos);
}
return friends.front();
}
};
접근 방식
자료 구조 / 배열
- 1번부터 n번까지의 친구가 있을 때, 마지막 한명이 남을 때까지 아래의 게임을 진행한다.
- 시작하는 사람을 포함해서 k번째 사람이 탈락한다.
- 다음 시작 번호는 탈락한 사람의 다음 번호
- vector friends(n) 선언 후 각 원소를 1 ~ n 으로 초기화 해줬다.
- friends 의 원소가 1개 남을 때 까지 아래를 반복
- currentPos 에 k - 1 만큼 더 한다. (자기 자신을 포함하므로 1 감소, currentPos 의 시작값은 0)
- currentPos 를 friends.size() 로 나머지값을 취해준다. (배열의 크기 밖으로 나가는 예외 처리)
- friends에서 currentPos번째의 원소를 빼준다.
- friends.front()(마지막 남은 원소)를 반환
- 해결
생각해 볼 점
- 백준에서도 여러번 접해본 문제라 큰 어려움 없이 풀 수 있었다.
- 배열의 삭제, 크기를 넘어가는 인덱스의 예외 처리가 중요한 것 같다.