해결된 질문
작성
·
184
·
수정됨
0
큰돌님 안녕하세요.강의 잘 듣고 있습니다.
제 나름대로 고민해보고 풀어 제출하였는데 Segementation fault가 뜹니다.반례를 찾으려고 노력했지만 어느 부분이 문제인지 잘 모르겠습니다.도움 좀 부탁드리겠습니다 ㅠㅠ
답변 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 인턴입니다.
땅콩땡콩님, 질문 주셔서 감사합니다. Segmentation fault는 주로 잘못된 메모리 접근, 예를 들어 할당되지 않은 메모리를 참조하거나 배열의 범위를 벗어난 접근 등에서 발생합니다.
문제 해결을 위해 다음과 같은 점을 확인해보시는 것을 추천드립니다:
이외에도 개발 환경이나 사용 중인 툴에 따라 디버거를 사용하여 문제의 원인을 좀 더 쉽게 찾을 수 있습니다. 예를 들어, GDB 같은 디버거 도구를 사용하면 Segmentation fault 발생 지점을 정확히 파악할 수 있어요.
도움이 됐기를 바라며, 추가적으로 궁금한 점이 있으시면 언제든지 질문해주세요.
이 코드를 보니 제 코드는 쓸데없는 부분이 많은 것 같네요.
코드 참고할 때마다 감탄하고 있습니다.
큰돌님 감사합니다!! 😊