CODEKATA 41 ~ 45

Tak Jeon·2025년 1월 6일

알고리즘

목록 보기
58/101

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

41번 이상한 문자 만들기

class Solution {
    public String solution(String s) {
        String answer = "";
        s = s.toLowerCase();
        String[] split = s.split("");
        int idx = 0;
        for(int i = 0 ; i < split.length ; i++){
            if(split[i].equals(" ")){
                idx = 0;
                answer += split[i];
            }else{
                if(idx % 2 == 0){
                    answer += split[i].toUpperCase();
                    idx++;
                }else{
                    answer += split[i];
                    idx++;
                }
            }
        }
        System.out.println(answer);
        return answer;
    }
}

42번 삼총사

import java.util.*;
import java.util.stream.*;

class Solution_for {
        public int solution(int[] number) {
            int answer = 0;
            for(int i = 0 ; i < number.length - 2 ; i++){
                for(int j = i + 1 ; j < number.length - 1 ; j++){
                    for(int k = j + 1 ; k < number.length ; k++){
                        int sum = number[i] + number[j] + number[k];
                        if(sum == 0){
                            answer++;
                        }
                    }
                }
            }
            return answer;
        }
    }

class Solution_stream {
        public int solution(int[] number) {
            return (int)IntStream.range(0, number.length - 2)
                    .flatMap(i -> IntStream.range(i + 1, number.length - 1)
                            .flatMap(j -> IntStream.range(j + 1, number.length)
                                    .filter(k -> number[i] + number[j] + number[k] == 0)
                            )
                    )
                    .count();
        }
    }

43번 크기가 작은 부분 문자열

class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        for(int i = 0 ; i <= t.length() - p.length() ; i++){
            long cur = Long.parseLong(t.substring(i,i + p.length()));
            if(cur <= Long.parseLong(p)){
                answer++;
            }
        }
        return answer;
    }
}

44번 최소직사각형

class Solution {
    
    public int solution(int[][] sizes) {
        
        for(int i = 0 ; i < sizes.length ; i++){
            if(sizes[i][0] < sizes[i][1]){
                int temp = sizes[i][0];
                sizes[i][0] = sizes[i][1];
                sizes[i][1] = temp;
            }
        }
        
        int width = 0;
        int height = 0;
        for(int i = 0 ; i < sizes.length ; i++){
            width = Math.max(width, sizes[i][0]);
            height = Math.max(height, sizes[i][1]);
        }
        
        return width * height;
    }
}

45번 시저 암호

class Solution {
    public String solution(String s, int n) {
        String answer = "";
        for(int i = 0 ; i < s.length() ; i++){
            if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'){
                answer += (char)(((s.charAt(i) - 'A') + n) % 26 + 'A');
            }else if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z'){
                answer += (char)(((s.charAt(i) - 'a') + n) % 26 + 'a');
            }else{
                answer += s.charAt(i);
            }
        }
        return answer;
    }
}
profile
문제 해결을 좋아하는 개발자 입니다 :)

0개의 댓글