[BOJ] 알파벳

박신희·2022년 8월 19일

[풀이] BOJ

목록 보기
6/7
post-thumbnail

❗ 풀이과정

  • map 배열에 알파벳 저장
  • 방문했던 알파벳이라면 isVisited라는 배열에 알파벳 저장
  • isVisited 배열은 맨 처음에는 static 변수로 선언했지만, 그렇게하면 방문했던 알파벳이 누적이 되었기 때문에, 함수의 매개변수로 선언!
  • 방향을 나타내는 dx, dy 배열을 사용하여, ➡⬇⬅⬆ 순으로 map 탐색
  • 4방 탐색을 다 완료했다면, 최종 결과값인 result 변수에 최댓값 저장!

🤜 풀이 코드

import java.util.Scanner;

public class Main {
	// 우, 하, 좌, 상
	static int 	[] dx = {1,0,-1,0};
	static int 	[] dy = {0,-1,0,1};
	
	static char [][] 	map;
	
	static int R,C,result;
	
	
	static void getMaxDist(int x, int y, int d, char [] isVisited,int v_idx) {
		
		// 들렸던 알파벳인지 확인 -> 있다면 return!
		for(int i=0;i<v_idx;i++) {
			if(isVisited[i]==map[y][x]) return;
		}
		
		
		// 들리지 않았던 알파벳이라면 isVisited 함수에 저장
		isVisited[v_idx++]=map[y][x];
		d++;
		
		// 우,하,좌,상 을 탐방하면서 거리 찾기
		for(int i=0;i<4;i++) {
			if(y+dy[i]<0 || y+dy[i]>=R || x+dx[i]<0 || x+dx[i]>=C) continue;
			if(map[y+dy[i]][x+dx[i]]!='#') {
				getMaxDist(x+dx[i],y+dy[i],d,isVisited,v_idx);
			}
		}
		
		result=Math.max(result, d);
	}
	
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		R = sc.nextInt();		// 세로
		C = sc.nextInt();		// 가로
		
		map = new char	[R][C];					// 알파벳을 저장하는  배열
		
		char [] isVisited 	= new char 	[R*C];	// 방문했던 알파벳을 저장하는 배열 
		char v_idx	= 0;
		result		= 0;	// 최종 결과값
		
		// 입력받기
		for(int r=0;r<R;r++) {
			String str = sc.next();
			map[r] = str.toCharArray();
		}

		getMaxDist(0,0,0,isVisited, v_idx);
		
		System.out.println(result);
		sc.close();
	}
}
profile
log my moments 'u')/

0개의 댓글