• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

3-D 질문있습니다!

24.02.27 12:00 작성 조회수 119

0

http://boj.kr/ba6ed0fbb18c4351a818827e1ef64b9e 메모리 초과가 뜹니다..어떤 부분이 잘못된 걸까요 ..?코드 상 오류는 없는 거 같아 더더욱 해결이 어렵습니다..

답변 2

·

답변을 작성해보세요.

0

안녕하세요 ㅎㅎ

void Jbfs(int x, int y)
{
    visited[x][y] = 1;
    queue<pair<int,int>> q;

이거 y, x로 받아야 되지 않을까요?

입력 자체를 y, x로 받았습니다. 😃

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cin >> s;
            if (s == '#')

 

 

그리고...

    while(q.size()){
        Fdfs(fPos.first, fPos.second);

지금 보시면 사람이 움직이고 -> fire dfs 이렇게 되어있는데 이부분은 아예 로직 자체가 틀린 것 같습니다.

사람이 움직임 -> 불이 전체퍼짐 -> 사람이 움직임 -> 불이 전체퍼짐...

이라는 로직이 아니라

사람이 움직일 때 그 때 불이 동시에 퍼질 때 움직일 수 있을까?

를 중심으로 로직을 짜야 합니다.

 

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.27

안녕하세요, 인프런 AI 인턴입니다. 최은정님.

메모리 초과 문제는 프로그램이 할당된 메모리보다 많은 메모리를 사용할 때 발생합니다. 이는 배열 크기의 오버플로, 무한 루프, 잘못된 메모리 접근 등 여러 가지 원인으로 인해 생길 수 있는데요, 특히 재귀 호출이나 큰 사이즈의 자료구조를 사용할 때 주의가 필요합니다.

관련하여 이전에 있는 유사한 질문 중 메모리 초과 부분에 대한 지식공유자님의 답변을 찾았으니 참고하실 수 있습니다.

  • 3-D 메모리 초과 관련 질문
    강사님은 여기서 memset 함수를 사용하여 -1, 0 이외의 값으로 초기화하려고 시도가 잘못되었다고 조언하셨고, 다른 부분에서 잠재적인 문제가 발생할 수 있는지도 설명해주셨습니다.

  • 3-G 질문합니다
    여기서는 런타임 오류가 나는 원인이 배열의 범위를 넘어서는 경우에 대해 질문이 있었고, 강사님은 최대범위 설정에 대해 답변하셨습니다.

  • 메모리 초과가 나는데 선생님 코드와 어디가 다른지 모르겠습니다..ㅠㅠ
    강사님은 visited 배열이 bool 타입이 아닌 int 타입인데 true와 비교해서는 안 된다는 점을 지적하셨으며, 0 미만이 아닌 0 이하로 처리해야 한다는 점을 강조하셨습니다.

위의 답변들을 참고하여 귀하의 코드에 대한 검토를 다시 해보십시오. 코드에 문제가 없다고 생각될 경우, 배열의 크기나 재귀 호출의 깊이 등이 문제가 될 수 있음을 염두에 두고 확인해보세요. 메모리 초과 오류 해결에는 사용하는 자료구조의 크기를 줄이거나, 필요 없는 메모리 접근을 피하는 최적화 작업이 필요할 수 있습니다.

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