코딩테스트/코드업

진격 후 결과 C++(1509)[코드업, codeup]

멍토 2020. 1. 7.

※ 저의 풀이가 무조건적인 정답은 아닙니다.

다른 코드가 좀 더 효율적이고 좋을 수 있습니다.

다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.

문제 주소입니다.

https://codeup.kr/problem.php?id=1509

 

진격 후 결과

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

codeup.kr


1. 문제

2. 문제 해석

3. 소스 코드


문제

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


2. 문제풀이

코드에 주석있습니다.


3. 소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
 
using namespace std;
 
int main() {
    //11*10 배열
    int arr[11][10]{ 0 };
    //값 입력받기
    for (int i = 0; i < 11; i++) {
        for (int j = 0; j < 10; j++) {
            cin >> arr[i][j];
        }
    }
    //진군하면서체크하기
    for (int j = 0; j < 10; j++) {
        for (int i = 9; i >= 0; i--) {
            //값이 비어있다면 패스하기
            if (!arr[10][j])         break;
            //평지라면 진행, 마지막까지갔다면 safe출력
            if (!arr[i][j]) {
                if (!i)    cout << j + 1 << " safe" << endl;
                continue;
            }
            //장에물을 만났다면 crash출력하고 다음으로 넘어가기
            else if (arr[i][j] > 0) {
                cout << j + 1 << " crash" << endl;
                break;
            }
            //구덩이를 만났다면 fall을 출력하고 다음으로 넘어가기
            else if (arr[i][j] < 0) {
                cout << j + 1 << " fall" << endl;
                break;
            }
        }
    }
    return 0;
}

댓글

💲 광고입니다.