인프런 커뮤니티 질문&답변
17143_낚시왕 질문
작성
·
306
0
큰돌님 안녕하세요
17143_낚시왕 문제에 질문이 있어서 글을 적습니다.
제가 짠 코드의 기본적인 로직은 큰돌님께서 하신것처럼
1. 상어 잡기
2. 상어들 이동
으로 하고, 상어가 먹혀서 없는 것들도 고려를 하였습니다.
그런데 코드를 제출하면 계속해서 '바로' 틀렸다고 합니다.
코드에서 문제를 제가 찾고 싶지만 도저히 감을 못 잡아서 글을 올려봅니다.
혹시 어떤 부분이 잘 못 된건지 알 수 있을까요?
#include<bits/stdc++.h>
using namespace std;
int R, C, M, ret;
int r, c;
int m[104][104], a[10004][10], no_exist[10004];
// a -> r, c, s, d, z -> r, c, 속도, 방향, 사이즈
int eatting(int idx){
for(int i = 0; i < R; i++){
if(m[i][idx]){
no_exist[m[i][idx]] = 1; // 해당 상어는 먹혀서 존재하지 않는 것!
return a[m[i][idx]][4]; // 해당 상어의 사이즈를 return
}
}
return 0;
}
void sharks_move(){
memset(m, 0, sizeof(m)); // 현재 상어 위치 초기화 // 새로운 공간에 상어를 배치할 것이라서
for(int i = 1; i <= M; i++){
if(no_exist[i]){ // 잡아먹혀서 없는 경우
continue;
}
for(int j = 0; j < a[i][2]; j++){ // 속도만큼 움직이는 것
if(a[i][3] == 1){ // 위로 이동
if(a[i][0] == 0){ // 막혀있는 경우
a[i][3] = 2; // 아래로 방향 전환
a[i][0]++; // 아래로 이동
}
else{
a[i][0]--;
}
}
else if(a[i][3] == 2){ // 밑으로 이동
if(a[i][0] == R-1){ // 막혀있는 경우
a[i][3] = 1; // 위쪽으로 방향 전환
a[i][0]--; // 위로 이동
}
else{
a[i][0]++;
}
}
else if(a[i][3] == 3){ // 오른쪽으로 이동
if(a[i][1] == C - 1){
a[i][3] = 4;
a[i][1]--;
}
else{
a[i][1]++;
}
}
else if(a[i][3] == 4){ // 왼쪽으로 이동
if(a[i][1] == 0){
a[i][3] = 3;
a[i][1]++;
}
else{
a[i][1]--;
}
}
}
// 이동을 마친 후 맵에 상어 번호 매기기
if(m[a[i][0]][a[i][1]]){ // 이미 상어가 있는 경우
if(m[a[i][0]][a[i][1]] > a[i][4]){ // 기존꺼가 더 큰 경우
no_exist[i] = 1; // 기존꺼에 잡아 먹힌 것
}
else{
no_exist[m[a[i][0]][a[i][1]]] = 1; // 기존꺼 잡아먹기
m[a[i][0]][a[i][1]] = i; // 새롭게 맵 갱신
}
}
else{
m[a[i][0]][a[i][1]] = i;
}
}
return;
}
int person_go(int idx){
int size = eatting(idx);
sharks_move();
return size;
}
int main(){
cin >> R >> C >> M;
for(int i = 1; i <= M; i++){
cin >> r >> c >> a[i][2] >> a[i][3] >> a[i][4];
r--; c--;
a[i][0] = r;
a[i][1] = c;
m[r][c] = i;
}
if(M == 0){
cout << 0;
return 0;
}
for(int i = 0; i < C; i++){
ret += person_go(i);
}
cout << ret;
return 0;
}답변 1
1
큰돌
지식공유자
안녕하세요. ㅎㅎ
반례입니다.
100 7 7
3 2 2 3 9
3 3 1 3 3
3 5 1 4 7
3 6 2 4 6
2 4 1 2 8
1 4 2 2 4
4 4 1 1 5
답 : 0
가보자고 님의 답 : 5
아 근데 상어의 상태를 저렇게 배열로 하면 보기 힘들지 않나요? struct 어떠신가요?
감사합니다.





