본문 바로가기

SWEA/D2

[SWEA 1945][D2][JAVA] 간단한 소인수분해

[문제]

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pl0Q6ANQDFAUq&categoryId=AV5Pl0Q6ANQDFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

 

[풀이방법]

 

소인수 분해를 할 숫자들 {2,3,5,7,11} 을 집합배열에 넣어두고 제시되는 숫자가 배열 안의 숫자에 나누어 떨어지면 해당 인덱스의 값을 증가시켜 줍니다. 

 

N == 25 라면 

2 3 5 7 11
0 0 2 0 0

이렇게 인덱스 값이 변하게 됩니다. 

 

for 반복문으로 배열의 인덱스를 돌면서 while 루프를 이용해서 해당 값으로 나누어 떨어지지 않을 때까지 반복해서 나누었습니다. 

 


        int[] mods = {2,3,5,7,11};

 

        StringBuffer sf = new StringBuffer();

 

        for (int tc = 1; tc <= T; tc++) {

            st = new StringTokenizer(br.readLine());

            int N = Integer.parseInt(st.nextToken());

 

            int[] temp = new int[mods.length];

 

            for (int i = 0; i < mods.length; i++) {

                while (N % mods[i] == 0) {

                    temp[i]++;

                    N = N/mods[i] + N%mods[i];

                }

            }

 

            sf.append("#" + tc + " ");

            for (int i = 0; i < temp.length; i++) {

                sf.append(temp[i] + " ");

            }

            sf.append("\n");

        }