C언어/주차별 문제

[8주차] 개미

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

문제


내가 작성한 코드

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

int main() {
    char map[12][12]; //가로 12 세로 12의 2차원 배열 생성

    for(int i = 0; i<12; i++){
        for(int j = 0; j<12; j++){
            map[i][j] = '.'; //모두 '.'으로 초기화
        }
    }

    for(int i = 0; i<12; i++){ //배열의 테두리를 모두 #으로 바꾸어주는 코드
        map[i][0] = '#';
        map[0][i] = '#';
        map[i][11] = '#';
        map[11][i] = '#';
    }

    map[1][1] = '#'; //시작점 #으로 설정 == 이거는 고정

    int second; //이동할 시간 입력
    scanf("%d", &second);

    int count = 0; //이동한 횟수 변수
    int se = 1; //맨 처음 이동할 칸의 se index 값
    int ga = 2; //맨 처음 이동할 칸의 ga index 값

    int way = 0; //갈 방향 오른쪽 = 0, 아래 = 1, 왼쪽 = 2, 위 = 3
    while(1){ //계속 반복되는 반복문
        if(count == second){ //이동이 끝난 경우
            break; //while문 탈출
        }

        //그 이외의 경우 == 계속 이동해야 함
        if(way == 0){//오른쪽으로 쭉
            while(1){
                map[se][ga] = '#'; //갔다는 표기
                count++; //간 횟수 증가
                int b = ga+1; //다음 칸 index

                if(map[se][b] == '#'){ //다음 칸이 #인 경우
                    way = 1; //아래로 방향 전환
                    se++;//다음 위치로 옮겨주기
                    break; //while문 탈출
                }

                ga++; //다음 칸으로 이동

                if(count == second){ //원하는 횟수만큼 갔을 경우 break
                    break;
                }                
            }
        }
        else if(way ==1){//아래로 쭉
            while(1){
                map[se][ga] = '#'; //갔다는 표기
                count++; //간 횟수 증가
                int a = se+1; //다음 칸 index

                if(map[a][ga] == '#'){ //다음 칸이 #인 경우
                    way = 2; //왼쪽으로 방향 전환
                    ga--;//다음 위치로 옮겨주기
                    break; //while문 탈출
                }

                se++; //다음칸으로 이동

                if(count == second){ //원하는 횟수만큼 갔을 경우 break
                    break;
                }
            }
        }
        else if(way ==2){//왼쪽으로 쭉
            while(1){
                map[se][ga] = '#'; //갔다는 표기
                count++; //간 횟수 증가
                int b = ga-1; //다음 칸 index

                if(map[se][b] == '#'){ //다음 칸이 #인 경우
                    way = 3; //위로 방향 전환
                    se--;//다음 위치로 옮겨주기
                    break; //while문 탈출
                }

                ga--; //다음 칸으로 이동

                if(count == second){ //원하는 횟수만큼 갔을 경우 break
                    break;
                }
            }
        }
        else{//위로 쭉
            while(1){
                map[se][ga] = '#'; //갔다는 표기
                count++; //간 횟수 증가
                int a = se-1; //다음 칸 index

                if(map[a][ga] == '#'){ //다음 칸이 #인 경우
                    way = 0; //오른쪽으로 방향 전환
                    ga++; //다음 위치로 옮겨주기
                    break; //while문 탈출
                }

                se--; //다음칸으로 이동

                if(count == second){ //원하는 횟수만큼 갔을 경우 break
                    break;
                }
            }
        }
    }

    for(int se = 1; se<11; se++){ //테두리 제외하고 반복
        for(int ga = 1; ga<11; ga++){
            printf("%c", map[se][ga]); //이동 경로 출력하기
        }
        printf("\n"); // 한 줄 출력 완료하면 개행
    }
    return 0;
}