티스토리 뷰

1210. [S/W 문제해결 기본] 2일차 - Ladder1

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14ABYKADACFAYh&categoryId=AV14ABYKADACFAYh&categoryType=CODE&problemTitle=%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%B0&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=5

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

// 210204

import java.io.*;
import java.util.*;

public class Solution_D4_1210_Ladder1  {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		for (int tc=1; tc<=10; tc++) {
			int tn = Integer.parseInt(br.readLine());
			
			StringTokenizer st = null;
			int goRow = 0;
			int goCol = 0;
			int[][] map = new int[102][102];
			int[] dr = {0, 0, -1};
			int[] dc = {-1, 1, 0};
			
			// 지도 입력
			for (int r=1; r<=100; r++) {
				st = new StringTokenizer(br.readLine(), " ");
				for (int c=1; c<=100; c++) {
					map[r][c] = Integer.parseInt(st.nextToken());
					if (map[r][c] == 2) {
						goRow = r;
						goCol = c;
					}
				}
			}
			
			while (true) {
				if (goRow == 1) break;
				for (int d=0; d<3; d++) {
					int nRow = goRow + dr[d];
					int nCol = goCol + dc[d];
					
					if (map[nRow][nCol] == 1) {
						
						map[goRow][goCol] = 0; 
						goRow = nRow;
						goCol = nCol;
						break;
					}
				}
			}
			
			System.out.println("#" + tc + " " + (goCol-1));
			
		}

		br.close();
	} // main

}

 

1. 2의 위치에서 탐색을 시작한다.
2. 왼쪽 -> 오른쪽 -> 위쪽 순서로 탐색하며 이동할 수 있으면 이동한다. 이때 원래 위치는 0으로 바꾸어서, 갔던 자리로 돌아가지 못하도록 한다.
3. 상하좌우 네면 끝을 0으로 감싼다. 어차피 0이면 그곳으로 이동하지 않는다. 범위 체크를 따로 할 필요가 없다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
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
글 보관함