본문 바로가기
알고리즘/SWEA

[SWEA / 구구단 걷기 / JAVA]

by KDW999 2023. 5. 11.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AYaf9W8afyMDFAQ9 

 

SW Expert Academy

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

swexpertacademy.com

 

문제 접근

구하고자하는 수의 제곱근을 기준으로 약수는 대칭성을 가지고 있다 

16의 약수는 1, 2, 4, 8 ,16이며 제곱근은 4이다. 4를 기준으로 양 옆 한 칸씩 곱해보면 16이 되는 걸 알 수 있다.

→ 2 * 8, 1 * 16

그래서 배열을 제곱근까지 돌려서 약수를 찾고 N / 약수를 하면 대칭되는 약수도 같이 찾을 수 있다.

 

처음엔 약수를 구한 후 약수의 배열을 만들어서 제곱근 양 옆에 있는 인덱스들을 곱하는 방식으로 접근했으나 테스트 케이스 몇 개가 맞지 않았다.

양 옆 인덱스들이 최소 횟수가 아니었나보다.

그래서 Math.min()으로 약수들을 구한 뒤 어느쪽이 최소인지 매 번 검사 

 

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

public class Solution {
	static long N;
    
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int T = sc.nextInt(); // 테케
		
		for(int t=1; t<=T; t++) {
			 N = sc.nextLong();
			
			count(t);
		}
	}
    
	private static void count(int t) {
		long left = 0;
		long right = 0;
		long result = Long.MAX_VALUE;
		
		for(long i=1; i<=Math.sqrt(N); i++) {
			if(N % i == 0) {
				left = i-1;
				right = N / i-1;
				result = Math.min(result, left+right);
			}
		}
		System.out.println("#"+t+" " + result);
	}
}

'알고리즘 > SWEA' 카테고리의 다른 글

[SWEA / Flattern / JAVA]  (0) 2023.05.14
[SWEA / View / JAVA]  (0) 2023.05.11
[SWEA / 원 안의 점 / JAVA]  (0) 2023.05.09
[SWEA / 아름이의 돌 던지기 / JAVA → C++]  (0) 2023.05.08
[SWEA / 새로운 불면증 치료법 / JAVA]  (1) 2023.05.08

댓글