문제

내가 작성한 코드
#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;
}
'C언어 > 주차별 문제' 카테고리의 다른 글
[10주차] 배열의 Swap (0) | 2023.06.06 |
---|---|
[10주차] 이중포인터를 이용한 최솟값, 최댓값 구하기 (0) | 2023.06.06 |
[8주차] 지뢰찾기2 (0) | 2023.04.23 |
[8주차] 2차원 배열에서 값 찾기 (0) | 2023.04.23 |
[8주차] 문자열의 길이_No Space_2차원 배열 (0) | 2023.04.23 |