본문 바로가기
코딩테스트/알고리즘 코드카타

알고리즘 코드카타 31~40

by worldcenter 2024. 9. 19.

 

31. 수박수박수박수박수박수?

class Solution {
    public String solution(int n) {
        String answer = "";


        if (n % 2 == 0) {
            for (int i = 1; i <= n / 2; i++) {
                answer = answer + "수박";

            }
        } else if(n == 1) {
            answer = "수";

        } else {
            for (int i = 0; i < n / 2; i++) {
                answer = answer + "수박";
            }
            answer = answer + "수";
        }
        return answer;
    }
}

 

 

32. 내적

class Solution {
    public int solution(int[] a, int[] b) {
        int answer = 0;

        for (int i = 0; i < a.length; i++) {
            answer += a[i] * b[i];

        }
        return answer;
    }
}

 

 

33. 약수의 개수와 덧셈

class Solution {
    public int solution(int left, int right) {
        int answer = 0;

        // left와 right 사이의 수들의 약수 구하기
        for (int i = left; i <= right; i++) {
            int count = 0;
            for (int j = 1; j * j <= i; j++) {
                if (j * j == i) count++;
                else if (i % j == 0) count+=2;
            }
            if (count % 2 == 0) {
                answer += i;
            } else {
                answer -= i;
            }
        }
        
        return answer;
    }
}

 

소인수분해 알고리즘

https://devmoony.tistory.com/169

 

[Java] 약수의 개수 구하는 최적의 방법(알고리즘)

Java - 약수의 개수 구하기 (최적의 방법) 최근에 코딩테스트 문제를 풀다가 약수의 개수 관련해서 로직을 작성한 기억이 많다. 그러다 기본적인 방법 외에 조금 더 효율적으로 약수의 개수를 구

devmoony.tistory.com

 

 

34. 문자열 내림차순으로 배치하기

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        
        char[] charText = s.toCharArray();
        char[] charAnswer = new char[charText.length];

        // 오름차순 정렬
        Arrays.sort(charText);


        // 내림차순 정렬
        for (int i = 0, j = charText.length - 1; i < charText.length && j >= 0; i++, j--) {
            charAnswer[i] = charText[j];
        }

        String answer = new String(charAnswer);
        return answer;
    }
}

 

 

35. 부족한 금액 계산하기

class Solution {
    public long solution(int price, int money, int count) {
        long sum = 0;

        for (int i = 1; i <= count; i++) {
            sum += (price * i);

        }
        
        if (sum > money) {
            long answer = sum - money;
            return answer;
        } else {
            return 0;
        }
    }
}

 

 

36. 문자열 다루기 기본

class Solution {
    public boolean solution(String s) {
        boolean answer = true;
        char[] sToChar = s.toCharArray();

        if (s.length() == 4 || s.length() == 6) {
            for (int num : sToChar) {
                if (num >= 48 && num <= 57) {
                    answer = true;
                } else {
                    answer = false;
                    break;
                }
            }

        } else {
            answer = false;
        }
        
        return answer;
    }
}

 

 

37. 행렬의 덧셈

class Solution {
    public int[][] solution(int[][] arr1, int[][] arr2) {
        
        int[][] answer = new int[arr1.length][arr1[1].length];

        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                answer[i][j] = arr1[i][j] + arr2[i][j];

            }
            
        }
        return answer;
    }
}

 

 

38. 직사각형 별찍기

import java.util.Scanner;

class Solution {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        for (int i = 0; i < b; i++) {
            for (int j = 0; j < a; j++) {
                System.out.print("*");

            }
            System.out.println();

        }
    }
}

 

 

39. 최대공약수와 최소공배수

class Solution {
    public int[] solution(int n, int m) {
        
        int gcd = getGCD(n, m); // 최대공약수
        int lcm = (n * m) / gcd; // 최소공배수
        int[] answer = {gcd, lcm};
        return answer;
    }
    
    public static int getGCD(int num1, int num2) {
        if (num1 % num2 == 0) {
            return num2;
        }
        return getGCD(num2, num1 % num2);

    }
}

https://programmer-chocho.tistory.com/9

 

[JAVA] 최대 공약수(GCD), 최소 공배수(LCM) 구하기

최대 공약수 구하는 방법 1. 숫자가 2개인 경우 1) 두 수를 공약수로 계속 나눈다. 2) 공약수로 나눈 몫이 서로소가 되면 stop 3) 왼쪽 공약수를 모두 곱한다. ∴ 60 과 48의 최대 공약수 : 2 ✕ 2 ✕ 3 = 1

programmer-chocho.tistory.com

 

 

40. 3진법 뒤집기

import java.util.ArrayList;

class Solution {
    public int solution(int n) {
        int answer = 0;
        ArrayList<Integer> arrayList = new ArrayList<>();

        // 3진법으로 변환
        while (n >= 3) {

            arrayList.add(n % 3);
            n /= 3;

        }
        arrayList.add(n);

        // 10진법으로 변환
        for (int i = 0; i < arrayList.size(); i++) {
            answer += (int) (arrayList.get(i) * Math.pow(3, arrayList.size() - (i + 1)));
        }
        
        return answer;
    }
}

'코딩테스트 > 알고리즘 코드카타' 카테고리의 다른 글

알고리즘 코드카타 41~50  (0) 2024.10.10
알고리즘 코드카타 21~30  (0) 2024.09.02
알고리즘 코드카타 11~20  (1) 2024.08.19
알고리즘 코드카타 1~10  (1) 2024.08.16