• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

5-O

24.04.06 15:21 작성 24.04.08 22:34 수정 조회수 77

0

큰돌님 안녕하세요.강의 잘 듣고 있습니다.

제 나름대로 고민해보고 풀어 제출하였는데 Segementation fault가 뜹니다.반례를 찾으려고 노력했지만 어느 부분이 문제인지 잘 모르겠습니다.도움 좀 부탁드리겠습니다 ㅠㅠ 

 

http://boj.kr/38620660c1684a9f96e362ffbdb9ebc4

답변 2

·

답변을 작성해보세요.

0

안녕하세요 ㅎㅎ

사실 반례 찾고 싶어서 여러모로 시도해봤다가

잘 안되서....

그 경우에는 그냥 코드 다듬으면서 풀거든요 ㅎㅎ

그냥 다듬다 보니 맞게 되었는데요

이런 코드를 하려고 했던게 아니실까요?

#include <bits/stdc++.h>
using namespace std;

struct A {
    int r, c, s;
};

const int MAX = 54;
vector<A> info;
int N, M, K;
int a[MAX][MAX], ret = 9e8;

void rotate(A rcs, int arr[MAX][MAX]) {
    int layerCount = rcs.s;
    for (int layer = 1; layer <= layerCount; ++layer) {
        int top = rcs.r - layer, left = rcs.c - layer;
        int bottom = rcs.r + layer, right = rcs.c + layer;

        int prev = arr[top][left];
        for (int i = left + 1; i <= right; ++i) swap(arr[top][i], prev);
        for (int i = top + 1; i <= bottom; ++i) swap(arr[i][right], prev);
        for (int i = right - 1; i >= left; --i) swap(arr[bottom][i], prev);
        for (int i = bottom - 1; i >= top; --i) swap(arr[i][left], prev);
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> N >> M >> K;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            cin >> a[i][j];
        }
    }
    
    vector<int> v;
    for (int i = 0; i < K; i++) {
        int r, c, s;
        cin >> r >> c >> s;
        info.push_back({r - 1, c - 1, s});
        v.push_back(i);
    }
    
    do {
        int temp_arr[MAX][MAX];
        memcpy(temp_arr, a, sizeof(a));
        
        for (int i : v) {
            rotate(info[i], temp_arr);
        }
        
        for (int i = 0; i < N; i++) {
            int sum = 0;
            for (int j = 0; j < M; j++) {
                sum += temp_arr[i][j];
            }
            ret = min(ret, sum);
        }
    } while (next_permutation(v.begin(), v.end()));
    
    cout << ret;
    return 0;
}


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

이 코드를 보니 제 코드는 쓸데없는 부분이 많은 것 같네요.

코드 참고할 때마다 감탄하고 있습니다.

큰돌님 감사합니다!! 😊

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.08

안녕하세요, 인프런 AI 인턴입니다.

땅콩땡콩님, 질문 주셔서 감사합니다. Segmentation fault는 주로 잘못된 메모리 접근, 예를 들어 할당되지 않은 메모리를 참조하거나 배열의 범위를 벗어난 접근 등에서 발생합니다.

문제 해결을 위해 다음과 같은 점을 확인해보시는 것을 추천드립니다:

  1. 배열이나 포인터를 사용하는 부분에서 인덱스가 배열의 크기를 벗어나지 않는지 확인해보세요.
  2. 동적 메모리 할당을 사용하는 경우, 할당과 해제가 적절히 이루어지고 있는지 검토해보세요.
  3. 참조하는 포인터나 객체가 유효한지(널이 아닌지) 확인해보세요.
  4. 재귀 함수 호출 시 무한 재귀에 빠지지 않았는지, 스택 오버플로우를 일으키지 않는지 확인해보세요.

이외에도 개발 환경이나 사용 중인 툴에 따라 디버거를 사용하여 문제의 원인을 좀 더 쉽게 찾을 수 있습니다. 예를 들어, GDB 같은 디버거 도구를 사용하면 Segmentation fault 발생 지점을 정확히 파악할 수 있어요.

도움이 됐기를 바라며, 추가적으로 궁금한 점이 있으시면 언제든지 질문해주세요.