-
[cospro] 체스의 나이트Algorithm 2022. 2. 18. 16:1601 COS PRO 1급 JAVA 1차100%[1차] 문제6) 체스의 나이트 - JAVA실습 내용
※ 프로그램 구현문제
□ 문제설명
체스에서 나이트(knight)는 아래 그림과 같이 동그라미로 표시된 8개의 방향중 한 곳으로 한 번에 이동이 가능합니다.
단, 나이트는 체스판 밖으로는 이동할 수 없습니다.체스판의 각 칸의 위치는 다음과 같이 표기합니다.예를 들어, A번줄과 1번줄이 겹치는 부분은 'A1'이라고 합니다.나이트의 위치 pos가 매개변수로 주어질 때, 나이트를 한 번 움직여서 이동할 수 있는 칸은 몇개인지 return 하도록 solution 함수를 완성해주세요.
□ 매개변수 설명
나이트의 위치 pos가 solution 함수의 매개변수로 주어집니다.- pos는 A부터 H까지의 대문자 알파벳 하나와 1 이상 8이하의 정수 하나로 이루어진 두 글자 문자열입니다.
- 잘못된 위치가 주어지는 경우는 없습니다.
□ return 값 설명
나이트를 한 번 움직여서 이동할 수 있는 칸의 개수를 return 해주세요.
□ 예시
pos return "A7" 3
□ 예시설명
나이트가 A7 위치에 있으면 아래 그림과 같이 왼쪽으로는 이동하지 못하고, 오른쪽으로는 맨 위를 제외한 나머지 세 칸으로 이동 가능합니다.
따라서, 3을 return 하면 됩니다.
class Main { public int solution(String pos) { int answer = 0; List<Integer> num = getNum(pos); int[] i = {-2, -1, 1, 2, 2, 1, -1, -2}; int[] j = {1, 2, 2, 1, -1, -2, -2, -1}; for(int k = 0; k < i.length; k++){ int possibleX = i[k] + num.get(0); int possibleY = j[k] + num.get(1); if ((possibleY >=0 && possibleX >= 0) && (possibleX <=7 && possibleY <= 7)) answer++; } return answer; } public List<Integer> getNum(String pos){ String[] split = pos.split(""); List<Integer> list = new ArrayList<>(); if(split[0].equals("A")) list.add(0); if(split[0].equals("B")) list.add(1); if(split[0].equals("C")) list.add(2); if(split[0].equals("D")) list.add(3); if(split[0].equals("E")) list.add(4); if(split[0].equals("F")) list.add(5); if(split[0].equals("G")) list.add(6); if(split[0].equals("H")) list.add(7); list.add(Integer.parseInt(split[1]) - 1); return list; }
'Algorithm' 카테고리의 다른 글
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) 2022.03.07 [프로그래머스] 로또 최고순위와 최저순위 (0) 2022.02.18 [cospro] 소용돌이 수 (0) 2022.02.18 [cospro] 언제까지 오르막길이야 (0) 2022.02.18 [cospro] 합이 k가 되는 배수 (0) 2022.02.18