작성
·
21
0
#include <iostream>
#include <string>
#include <cmath>
#include <vector>
#include <algorithm>
#include <list>
using namespace std;
int main()
{
cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false);
freopen("input.txt", "rt", stdin);
int N, K, cnt=0;
cin >> N >> K;
list<int> L;
for (int i = 0; i < N; i++) {
L.push_back(i+1);
}
while (L.size() > 1) {
list<int>::iterator iter = L.begin();
for (iter; iter != L.end(); iter++) {
cnt++;
if (cnt == K) {
list<int>::iterator it = iter;
iter++;
L.erase(it);
cnt = 0;
if (iter != L.begin())
iter--;
else
cnt++;
}
}
}
cout << L.front();
return 0;
}
안녕하세요. 45번 문제를 list를 이용해서 이렇게 풀어봤는데, visual studio로 컴파일해서 실행하면 정답이 제대로 나오는데 dev c++를 컴파일해서 실행하면 답이 틀리게 나옵니다.
제가 쓴 코드도 맞는 방법일까요?
저도 처음에 배열을 생각해뒀는데 N이 1000까지 가능하니깐, 1000번을 여러번 돌면 시간초과가 될 것 같아서 cnt가 k와 같아질때 리스트에서 제외하는 방식으로 코드를 짰습니다..
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 임혜선님.
질문 주신 내용에 대해 일부 설명 드리겠습니다. 사용하신 코드는 리스트(list)를 사용하여 공주 구하기 문제를 해결하려고 하고 있습니다. 리스트를 사용하면 요소의 삽입 및 삭제가 효율적일 수 있지만, 이 경우 상황에 따라 컬렉션의 반복 작업에 대한 성능도 고려해야 합니다.
리스트를 사용할 때 반복자(iterator)를 조작하며 데이터 삭제를 하는 과정을 정확히 이해해야 합니다. erase
를 호출한 후의 반복자는 유효하지 않을 수 있고, 따라서 적절한 업데이트가 필요합니다.
다양한 상황과 해결 방법을 살펴보는 것이 좋습니다. 이미 기존에 비슷한 질문들이 있어 몇 가지 참고 링크를 추가합니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.