CODEKATA 36 ~ 40

Tak Jeon·2025년 1월 3일

알고리즘

목록 보기
55/101

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

36번 문자열 다루기 기본

import java.util.stream.*;

 class Solution_for {
        public boolean solution(String s) {
            for(int i = 0 ; i < s.length() ; i++){
                if(s.charAt(i) < 48 || s.charAt(i) > 57){
                    return false;
                }
            }

            return s.length() == 4 || s.length() == 6;
        }
    }

class Solution_stream {
        public boolean solution(String s) {

            if(IntStream.range(0, s.length())
                    .allMatch(i -> s.charAt(i) >= '0' && s.charAt(i) <= '9')){
                return s.length() == 4 || s.length() == 6;
            }
            return false;
        }
    }

37번 행렬의 덧셈

import java.util.stream.*;

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

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

            return answer;
        }
    }

class Solution_stream {
        public int[][] solution(int[][] arr1, int[][] arr2) {
            return IntStream.range(0, arr1.length)
                    .mapToObj(i -> IntStream.range(0, arr1[i].length)
                            .map(j -> arr1[i][j] + arr2[i][j])
                            .toArray())
                    .toArray(int[][]::new);
        }
    }

38번 직사각형 별찍기

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

class Solution_for {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            StringBuilder sb = new StringBuilder();
            int n = Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());


            for(int i = 0 ; i < m ; i++){
                for(int j = 0 ; j < n ; j++){
                    sb.append('*');
                }
                sb.append("\n");
            }

            System.out.println(sb.toString());
        }
    }

class Solution_stream {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            StringBuilder sb = new StringBuilder();
            int n = Integer.parseInt(st.nextToken());
            int m = Integer.parseInt(st.nextToken());

            IntStream.range(0, m)
                    .forEach(i -> {
                        sb.append("*".repeat(n)).append("\n");
                    });

            System.out.println(sb.toString());
        }
    }

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

class Solution {
        public int[] solution(int n, int m) {
            int[] answer = new int[2];

            answer[0] = GCD(m,n);
            answer[1] = n * m / answer[0];
            return answer;
        }

        public int GCD(int a, int b){
            if(b == 0) return a;
            else return GCD(b, a % b);
        }
    }

40번 3진법 뒤집기

import java.util.*;

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

            while(n > 0){
                list.add(n % 3);
                n /= 3;
            }
            int idx = 0;

            for(int i = list.size() - 1 ; i >= 0 ; i--){
                answer += list.get(i) * Math.pow(3,idx++);
            }
            return answer;
        }
    }

    class Solution_opt {
        public int solution(int n) {
            int answer = 0;
            while(n > 0){
                answer = answer * 3 + n % 3;
                n /= 3;
            }
            return answer;
        }
    }
profile
문제 해결을 좋아하는 개발자 입니다 :)

0개의 댓글