반응형
안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 Q1099 : [기초-2차원배열] 성실한 개미 (자바, JAVA)입니다.
Intro
Question
문제 설명
입력
10*10 크기의 미로 상자의 구조와 먹이의 위치가 입력된다.
출력
성실한 개미가 이동한 경로를 9로 표시해 출력한다.
예시
- 입력 :
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 1 1 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 1 0 1 0 1
1 0 0 0 0 1 2 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 - 출력 :
1 1 1 1 1 1 1 1 1 1
1 9 9 1 0 0 0 0 0 1
1 0 9 1 1 1 0 0 0 1
1 0 9 9 9 9 9 1 0 1
1 0 0 0 0 0 9 1 0 1
1 0 0 0 0 1 9 1 0 1
1 0 0 0 0 1 9 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
Solution (풀이)
- 풀이 1 : 메모리 14512, 시간 122
public class Answer1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] maze = new int[10][10]; // 미로의 크기 2차원 배열 길이 선언
for (int i=0; i<10; i++) {
for (int j=0; j<10; j++) {
// 미로 갈 수 있는 곳(0), 벽 또는 장애물(1), 먹이(2) 입력받아 배열에 저장
maze[i][j] = sc.nextInt();
}
}
int position = 1;
// 개미의 이동경로 9로 바꾸기
for (int j=1; j<10; j++) { // 개미의 첫 위치는 maze[1][1]
// 먹이를 찾은 경우 or 마지막에 도착한 경우
if (maze[position][j]==2 || (position==8 && j==8)) {
maze[position][j] = 9; // 이동 경로 9로 바꾸기
break; // for문 종료
} else { // 먹이를 못찾은 경우
maze[position][j] = 9; // 이동 경로 9로 바꾸기
if (maze[position][j+1]==1) { // 다음 이동 경로가 장애물이 있으면
position += 1; // 세로로 1칸 이동
j -= 1; // 가로 한칸 전으로 이동
}
}
}
// 개미 이동경로 출력하기
for (int i=0; i<10; i++) {
for (int j=0; j<10; j++) {
System.out.print(maze[i][j] + " ");
}
System.out.println();
}
sc.close();
}
}
- 풀이 2 : 메모리 11240, 시간 67
public class Answer2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 미로의 크기 2차원 배열 길이 선언
String[][] maze = new String[10][10];
// 미로 만들기
for (int i=0; i<10; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int j=0; j<10; j++) {
// 미로 갈 수 있는 곳(0), 벽 또는 장애물(1), 먹이(2) 입력받아 배열에 저장
maze[i][j] = st.nextToken();
}
}
int x = 1; // 가로 위치 선언
// 개미의 이동경로 9로 바꾸기
for (int i=1; i<10; i++) { // 개미의 첫 위치는 maze[1][1]
// 먹이를 찾은 경우 or 마지막에 도착한 경우
if (maze[x][i].equals("2")) {
maze[x][i] = "9"; // 이동 경로 9로 바꾸기
break; // for문 종료
} else { // 먹이를 못찾은 경우
maze[x][i] = "9"; // 이동 경로 9로 바꾸기
if (maze[x][i+1].equals("1")) { // 다음 이동 경로가 장애물이 있으면
if (x==8 && i==8) { //더이상 움직이지 못할 경우
break;
} else {
x += 1; // 세로로 1칸 이동
i -= 1; // 가로 한칸 전으로 이동
}
}
}
}
StringBuilder sb = new StringBuilder();
for (String[] i : maze) { // 2중 foreach문 활용
for (String j : i) {
sb.append(j).append(" ");
}
sb.append("\n");
}
System.out.println(sb);
br.close();
}
}
Ranking(순위)
반응형
'Algorithm > CodeUp' 카테고리의 다른 글
[CodeUp_Java] Q1117 : 두 실수의 곱 (0) | 2022.04.29 |
---|---|
[CodeUp_Java] Q1103 : 폴더명 출력 (0) | 2022.04.29 |
[CodeUp_Java] Q1098 : [기초-2차원배열] 설탕과자 뽑기 (0) | 2022.04.27 |
[CodeUp_Java] Q1097 : [기초-2차원배열] 바둑알 십자 뒤집기 (0) | 2022.04.27 |
[CodeUp_Java] Q1096 : [기초-2차원배열] 바둑판에 흰 돌 놓기 (0) | 2022.04.27 |