인프런 커뮤니티 질문&답변

임혜선님의 프로필 이미지
임혜선

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

45번 공주구하기 문제를 list를 이용해서 이렇게 풀어도 될까요?

작성

·

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)를 사용하여 공주 구하기 문제를 해결하려고 하고 있습니다. 리스트를 사용하면 요소의 삽입 및 삭제가 효율적일 수 있지만, 이 경우 상황에 따라 컬렉션의 반복 작업에 대한 성능도 고려해야 합니다.

코드 오류 원인

  • 환경 차이: Visual Studio와 Dev C++의 컴파일러 및 표준 라이브러리 구현 차이로 인해 프로젝트 설정 및 기타 환경 요소에 따라 결과가 다를 수 있습니다.
  • 반복자 무효화: 리스트에서 요소를 삭제하면서 반복자를 조작할 때 신중하지 않다면 반복자가 잘못된 상태에 빠질 수 있습니다.

올바른 접근 방식

리스트를 사용할 때 반복자(iterator)를 조작하며 데이터 삭제를 하는 과정을 정확히 이해해야 합니다. erase를 호출한 후의 반복자는 유효하지 않을 수 있고, 따라서 적절한 업데이트가 필요합니다.

관련 질문

다양한 상황과 해결 방법을 살펴보는 것이 좋습니다. 이미 기존에 비슷한 질문들이 있어 몇 가지 참고 링크를 추가합니다:

  1. 46번 질문 있습니다 - 반복자와 리스트 관리를 통해 효율적인 삭제를 수행하는 방법의 예시를 볼 수 있습니다.
  2. 이 코드의 문제점이 알고싶습니다 - 로직에 대한 디버깅 및 올바른 방법론을 탐색해볼 수 있습니다.
  3. 45번 질문 목록 - 주제에 대한 여러 가지 관점을 이해하는 데 도움이 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

임혜선님의 프로필 이미지
임혜선

작성한 질문수

질문하기