본문 바로가기

해커랭크(Problem Solving)

(16)
Red Knight’s Shortest Path 문제: Red Knight’s Shortest Path 난이도: Medium 문제 설명 Red Knight는 다음과 같은 방식으로 체스판을 이동한다고 한다. 체스판의 크기n, 시작 지점의 row와 col(i_start, j_start), 도착 지점의 row와 col(i_end, j_end)이 주어질 경우, 최단 거리와 이동 경로의 움직임을 출력하여라. 만약 도착 지점에 도달할 수 없다면 Impossible을 출력하여라. 예를 들어, 7, 0, 3, 4, 3이 주어질 경우 출력 결과는 다음과 같다. 2 LR LL 문제 해결 소스 코드 static void printShortestPath(int n, int i_start, int j_start, int i_end, int j_end) { int[] dr =..
Knight on a Chessboard 문제: Knight on a Chessboard 난이도: Medium 문제 설명 체스의 나이트는 L모양으로 이동한다. Knight(a, b)를 나이트가 한 번에 수직으로 a만큼, 수평으로 b만큼 이동한다는 것으로 정의한다. 정사각형 체스판의 길이 n이 주어졌다면, 나이트가 (0, 0)의 위치에서 (n-1, n-1)까지 가기 위해 최소 몇 번 이동하는지를 구한 값들이 들어있는 2차원 배열을 구하여라. 구하는 2차원 배열의 크기는 (n-1) x (n-1)이고, [0][0]부터 [n-2][n-2]까지 존재하는 각각의 요소는 a=1, b=1일 때의 결과부터 a=n-1, b=n-1일 때의 결과에 대응한다. 만약 Knight(a, b)가 값을 구할 수 없다면 값을 -1이라고 한다. 문제 해결 소스 코드 static..
Count Luck 문제: Count Luck 난이도: Medium 문제 설명 N x M의 그리드에서 ‘X’는 지나갈 수 없는 나무, ‘.’은 지나갈 수 있는 길, ‘M’은 현재 위치, ‘*’은 도착 지점이라고 정한다. 헤르미온느는 마법의 지팡이를 사용해 갈림길에서 반드시 정확한 방향을 찾아낼 수 있다. 론은 헤르미온느가 마법의 지팡이를 몇 번 사용할지(k)를 예상하였다. 론이 정확하게 맞췄다면 “Impressed”를, 못 맞췄다면 “Oops”를 출력하게 하여라. 예를 들어 그리드가 다음과 같이 주어졌을 경우 두 번째 그림과 같이 마법의 지팡이를 3번 사용한다. 따라서 론이 예상한 횟수인 k가 3이면 “Impressed”를, 3이 아니면 “Oops를 출력하게 한다.” 문제 해결 소스 코드 public static int r..
Connected Cells in a Grid 문제: Connected Cells in a Grid 난이도: Medium 문제 설명 가로n, 세로m의 그리드가 있고, 그리드 각각의 칸에는 0 또는 1의 값이 있다. 1이 인접해있는 부분을 region이라고 하면, 그리드에서 가장 큰 region의 크기를 구하여라. 예를 들어 그리드가 다음과 같이 주어졌을 경우 1 1 0 0 0 1 1 0 0 0 1 0 1 0 0 0 가장 큰 region의 크기는 5이다. 문제 해결 소스 코드 public static int r; public static int rowMax; public static int colMax; public static List size; static int connectedCell(int[][] matrix) { rowMax = matrix..
Pairs 문제: Pairs 난이도: Medium 문제 설명 어떤 정수 배열과 값 k가 주어졌을 때, 배열의 두 요소의 차가 k인 경우가 몇 개인지 구하여라. 예를 들어 배열이 {1, 2, 3, 4}이고, k=1일 때, 요소의 차가 1인 경우는 4-3=1, 3-2=1, 2-1=1 총 3가지이므로 답이 3이다. 문제 해결 소스 코드 static int pairs(int k, int[] arr) { int result = 0; int len = arr.length; Arrays.sort(arr); for(int i = len-1; i > 0; i--) { if(arr[i]= 0; j--) { if(arr[i] - arr[j] == k) { result++; }else if(arr[i] - arr[j] > k) { br..
Absolute Permutation 문제: Absolute Permutation 난이도: Medium 문제 설명 n과 k(n은 0보다 큰 정수, k는 0보다 크거나 같은 정수)가 주어졌을 때 1부터 n까지의 정수가 하나씩 들어있는 배열 P의, 사전 순으로 가장 작은 absolute permutation을 구하라. 만약 P의 absolute permutation이 없다면 값이 -1만 있는 배열을 리턴하라. absolute permutation은 배열의 모든 값과 그 값의 자리값(1부터 n까지)의 차의 절대값이 모두 k인 배열을 뜻한다. 예를 들어, n=4, k=2일 경우 P의 absolute permutation은 [3, 4, 1, 2]이다(3의 자리값은 1, 4의 자리값은 2, 1의 자리값은 3, 2의 자리값은 4 이므로 모두 차의 절대값..
The Grid Search 문제: The Grid Search 난이도: Medium 문제 설명 그리드와 패턴이 주어졌을 때, 주어진 패턴이 그리드 안에 존재하는지를 확인하여 존재하면 “YES”를, 아니면 “NO”를 출력하라. 예를 들어, 그리드와 패턴이 다음과 같이 주어졌다고 가정하자. 그리드(10행10열) 7283455864 6731158619 8988242643 3830589324 2229505813 5633845374 6473530293 7053106601 0834282956 4607924137 패턴(3행 4열) 9505 3845 3530 그리드 안에 패턴이 있으므로 YES이다. 문제 해결 소스 코드 static String gridSearch(String[] G, String[] P) { int gWidth = G[0].l..
Larry's Array 문제: Larry’s Array 난이도: Medium 문제 설명 1부터 값이 1씩 증가한 요소들로 이루어진 배열이 있다. 이 배열의 요소를 다음과 같은 방법으로 위치를 바꿀 경우 배열을 오름차순으로 정렬하는 것이 가능한가를 판별하여라. ABC -> BCA -> CAB -> ABC 배열 A가 {1, 6, 5, 2, 4, 3}일 경우는 다음과 같다. 문제 해결 소스 코드 static String larrysArray(int[] A) { int cnt = 0; String result = ""; for(int i = 0; i A[j]) { cnt++; } } } if(cnt % 2 == 0)..