작성
·
192
0
http://boj.kr/153cb07e167d4de1a892d2dfa6fe08c1
생각한 반례나 게시판에 반례 다 입력해보고 display 함수로 다 찍어봐도 문제가 없어보이는데
25%에서 자꾸 터지고 있습니다.
영상보고 이해는 큰돌님 풀이를 이해 했으나, 제가 초기에 작성한 코드에서 어디가 이상이 있는 지 궁금해서 질문드립니다.
구조체에 name 변수는 display로 찍어보고 싶어서 선언했습니다.
답변 2
0
안녕하세요 태곤님 ㅎㅎ
사실 제가 이 코드를 몇번 디버깅을 많이 했는데.. 사실 잘 모르겠습니다.
분명 맞는 코드라고 생각하는데... 틀리네요..
그래도 코드리뷰를 드리면요.
void Init() {
char alpha = 'a';
int a, b, c, d, e;
cin >> R >> C >> M;
for (int i = 0; i < M; i++) {
cin >> a >> b >> c >> d >> e;
shark[a][b].name = alpha;
alpha++;
if (d - 1 <= 1)
c %= (2 * (R - 1));
else
c %= (2 * (C - 1));
shark[a][b].s = c;
shark[a][b].d = d - 1;
shark[a][b].z = e;
shark[a][b].alive = true;
}
}
먼저 모듈러 연산을 하시는 것은 정말 기발한 발상입니다.
좋습니다.
void findAndCatchTarget(int x) {
for (int y = 1; y <= R; y++) {
if (shark[y][x].alive) {
target = {y, x};
break;
}
}
ret += shark[target.first][target.second].z;
shark[target.first][target.second].alive = false;
}
타겟팅을 하고 지우는 연산 좋습니다. 틀린 부분이 없습니다.
int changeDir(int d) {
switch (d) {
case 0:
return 1;
case 1:
return 0;
case 2:
return 3;
case 3:
return 2;
}
}
틀린 부분이 없습니다.
void move(int y, int x) {
int cy = y;
int cx = x;
shark[y][x].alive = false;
SHARK temp = shark[y][x];
while (temp.s) {
int ny = cy + dy[temp.d];
int nx = cx + dx[temp.d];
if (ny == 0 || ny == R + 1) {
ny = cy;
temp.s++;
temp.d = changeDir(temp.d);
} else if (nx == 0 || nx == C + 1) {
nx = cx;
temp.s++;
temp.d = changeDir(temp.d);
}
temp.s--;
cy = ny;
cx = nx;
}
if (temp.z > temp_shark[cy][cx].z) {
temp_shark[cy][cx].name = temp.name;
temp_shark[cy][cx].d = temp.d;
temp_shark[cy][cx].s = shark[y][x].s;
temp_shark[cy][cx].z = shark[y][x].z;
temp_shark[cy][cx].alive = true;
}
}
이부분이 좀 이상한데요.
temp.s ++, -- 부분이 이상하긴 한데...
디버깅하면 잘 나오는 거 같아서 잘 모르겠습니다.
도움이 못 되어.. 죄송합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요. 코드를 확인하기 전에 몇 가지 질문이 있습니다.
위의 내용을 알려주시면 제가 더 구체적으로 도움을 드릴 수 있을 것 같아요.