본문 바로가기

해커랭크(Problem Solving)

(16)
3D Surface Area 문제: 3D Surface Area 난이도: Medium 문제 설명 모서리의 길이가 1인 정육면체가 n x m의 영역 안에 각각 임의의 높이로 쌓여있을 때 겉넓이를 구하여라. 예를 들어, 위의 경우에는 겉넓이가 60이다. 문제 해결 소스 코드 static int surfaceArea(int[][] A) { int y = A.length; int x = A[0].length; int up = 0; int front = 0; int side = 0; int frontTemp = 0; int sideTemp = 0; int result = 0; for(int i = 0; i 0) { up += 2;..
Queen’s Attack II 문제: Queen’s Attack II 난이도: Medium 문제 설명 체스 판에 퀸이 하나, 장애물이 없거나 있을 경우 퀸이 몇 칸을 공격할 수 있는지를 구하여라. 주어지는 정보는 체스 판의 가로(세로)길이 n, 장애물의 수 k, 퀸의 위치인 r_q(행 위치)와 c_q(열 위치), 장애물들의 위치(행, 열)가 있다. 예를 들어, 체스 판의 크기가 5 x 5, 퀸의 위치가 (4, 3), 장애물이 3개이고 위치는 각각 (5, 5), (4, 2), (2, 3)이면 다음과 같은 상황이다. 따라서 이 경우의 답은 10이다. 문제 해결 소스 코드 static int queensAttack(int n, int k, int r_q, int c_q, int[][] obstacles) { int sr = r_q; int..
The Time in Words 문제: The Time in Words 난이도: Medium 문제 설명 시간에 대한 정보(시, 분)가 숫자로 주어지면 이를 토대로 시간을 영어문장으로 나타내라. 형식은 다음과 같다. 문제 해결 소스 코드 static String timeInWords(int h, int m) { int code = 0; // 1: o' clock, 2: past, 3: to String hour = null; String minute = null; String result = null; if(m == 0) { code = 1; } else if(m
Save the Prisoner! 문제: Save the Prisoner! 난이도: Easy 문제 설명 간수가 원탁에 앉은 죄수들에게 사탕을 나눠주려 한다. 그런데 간수가 장난을 쳐서 가장 마지막에 사탕을 받는 죄수는 반드시 끔찍한 맛의 사탕을 받게 된다. 죄수의 수 n, 사탕의 수 m, 시작하는 좌석의 번호 s가 주어질 경우 몇 번째 좌석의 죄수가 끔찍한 맛의 사탕에 당첨될지를 알아내라. 예를 들어 죄수가 4명, 사탕이 6개, 시작하는 좌석의 번호를 2라고 하면 2, 3, 4, 1, 2, 3으로 3번 좌석에 앉은 죄수가 끔찍한 맛의 사탕에 당첨된다. 문제 해결 소스 코드 static int saveThePrisoner(int n, int m, int s) { int result = 0; if(n >= m) { result = m + s..
Beautiful Days at the Movies 문제: Beautiful Days at the Movies 난이도: Easy 문제 설명 어떠한 두 정수 i, j와 나누는 수 k가 주어졌을 때, i부터 j까지 각각의 수를 뒤집고 그 뒤집은 수와의 차를 k로 나눠서 나누어 떨어지는 경우가 몇 가지인지를 구하라. 예를 들어 20, 23, 6이 주어졌을 경우, 20, 22는 뒤집은 수와의 차를 6으로 나누었을 때 나누어 떨어지지만 21, 23은 나누어 떨어지지 않는다. 문제 해결 소스 코드 static int beautifulDays(int i, int j, int k) { String toStr = null; String revStr = null; StringBuffer temp = null; int revInt = 0; int cnt = 0; char n..
Encryption 문제: Encryption 난이도: Medium 문제 설명 다음의 암호화 방식으로 영어 문자열을 암호화해야 한다. 먼저, 문자열에서 띄어쓰기를 제거하고 그 문자열의 길이를 L이라 한다. 그 후 문자들은 행과 열이 다음의 제약을 가진 격자 안에 적힌다. L을 내림한 값 ≤행 ≤열 ≤ L을 올림한 값 예를 들어, 문장 s = have a nice day는 havaniceday로 변환되고, L=12, L 은 3과 4 사이의 값이므로 행이 3, 열이 4인 격자 안에 쓰여져서 다음과 같게 된다. have anic eday 이 격자에 쓰인 문자를 왼쪽부터 세로로 읽고 각각의 덩어리를 띄어쓰기를 하면 암호화가 완료된다. hae and via ecy 단, 행 ×열 ≥ L 이어야 하고, 이를 만족하는 가장 작은 영역을 ..
Picking Numbers 문제: Picking Numbers 난이도: Easy 문제 설명 주어진 정수형 배열에서 둘의 차가 1이하인 정수 두 가지만을 요소로 갖는 배열 중 길이가 가장 긴 경우의 길이를 출력하여라. 예를 들어 배열 a = [1, 1, 2, 2, 4, 4, 5, 5, 5]의 경우는 [1, 1, 2, 2], [4, 4, 5, 5, 5] 두 가지 배열이 만들어질 수 있다. 그리고 두 배열 중 가장 길이가 긴 경우는 [4, 4, 5, 5, 5]의 5이다. 문제 해결 소스 코드 public static int pickingNumbers(List a) { List values = new ArrayList(); int max = 0; int maxTemp = 0; for(int i = 0; i < a.size(); i++) ..
Extra Long Factorials 문제: Extra Long Factorials 난이도: Medium 문제 설명 정수 n의 팩토리얼은 n! 로 표시되고, 다음과 같이 정의된다: n!=n×n-1×n-2×⋯×3×2×1 주어진 정수의 팩토리얼을 계산하고 출력하여라. 참고: 20보다 큰 정수의 팩토리얼은 64bit long long 변수에도 저장될 수 없다. 이 문제를 해결하려면 BigInteger를 사용하는 것을 권장한다. 문제 해결 소스 코드 static void extraLongFactorials(int n) { BigInteger big = BigInteger.ONE; while(n > 1) { big = big.multiply(BigInteger.valueOf(n)); n--; } System.out.println(big); } 해설 ..