전체 글 250

[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..

int 배열 arr에서 합이 100인 서로 다른 위치의 두 원소가 존재하는지 구하기

Q. 주어진 길이 N의 int 배열 arr에서 합이 100인 서로 다른 위치의 두 원소가 존재하면 1, 존재하지 않으면 0 반환하는 함수 func2(int arr[], int N) 작성 (arr의 각 수는 0 이상 100 이하, N은 1000 이하) func2({1, 52, 48}, 3) = 1; func2({50, 42}, 2) = 0; func2({4, 13, 63, 87}, 4) = 1; public static void main(String[] args) { int[] arr = {4, 13, 63, 87}; int N = 4; System.out.println("answer: " + func2(arr, N)); } private static int func2(int[] arr, int n) { ..

주어진 문자열에서 각 알파벳이 몇 번씩 나왔는지 구하기

import java.util.Arrays; public class App { public static void main(String[] args) { // 주어진 문자열에서 각 알파벳이 몇 번씩 나왔는지 String str = "sjan djfudnj alcls"; // 문자열 -> char[] char[] cArray = str.toCharArray(); // 알파벳 빈도수 담을 배열 int[] freq = new int[26]; for(char c : cArray) { if(c - 'a' != -65)// space - 'a' = -65 freq[c - 'a']++;// 'a' = 97 } System.out.println(Arrays.toString(freq)); } } 📌알아둘 것 * Strin..

[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..

비트연산자 AND, OR, XOR

알고리즘 문제 풀면서 XOR 문제가 꽤 많이 나왔는데 뭔말인지 모르겠어서 찾아봤다 비트연산 AND (논리곱) : 모두 1이어야 1 0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1 ex) 10011100 AND 01011010 = 00011000 OR (논리합) : 하나만 1이어도 1 0 OR 0 = 0 0 OR 1 = 1 1 OR 0 = 1 1 OR 1 = 1 ex) 10011100 AND 01011010 = 11011110 XOR (배타적 논리합) : 같이 않으면 1 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 1 = 1 1 XOR 1 = 0 ex) 10011100 AND 01011010 = 11000110 https://ko.khanacademy.org/..

Computer Science 2023.04.08

[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..