C언어/주차별 문제

[8주차] 지뢰찾기2

슈슈버거 2023. 4. 23. 13:32

문제


내가 작성한 코드

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    char map[10][10]; // 지뢰를 저장할 char형 2차원 배열
    int result[10][10] = {0}; //지뢰 개수를 저장할 int형 2차원 배열

    for(int se = 0; se<10; se++){ //세로로 0부터 9번째 줄까지
        char input[10]; //input 한줄 읽어오기
        scanf("%s", &input);

        for(int ga = 0; ga<10; ga++){ //가로로 0번째부터 9번째까지
            map[se][ga] = input[ga]; //지뢰 지도에 한 글자씩 저장해주기

            if(map[se][ga] == '*'){ //지뢰일 경우
                result[se][ga] -= 10; //본인 자리는 -10으로 설정

                if(se!=0){ //세로로 맨 첫번째 줄이 아닐 경우
                    int a = se-1;
                    result[a][ga]++; //자기 윗 줄 +1하기
                }

                if(se!= 9){ //세로로 맨 마지막 줄이 아닐 경우
                    int a = se+1;
                    result[a][ga]++; //자기 아랫줄 +1하기
                }

                if(ga!=0){ //가로로 맨 첫번째가 아닐 경우
                    int b = ga-1;
                    result[se][b]++; //자기 왼쪽 +1하기
                }

                if(ga!=9){ //가로로 맨 마지막이 아닐 경우
                    int b = ga+1;
                    result[se][b]++; //자기 오른쪽 +1하기
                }
            }
        }
    }

    for(int se = 0; se<10; se++){ //세로로 0번째부터 9번째까지
        for(int ga = 0; ga<10; ga++){ //가로로 0번째부터 차례대로
            int finalresult = result[se][ga]; //result 값 불러오기

            if(finalresult == 0){ //주위 지뢰가 0일 경우
                printf("_");
            }
            
            if(finalresult == 1){ //주위 지뢰가 1일 경우
                printf("1");
            }
            
            if(finalresult == 2){ //주위 지뢰가 2일 경우
                printf("2");
            }
            
            if(finalresult == 3){ //주위 지뢰가 3일 경우
                printf("3");
            }
            
            if(finalresult == 4){ //주위 지뢰가 4일 경우
                printf("4");
            }

            if(finalresult<0){ //지뢰일 경우
                printf("*");
            }
        }
        printf("\n"); //10개 출력후 줄 바꿈
    }

    return 0;
}

이렇게 코드를 짜면 VS Code에서는 잘 돌아가던데

제출 사이트에서는 오류 뜨더라....

 

조교님께 여쭤봤더니 조교님도 오류 뜬다고 약간 정식이 아닌 방법으로 풀어서 내라더라

그래서 그 사이트에는

    if(map[0][0] =='*'){ //map[0][0]만 한 번 더 고려해주는 코드
        result[0][0] = -10;
    }
    else{
        if(map[0][1] == '*' && map[1][0] == '*'){ //옆과 아래가 모두 지뢰
            result[0][0] == 2;
        }
        else if(map[0][1] == '*' && map[1][0] != '*'){ //옆은 지뢰 아래는 지뢰 X
            result[0][0] == 1;
        }
        else if(map[0][1] != '*' && map[1][0] == '*'){ //옆은 지뢰 X 아래는 지뢰
            result[0][0] == 1;
        }
        else{ //둘 다 지뢰 X
            result[0][0] == 0;
        }
    }

이거 추가해줬더니 정답 처리되더라....

 

왜 .... 사이트에서는 다르게 나오는 걸까ㅠㅠ

아는 사람 찾고싶다.....