이코테 0711 - 구현

HyeJi9908·2022년 7월 11일
0

[JAVA] ThisIsCodingTest

목록 보기
2/12

📚 구현 - 왕실의 나이트

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		String inputData = scanner.nextLine();
		int col = (inputData.charAt(0) - 'a') + 1; 
		int row = inputData.charAt(1) - '0';
		// 좌표번호가 (1,1)부터 시작
		
		int[][] d = {{-2,1},{-2,-1},{2,1},{2,-1},{1,-2},{1,2},{-1,-2},{-1,2}};
		
		int answer=0;
		for(int[] dir:d) {
			int ny=row+dir[0];
			int nx=col+dir[1];
			
			if(ny<1||ny>8||nx<1||nx>8) continue;
			
			answer++;
			
		}
		
		System.out.print(answer);
	}

📚 구현 - 게임 개발

import java.util.Scanner;

public class Java0711_2 {
	
	// 이런 문제를 풀때 캐릭터의 방향 전환 등 메소드를 따로 분리해서 작성하는 경우가 많기 때문에
	// 메소드들이 공유할 수 있는 map[ ][ ]이나 visit[ ][ ] 등은 static 변수로 선언하여 관리하기 용이하도록 함
	static int n,m,y,x,dir;
	static int[][] visited;
	static int[][] arr;
	static int[][] d = {{-1,0},{0,1},{1,0},{0,-1}}; // 복동남서
	
	public static void turn_left() {
		dir--;
		if(dir==-1) dir=3;
	}
	
	public static void main(String[] args) {
		
		Scanner scanner =new Scanner(System.in);
		
		n=scanner.nextInt();
		m=scanner.nextInt();
		
		arr=new int[n][m];
		visited=new int[n][m];
		
		y=scanner.nextInt();
		x=scanner.nextInt();
		dir=scanner.nextInt();
		
		visited[y][x]= 1; // 현재 위치 방문 처리
		
		// 전체 맵 정보 입력받기
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) arr[i][j]=scanner.nextInt(); 
		}
		
		int cnt=1; 		// 이동한 칸 갯수
		int turn=0;		// 방향 바꾼 횟수
		
		while (true) {
			
			turn_left();
			int ny = y+d[dir][0];
			int nx = x+d[dir][1];
			
			// 방문한 적 없는 육지이면 이동
			if(arr[ny][nx] ==0&&visited[ny][nx]==0) {

				visited[ny][nx] =1;
				y=ny;
				x=nx;
				cnt++;
				turn=0;
				
				continue;
			}
			else turn++; // 회전했는데 가본 칸이나 바다일 때
			
			if(turn==4) {
				
				// 뒤로 가보고
				ny= y - d[dir][0];
				nx = x - d[dir][1];
				
				// 뒤가 육지면 뒤로 이동
				if(arr[ny][nx] == 0) {
					y = ny;
					x= nx;
				}
				else break;
				turn=0;
			}
			
		}
		System.out.print(cnt);
	}

}

0개의 댓글