코딩테스트/HackerRank 22

[HackerRank] Max Min 📌

문제 그리디 알고리즘 ...? n개의 값를 가지고 있는 배열 arr에서 k개를 선택하여, 그 중 가장 큰 수와 작은 수의 차이가 최소가 되는 값 다른 사람 풀이 package hackerrank; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class MaxMin { public static void main(String[] args) { /* * n개의 숫자가 들어있는 배열 arr, 그 중에서 k개를 뽑아서 배열 arr2를 만들어 * k개가 있는 배열 arr2에서 max와 min의 차이 구함 * 그 차이가 가장 작은 것이 답 */ int[] array = arr.stream().mapToInt(..

[HackerRank] Caesar Cipher 📌

문제 입력받은 문자열s에서 k만큼 이동한 문자열대로 암호화하기 내 생각 아 이렇게 하면 되겠다 했는데 안풀렸다 내 생각으로는 - 원래 알파벳 순서대로 들어있는 배열을 만들고, rotated된 빈 배열을 새로 만듦 - 원래 알파벳 배열에서 k만큼 이동한게 rotated 된 배열 (그래서 원래 배열에서 앞 k만큼을 떼서 뒤에다가 붙이려고 했다 ㅋ 머 잘라서 append를 해야되나 했는데 점점 복잡해져서 이게 맞나 함) - charAt()으로 입력받은 문자열의 각 문자의 인덱스를 구하고, 그 인덱스에 해당하는 문자를 rotated 배열에서 찾음 이런식으로 하려고 했는데..... 안 됐다 다른 사람 풀이 (아스키코드 !!) package hackerrank; import java.util.Scanner; pub..

[HackerRank] Sales by Match ✔📌

문제 n = 양말 짝 수 ar = 양말의 색깔을 나타내는 정수 배열 ar 배열에서 양말이 총 몇 켤레(쌍)가 나오는지 구하기 내 풀이 빈도수 구하는 배열을 만들어서 각 양말 색깔에 해당하는 정수가 몇번씩 들어있는지를 빈도수 배열에 새로 담음 그 빈도수를 2로 나누면 ( 2짝씩 1 켤레니까) 켤레 수가 나옴 -> 이걸 다 더함 잘못했던 점 빈도수 배열을 초기화할 때, 아래와 같이 설정해서 런타임 에러가 발생했다. int[] freq = new int[100]; 제약조건을 보면 1 ~ 100 까지의 정수가 양말 색깔로 표시될 수 있다 -> 100까지 포함이 되어야 하는데 freq 배열에서 [100]개 짜리 배열로 초기화 해버리면 배열이 0부터 시작되니까 0부터 100개, 즉 0 ~ 99 까지만 들어간다

[HacerRank] Permuting Two Arrays 📌, int[]와 Integer[] 차이

문제 A 배열과 B 배열을 조합해서 A`[i] + B`[i] >= k 를 모두 만족시키는 조합이 있으면 YES, 없으면 NO 반환 다른 사람 풀이 1) List를 배열로 변환 2) 배열을 정렬 (Barr은 내림차순으로 하고싶었는데 좀 복잡하더라) 3) A 배열의 i번째와 B 배열의 역순번째(?) 합으로 계산 만약, int[ ] 가 아니라 Integer[ ] 로 받으면 내림차순 다르게 가능 public static String twoArrays(int k, List A, List B) { Integer[] Aarr = A.toArray(new Integer[0]); Integer[] Barr = B.toArray(new Integer[0]); Arrays.sort(Aarr); Arrays.sort(Barr..

[HackerRank] Pangrams 📌

문제 갑자기 중국어로 나오고 난리 ..;; 암튼 주어진 문자열에서 모든 알파벳이 다 쓰였으면 "pangram" 출력, 다 쓰이지 않았으면 "not pangram" 출력 다른 사람 풀이 너무 어렵다 진짜 !!! 1) boolean 값을 담을 alphabets 배열 생성 (알파벳 26자) 2) 문자열의 길이만큼 for문을 돌면서 한 글자씩 추출하고, 소문자로 변환 3) 추출한 글자가 a ~ z 에 해당하면, alphabets 배열 중 해당 알파벳의 인덱스 값(추출한 글자 - 'a')을 true로 변경 4) 완성된 alphabets 배열을 돌면서 만약 false 가 있으면 "not pangram" 출력, 없으면 "pangram" 출력 +) 다른 풀이 private static String pangrams(St..

[HackerRank] Diagonal Difference 📌

문제 주어진 2차원 리스트에서 왼쪽에서 오른쪽으로 가는 대각선의 합, 오른쪽에서 왼쪽으로 가는 대각선의 합의 차이 내 풀이 + 다른 사람 풀이 너무 어려워서 구글링 했슴다 ltr (왼쪽에서 오른쪽으로 가는 대각선의 합) : i와 j가 같을 때 rtl (오른쪽에서 왼쪽으로 가는 대각선의 합) : i와 j의 합 = arr 배열의 크기 - 1 --> 규칙 찾기 필요 ㅇ ㅇ ㅇ ㅇ -> [3, 0] ㅇ ㅇ ㅇ ㅇ -> [2, 1] ㅇ ㅇ ㅇ ㅇ -> [1, 2] ㅇ ㅇ ㅇ ㅇ -> [0, 3] arr.get(i).get(j) : arr 리스트에서 (i, j) 위치에 해당하는 요소

[HackerRank] Lonely Integer ✔📌

문제 주어진 a 배열에서 딱 1번만 나타나는 정수 반환 (론리 정수 ㅋㅋ) 내 풀이 최빈값 구하는 문제 응용 - 매개변수로 받은 List a를 int[ ] 배열로 변환 - 빈도수를 담을 freq 배열 생성 - a 배열의 값을 freq 배열의 인덱스로 삼아서 a 배열의 값의 빈도수가 freq 배열에 담기도록 freq 배열 완성 - freq 배열 중 값이 1인 것 (1번만 나타난 값)을 answer 변수에 담아서 반환

[HackerRank] Sparse Arrays ✔📌

문제 queries 배열에 들어있는 문자열이 strings 배열에 몇 번씩 들어가 있는지 그 횟수를 results 배열로 반환 근데 List로 반환 내 풀이 어이없는 데에서 오류가 나서 시간 개오래걸림 일단 매개변수로 받은 list를 배열로 바꿔줬음 오류난 부분 : 문자열 배열인데 내가 int[] 배열로 받으려 했음 ㅠ 참내 그래도 하나 배운 점 list를 int[] 배열로 변환하려면 List -> int[ ] int[] stringsArr = strings.stream().mapToInt(Integer::parseInt).toArray(); 이런 식으로 할 것 queriesArr 배열을 돌면서 그 안에 있는 문자열이 stringsArr 배열에 몇 번씩 들어있는지 확인하기 위해 이중 for문 사용 문자열..

[HackerRank] Time Conversion 📌

문제 12시간으로 표시되어 있는 시간을 24시간제로 변경하기 12:00:00 PM 일 때는 12:00:00, 12:00:00 AM 일 때는 00:00:00 내 풀이 (라고 할 수 없다) * String에서 부분 문자열을 잘라서 int에 넣기 * AM이면서 12시일 때 -> 12:00:00AM = 00:00:00 * PM이면서 12가 아닐 때 -> 1:00:00PM = 13:00:00 * String.format() : 문자열 형식 지정 %02d : 2자리 정수이고 빈자리는 0으로 채움