[알고리즘]/이코테

구현 - 왕실의 나이트

broship 2021. 2. 23. 14:18

문제


- 행복 왕국의 왕실 정원은 체스판과 같은 8 X 8 좌표 평면입니다. 왕실 정원의 특정한 한 칸에 나이트가 서 있습니다.

- 나이트는 말을 타고 있기 때문에 이동을 할 때는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없습니다.

- 나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동할 수 있습니다.

1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기

2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기

- 이처럼 8 X 8 좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하세요. 왕실의 정원에서 행 위치를 표현할 때는 1부터 8로 표현하며 열 위치를 표현할때는 a부터 h로 표현합니다.

 

입력 -> 출력

c2 -> 6

a1 -> 2

 

 

 

문제해결


1) 내 풀이

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	
	String input = sc.next();
	
	//현재 위치 좌표로 변환 c2 -> (2,3)
	int x = input.charAt(1)-'0';
	int y = 0;
	switch(input.charAt(0)) {
		case 'a': y=1; break;
		case 'b': y=2; break;
		case 'c': y=3; break;
		case 'd': y=4; break;
		case 'e': y=5; break;
		case 'f': y=6; break;
		case 'g': y=7; break;
		case 'h': y=8; break;
	}
	
	int cnt = 0;
	
	//말이 움직일 수 있는 모든 경우에수 8가지
	if(y-2>=1) {
		if(x-1>=1) cnt++;
		if(x+1<=8) cnt++;
	}
	if(x-2>=1) {
		if(y-1>=1) cnt++;
		if(y+1<=8) cnt++;
	}
	if(y+2<=8) {
		if(x-1>=1) cnt++;
		if(x+1<=8) cnt++;
	}
	if(x+2<=8) {
		if(y-1>=1) cnt++;
		if(y+1<=8) cnt++;
	}
	
	System.out.println(cnt);
}

 

 

2) 정답

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	
	String input = sc.next();
	
	//현재 위치 좌표로 변환 c2 -> (2,3)
	int x = input.charAt(1)-'0';
	int y = input.charAt(0)-'a'+1;//영문자를 숫자로 바꾸는 방법
	
	//나이트가 이동할 수 있는 8가지 방향 정의
	int[] dx = {-2,-1,1,2,2,1,-1,-2};
	int[] dy = {-1,-2,-2,-1,1,2,2,1};
	//8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
	int cnt = 0;
	
	for(int i=0;i<8;i++) {
		//이동하고자 하는 위치 확인
		int nextRow = x + dx[i];
		int nextCol = y + dy[i];
		//해당 위치로 이동이 가능하다면 카운트 증가
		if(nextRow>=1 && nextRow<=8 && nextCol>=1 && nextCol<=8)
			cnt++;
	}
	
	System.out.println(cnt);
}

 

- 영문자를 숫자로 표현하는건 이렇게 간단하게 할 수 있었다... 메모...

int y = input.charAt(0)-'a'+1;

- 말이 움직일 수 있는 8가지를 구하는건데, 배열 dx,dy로 방향 백터를 만드는게 더 복잡할 거 같아서 전부 if문으로 구현했는데, 정답을 보고 나니 방향 백터를 만드는게 생각보다 복잡하지 않았다, 나중에 더 어려운 문제에서는 방향 백터를 사용해봐야겠다

'[알고리즘] > 이코테' 카테고리의 다른 글

다이나믹 프로그래밍 - 피보나치 수열  (0) 2021.07.11
구현 - 문자열 재정렬  (0) 2021.02.24
구현 - 시각  (0) 2021.02.20
구현 - 상하좌우  (0) 2021.02.19
그리디 - 모험가 길드  (0) 2021.02.18