코딩테스트/HackerRank 22

[HackerRank] Flipping bits 📌

문제 주어진 10진수 long 값을 -> 32비트 2진수로 변환 -> 비트 뒤집기 -> 10진수로 반환 다른 사람 풀이 private static long flippingBits(long n) { // 10진수 -> 2진수 -> 32비트 남은자리에 0 -> 각 표현 뒤집음 -> 10진수 반환 // 10진수 -> 2진수 String binary = Long.toBinaryString(n); StringBuilder sb = new StringBuilder(); // 32비트에서 2진수 길이 뺀 만큼 먼저 0을 채워줌 for(int i=0; i < 32-binary.length(); i++) { sb.append('0'); } // 그 다음에 2진수 채움 sb.append(binary); // 0을 2로, ..

[HackerRank] Flipping the Matrix 📌

문제 주어진 행렬의 행과 열을 뒤집을 수 있을 때, 1사분면의 합이 최대인 값 다른 사람 풀이 private static int flippingMatrix(List matrix) { // 행렬의 크기를 절반으로 나누면 -> 1사분면의 크기 int quadSize = matrix.size()/2; int sum = 0; for(int r=0; r < quadSize; r++) { for(int c=0; c < quadSize; c++) { // 2*quadSize = 행렬의 전체 크기 int p1 = matrix.get(r).get(c); int p2 = matrix.get((2*quadSize)-r-1).get(c); int p3 = matrix.get(r).get((2*quadSize)-c-1); in..

[HackerRank] XOR Strings 2 ✔

문제 주어진 두 문자열 s, t에 대한 XOR 연산 결과 반환 내 풀이 문제가 잘못된 듯하다. 주어진 코드에서 3줄만 고쳐서 디버그 하라는 문제인데 주어진 코드가 없다. 썡으로 코딩해야 함. 그래서 테스트케이스 답은 다 맞는데 자꾸 wrong answer 라고 나온다. discussion 보면 다들 똑같은 듯함. public class Solution { public static void main(String args[] ) throws Exception { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ Scanner sc = new Scanner(System.in); String s = sc.nextLine(); St..

[HackerRank] Between Two Sets 📌 (여러 수 최대공약수, 최소공배수)

문제 a배열의 최소공배수의 배수이면서 b배열의 최대공약수의 약수인 수(?) 의 개수 내 풀이 여러 수의 최소공배수, 최대공약수 구하는 방법은 쫌 찾아봤슴다 private static int getTotalX(List a, List b) { // a배열의 최소공배수 int aLCD = a.get(0); for(int i=1; i < a.size(); i++) { aLCD = LCD(aLCD, a.get(i)); } // b배열의 최대공약수 int bGCD = b.get(0); for(int i=1; i < b.size(); i++) { bGCD = GCD(bGCD, b.get(i)); } // a배열의 최소공배수의 배수이면서 b배열의 최대공약수의 약수 int answer = 0; for(int i=1; i

[HackerRank] Palindrome Index(투포인터) 📌

문제 거꾸로 읽어도 똑같은 문자열이 되도록 하기 위해 몇번째 문자를 제거해야 하는지 구하기 이미 palindrome 이거나 답이 없으면 -1 반환 이게 투포인터구나.. 내 풀이 일단 틀렸다. test case 몇 개 통과가 안되고, 시간이 초과되어서 점수 한 18점 정도 받았음 .. ㅠ 앞에서부터 읽었을 때와 뒤에서부터 읽었을 때가 같은지를 어케 알 수 있을까 하다가 더 고민하지 않고 문자열의 첫번째부터 삭제해가면서 reverse()를 사용했는데 그럼 다시 또 reverse를 해야하고, deleteCharAt()으로 삭제하고 나서 다시 원래 문자열을 담아야 하고 그래서 복잡하긴 했다 .... ㅠ private static int palindromeIndex(String s) { StringBuffer s..

[HackerRank] Drawing Book 📌

문제 n = 전체 페이지 수 p = 펼치려는 페이지 번호 1페이지가 항상 오른쪽 페이지에 있을 때, 앞에서부터 펼칠 때와 뒤에서부터 펼칠 때 중 넘기는 페이지가 가장 작은 수 반환 내 풀이 n이랑 p를 1부터 다 적어가면서 뭔가 규칙은 찾았는데 앞에서부터 넘길 때는 p/2 라는 규칙은 찾았는데 뒤에서부터 넘길 때는 뭔가 p가 짝수일 때와 홀수일 때가 구분된다는 건 찾았지만 그걸 어떻게 구현해야되는지 도저히 풀 수가 없어서 찾아봤다..... ㅠ public static int pageCount(int n, int p) { // 앞에서부터는 항상 p/2 int fromFront = p/2; // 뒤에서부터는 p가 짝수일 때와 홀수일 때 구분 int fromBack = 0; if(p%2 == 0) { from..

[HackerRank] Recursive Digit Sum 📌

문제 주어진 문자열 n과 정수 k를 이용해서 p라는 수를 만들고, p의 super digit 계산 p는 n을 k번 반복한 수 내 풀이 (틀림) 왜 틀린걸까요? 왜틀린건지 모르겠네 ... 아 일단 문제 이해를 못하겠다 k가 무슨 의미인지 이해가 안된다 public static int superDigit(String n, int k) { int superDigit = 0; for(int i=1; i 0) { sum += num%10; num /= 10; } n = Integer.toString(sum); if(n.length() == 1) { superDigit = Integer.parseInt(n); } } return superDigit; } 다른 사람 풀이 public static int superDi..

[HackerRank] Sherlock and Array 📌

문제 주어진 배열에서 한 원소를 기준으로 오른쪽 원소들의 합 = 왼쪽 원소들의 합을 만족하는 원소가 있으면 YES, 없으면 NO 반환 내 풀이 안풀려서 중간에 고양이들이랑 쫌 놀고 구글링해서 힌트얻고 풀었더니 1시간 반정도 걸렸는데 이게 맞나 .... public static String balancedSums(List list) { // 배열로 변환 int[] arr = list.stream().mapToInt(i -> i).toArray(); // 배열 전체 합계 int totalSum = Arrays.stream(arr).sum(); // 변수 초기화 int rightSum = totalSum;// 오른쪽 합계 = 전체 합계로 초기 설정 int leftSum = 0;// 왼쪽 합계 // 오른쪽 합계..

[HackerRank] Grid Challenge 📌

문제 왜자꾸 중국어로 나오는건지 모르겠지만 암튼 입력받은 배열에 대해서 배열을 각 행마다, 각 열마다 정렬이 되면 YES, 안되면 NO를 출력하라는 것 같다 내 풀이 진짜 고민 많이 하고.... 문자열 정렬하는거(Char배열로 만들어서 정렬)는 구글의 도움을 받았지만 그래도 한 80%는 스스로 풀어서 쫌 뿌듯하다 ㅠ 근데 일단 이건 틀렸다. 원래는 이렇게 풀었음 테스트코드 몇개는 통과하는데 몇개에서 틀림 public static String gridChallenge(List grid) { // 배열의 각 요소(문자열) 정렬 for(int i=0; i < grid.size(); i++) { String str = grid.get(i); // "ebacd" char[] cArr = str.toCharArra..