Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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 31
Archives
Today
Total
관리 메뉴

끄적끄적

SWE Ladder1 본문

알고리즘

SWE Ladder1

yenacathy97 2021. 8. 6. 21:05

100 x 100 배열에서 arr[i][j]=2인 곳을 목적지로 하는 arr[0][i]의 i를 찾는 문제이다.

 

같은 방향으로 나아가다가 다음 위치에 1이 아니거나 다음 위치가 인덱스를 벗어나면 방향을 바꾼다. 아래로만 향하고 오른쪽이나 왼쪽이 있으면 방향을 바꾸며 나아간다. 재귀를 통해 반복하다가 arr[i][j]=2이면 탈출한다.

 

package day0803;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Ladder {
	static int [][]arr;
	static int ans;
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

		for (int t = 1; t <= 10; t++) {
			int test = Integer.parseInt(bf.readLine());
			arr = new int[100][100];
			for (int i = 0; i < 100; i++) {
				String s = bf.readLine();
				StringTokenizer st = new StringTokenizer(s);
				for (int j = 0; j < 100; j++) {
					arr[i][j] = Integer.parseInt(st.nextToken());

				}
			}

			for (int i = 0; i < 100; i++) {
				if (arr[0][i] == 1)
					findWay(0, i, i,1,arr);
			}
			System.out.println("#"+t+" "+ans);
		}
	}

	static void findWay(int i, int j, int start,int direc,int [][]arr) {
	//y축 좌표, x축 좌표, 처음 출발지의 위치, 방향,배열
		
		
		if(direc==2) {//오른쪽
			if(j+1<100 && arr[i][j+1]==1 ) { //계속 오른쪽 방향으로 나아갈 수 있을때
				findWay(i,j+1,start,2,arr);
			}
			else {
				findWay(i+1,j,start,1,arr); //아래방향으로 내려가기
			}
			
		}
		else if(direc==3) {//왼쪽
			if(j-1>=0 && arr[i][j-1]==1 ) //계속 왼쪽 방향으로 나아갈 수 있을 때
				findWay(i,j-1,start,3,arr);
			else findWay(i+1,j,start,1,arr); //아래방향으로 내려가기
		}
		
		else { //아래 방향
			if(j+1<100 && arr[i][j+1]==1 ) { //오른쪽으로 나아갈 수 있을 때
				findWay(i,j+1,start,2,arr);
			}
			else if(j-1>=0 && arr[i][j-1]==1 ) {//왼쪽으로 나아갈 수 있을 때
				findWay(i,j-1,start,3,arr);
			}
			else {
				if(i<99) //아래방향으로 나아가기
				findWay(i+1,j,start,1,arr);
			}
		}
		
	
		if(i==99) {//최종 99줄에 도착했을 때
			if(arr[i][j]==2) { //만약 도착지라면
		
				ans=start; //답을 출발지로 바꿈
			}
			return ;
		}
	}
	
	
	

}

'알고리즘' 카테고리의 다른 글

SWE 원재의 메모리 복구하기  (0) 2021.08.06
SWE 달뱅이 숫자  (0) 2021.08.06
SWE Flatten  (0) 2021.08.06
SWE 상호의 배트필드  (0) 2021.08.06
SWE 농작물 수확하기  (0) 2021.08.06
Comments