[백준/JAVA] 13241번 최소공배수

정은아·2024년 2월 2일

[알고리즘] 수학 모음

목록 보기
21/152
post-thumbnail

내 풀이 1 : ???? ???? ???????

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

        // A,B의 최소공배수를 구하는 문제

        // A와 B를 받아온다.
        // List를 두 개 받아와서 A, B의 약수를 추가한다.
        // 공통된 약수를 모두 빼준다. 그 후 남은 수와 공통으로 뺀 약수를 곱해준다.

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        long A = sc.nextLong();
        long B = sc.nextLong();

        List<Long> Alist = new ArrayList<>();
        List<Long> Blist = new ArrayList<>();
        long answer = 1;

        for (long i = 1; i <= Math.max(A, B); i++) {
            if (A % i == 0 && B % i == 0){
                answer *= i;
            }else if(A % i == 0){
                Alist.add(i);
                answer *= i;
            }else if(B % i == 0){
                Blist.add(i);
                answer *= i;
            }
        }

        sb.append(answer);
        System.out.println(sb.toString());

    }
}

내 풀이 : 28%에서 틀렸습니다.

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

        // A,B의 최소공배수를 구하는 문제

        // A와 B를 받아온다.
        // A,B 중 더 큰 수로 for문을 돌린다.
        // 공통으로 나뉘어지면 answer에 곱해서 중첩해주고 A,B를 각각 나눠준다.
        // 마지막에 다 곱해준다.

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        long A = sc.nextLong();
        long B = sc.nextLong();

        long answer = 1;
        long MathMaxAB = Math.max(A,B);

        for (long i = 1; i <= MathMaxAB; i++) {
            if (A % i == 0 && B % i == 0){
                answer *= i;
                A /= i;
                B /= i;
            }
        }

        answer *= A * B;

        sb.append(answer);
        System.out.println(sb.toString());

    }
}

내 풀이 : 범위 똑바로 잡음 - 정답

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

        // A,B의 최소공배수를 구하는 문제

        // A와 B를 받아온다.
        // A,B 중 더 큰 수로 for문을 돌린다.
        // 공통으로 나뉘어지면 answer에 곱해서 중첩해주고 A,B를 각각 나눠준다.
        // 마지막에 다 곱해준다.

        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();

        long A = sc.nextLong();
        long B = sc.nextLong();

        long answer = 1;
        long MathMaxAB = Math.max(A,B);

        for (long i = MathMaxAB; i >= 1; i--) {
            if (A % i == 0 && B % i == 0){
                answer *= i;
                A /= i;
                B /= i;
            }
        }

        answer *= A * B;

        sb.append(answer);
        System.out.println(sb.toString());

    }
}

느낀점

하 진짜.. 개힘들다..
유클리제호제법이 뭔데...

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글