c언어 코드업 알고리즘 문제 질문
조회수 587회
우선 이 질문 자체가 코드업(타사이트)에있는 내용을 물어보는 거라서 이런거 질문해도 되는지... 염려되지만 너무 궁굼해서 올려볼게요 ㅠ
문제는 아래와 같습니다
문제번호 1509
10*10 크기의 보드판이 있다.
각 말들은 제일 아래쪽에서 위쪽 방향으로 진격한다.
장애물은 0이 아닌 숫자로 나타내며, 0보다 크면 블럭 장애물, 0보다 작으면 구덩이 장애물, 0이면 평지이다.
10*10 보드판의 정보가 입력되고, 각 세로줄 아래에 말이 있으면 1, 없으면 0이 입력될 때 각 말의 생존여부를 구하는 프로그램을 구현하시오.
입력 10*10의 보드판의 정보가 입력된다.
11째줄에 각 말의 위치 여부가 입력된다.(1:있음, 0:없음)
출력 블럭 장애물에 부딪혀서 실패시 "세로줄 번호 crash",
구덩이에 떨어져서 실패시 "세로줄 번호 fall",
무사히 통과하면 "세로줄 번호 safe"를 출력한다.
(단, 말이 없는 줄은 아무결과도 출력하지 않는다.)
입력 예시
0 0 0 0 0 0 0 0 0 0
0 2 0 0 0 0 0 0 0 0
0 0 -1 0 0 0 0 0 2 0
0 0 0 0 0 0 0 6 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 -4 2 0 0 0
0 0 2 0 0 0 0 0 0 0
0 0 0 0 3 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 1 0 0 1 1 0 1 0 1
출력 예시
1 safe
2 crash
5 crash
6 fall
8 crash
10 safe
도움말
1번 줄 말은 무사 통과
2번 줄 말은 2 크기의 장애물에서 부딪혀 실패.
5번 줄 말은 3 장애물에서 부딪혀 실패
6번 줄 말은 -4 장애물에서 빠져 실패
8번 줄 말은 6 장애물에서 부딪혀 실패
10번 줄 말은 무사 통과
==============================================================================
우선 제가 짠 코드는 이렇습니다
#include <stdio.h>
int main(){
int ar[11][10];
int i,j;
int count=0;
for(i=0;i<11;i++){
for(j=0;j<10;j++){
scanf("%d",&ar[i][j]);
}
}
for(i=0;i<10;i++){
if(ar[10][i]==1){
count=0;
for(j=0;j<10;j++){
if(ar[j][i]>0){
printf("%d crash\n",i+1);
break;
}
else if(ar[j][i]<0){
printf("%d fall\n",i+1);
break;
}
count++;
}
if(count==10){
printf("%d safe\n",i+1);
}
}
}
return 0;
}
=================================================================================
계속 테스트 케이스 3번에서 막히는데 도저히 아무리 봐도(한 삼일은 본것 같습니다 ㅠ) 더이상 수정할 곳도 그리고 오류가나는 부분도 이해가 안가서요 ㅠ
오류 내용은
==============================================
입력:
-1 0 0 0 0 0 0 0 -1 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1
1 1 0 0 1 1 0 1 0 1
정답
1 crash
2 crash
5 crash
6 crash
8 crash
10 crash
출력 결과
1 fall
2 crash
5 crash
6 crash
8 crash
10 crash
==============================================================================
이렇습니다....
제발 제가 실수한 거였으면 좋겠네요.... 그렇지않으면 이문제에 쏟은 시간이랑 멘탈마저 깨저버려서 더이상 공부도 안되네요 ㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
문제의 조건은 이렇습니다.
각 말들은 제일 아래쪽에서 위쪽 방향으로 진격한다.
그런데
j
는0
부터9
까지 순회하고 있습니다.그 말인즉 지금 말들은 위에서 아래로 진격하고 있는 겁니다.
즉, 핵심 테스트 대상인
ar[j][i]
가ar[9][0]
,ar[8][0]
, ... 순으로 체크되고 있지 않고 거꾸로 되고 있다는 말이죠.잘못된 출력을 잘 보시면, 예컨대 1번마는
ar[0][0]
인-1
에 빠져서1 fall
로 찍힌 걸 보실 수 있지요.for (int j = 9; j >= 0; j--)
로 고쳐서 다시 해보세요.
PS. "1번마"라는 표현을 쓰긴 했지만 여기서의 '말'이란 동물[馬]이 아니지요. 1분 국어상식.
- 아아..!!! 당연한 건데 왜 생각을 못 했을까요ㅠ 그런데 한가지 의문점은 그럼 10번 마는 왜 fall 이 안나오고 알 수 없는 사용자 2019.12.30 00:08
- 음? 10번마는 0, 0, 0, 0, 0, 0, 0, 0, 0, 1을 달려서 crash했겠네요. 엽토군 2019.12.30 00:09
- 아 정확하게 이해됬습니다 정말 감사드려요!ㅠ 그리고 제 실수가 맞아서 너무 다행입니다 ㅠㅠ 확실히 알고리즘은 논리적인 사고방식이 끊김없이 이어져야 하는 것 같습니다 왜 저기서 막혔는지 한번 더 생각해 보러 가야겠네요 국어상식도..정말 잘 배우고 갑니다 감사드립니다!! 알 수 없는 사용자 2019.12.30 00:13
댓글 입력