CODEKATA 31 ~ 35

Tak Jeon·2025년 1월 2일

알고리즘

목록 보기
54/101

보통 알고리즘 문제를 구현할 경우, for문을 사용할 경우, for문이 더 시간이 적게 걸려 for문을 사용하지만, Spring을 사용하는 프로젝트에서는 Stream을 사용하는 경우가 더 많기 때문에, 해당 방식도 같이 구현해 보았다.

31번 수박수박수박수박수박수?

import java.util.stream.*;

class Solution_for {
        public String solution(int n) {
            String answer = "";
            for(int i = 0 ; i < n ; i++){
                if(i % 2 == 0){
                    answer += "수";
                }else{
                    answer += "박";
                }
            }

            return answer;
        }
    }

class Solution_stream {
        public String solution(int n) {
            return IntStream.range(0,n)
                    .mapToObj(i -> i % 2 == 0 ? "수" : "박")
                    .collect(Collectors.joining());
        }
    }

32번 내적

import java.util.stream.*;

 class Solution_for {
        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;
        }
    }

class Solution_stream {
        public int solution(int[] a, int[] b) {
            return IntStream.range(0, a.length)
                    .map(i -> a[i] * b[i])
                    .sum();
        }
    }

33번 약수의 개수와 덧셈

 class Solution_for {
        public int solution(int left, int right) {
            int answer = 0;
            for(int i = left ; i <= right ; i++){
                int sum = 0;
                for(int j = 1 ; j <= i ; j++){
                    if(i % j == 0){
                        sum++;
                    }
                }
                answer += (sum % 2 == 0 ? i : -i);
            }

            return answer;
        }
    }

class Solution_stream {
        public int solution(int left, int right) {
            /*
            left ~ right까지
            i로 하나씩 꺼내서
                1 ~ i 까지
                j로 하나씩 꺼내서
                약수이면 count
            count 한 값이 짝수이면 i, 홀수이면 -i
            sum
             */
            return IntStream.range(left, right + 1)
                    .map(i -> {
                        long cnt = IntStream.range(1, i + 1)
                                .filter(j -> i % j == 0)
                                .count();
                        return cnt % 2 == 0 ? i : -i;
                    })
                    .sum();
        }
    }

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

 class Solution_for {
        public String solution(String s) {
            char[] arr = s.toCharArray();
            Arrays.sort(arr);
            String answer = "";
            for(int i = arr.length - 1 ; i >= 0 ; i--){
                answer += arr[i];
            }
            return answer;
        }
    }

class Solution_stream {
        public String solution(String s) {
            /*
            s -> char[]로 변환
            IntStream에서 -> (char) 통해 Character로 변환
            sorted 통해 내림차순으로 정렬
            map 통해 Character -> String으로 변환
            collect 통해 하나의 String으로 합침
             */
            return s.chars()
                    .mapToObj(c -> (char) c)
                    .sorted(Collections.reverseOrder())
                    .map(String::valueOf)
                    .collect(Collectors.joining());
        }
    }

35번 부족한 금액 계산하기

class Solution {
        public long solution(int price, int money, int count) {
            long answer = price * (count * (count + 1)) / 2;
            return (money - answer) >= 0 ? 0 : (answer - money);
        }
    }
profile
문제 해결을 좋아하는 개발자 입니다 :)

0개의 댓글