joong_sunny
20
2020-04-10 00:17:45
3
361

알고리즘 문제를 풀었는데 오류가 납니다


signal: segmentation fault (core dumped)

이런 오류가 뜨는데 코드를 한번 봐주실 수 있나요?


프로그래머스의 '다리를 지나는 트럭' 이라는 문제입니다


#include <string>
#include <vector>
#include <queue>

using namespace std;

int solution(int bridge_length, int weight, vector<int> truck_weights) {
    int answer = 0;
    queue<int> que;
    vector<int> counter;
    int b_on_weight = 0;
    int time = 1;

    for (int i = 0; i < truck_weights.size(); i++)
    {
        if (que.size() < bridge_length)
        {
            if (b_on_weight + truck_weights[i] > weight)
            {
                que.push(truck_weights[i]);         //트럭을 집어넣는다
                b_on_weight += truck_weights[i];    //다리위의 총 트럭무게
                counter.push_back(time);            //i번째트럭을 언제넣었는지 기록
            }
            else
                i--;
        }
        else
        {
            i--;
        }                                  //다리가 무거우면...시간은 흘러가지만 대기트럭은 계속 대기

        //시간은 흐르고 트럭은 다리를 건넌다
        for (int j = 0; j < truck_weights.size(); j++)
        {
            if (counter[j] + bridge_length == time)
                que.pop();
        }
        time++;
    }
    answer = time;
    return answer;
}


0
0
  • 답변 3

  • 봄을찾아서
    246
    2020-04-10 00:21:16

    C++을 다룬지 조금 돼서... 정확히는 모르겠으나,

    저 queue와 vector는 생성되서 메모리에 할당 된게 맞나요?

    0
  • MKRO
    242
    2020-04-10 08:39:38

    33-37 라인에서 counter 벡터가 항상 truck weights만큼 있다는 보장이 없네요

    1
  • 쥬라기
    319
    2020-04-10 09:02:52

    원소에 접근할 때 아웃오브레인지 에러 나는것 같네요.


    18~23라인에 [i]로 접근하는 부분과,(사실 여기는 size로 체크하니 덜 해보일 뿐 안전하진 않습니다)

    35라인에 [j] 로 접근하는 부분에서,(위엣분 말처럼 보장이 안됩니다)

    vector 변수의 범위를 벗어났을 때 발생하는 에러로 생각됩니다.


    vector 원소에는 at 함수로 접근해서 사용하시길 추천 드립니다.

    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.