https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AYaf9W8afyMDFAQ9
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제
당신은 무한히 많은 행과 열이 있는 곱셈표 위에 서 있다. (i, j)셀에는 정수 ixj 가 적혀 있다. (만약 행과 열이 9개라면 이는 구구단 표와 동일하다.) 현재 당신의 위치는 셀 (1, 1) 이다.
당신은 곱셈표의 오른쪽이나 아래쪽 방향으로 이동할 수 있다. 즉, 당신이 (i, j)에 서 있다면, (i+1, j)나 (i, j+1)로 이동할 수 있다.
정수 N이 주어질 때, N이 적혀 있는 어떤 셀에 도착하기 위해서 최소 몇 번 움직여야 하는가?
입력
첫 번째 줄에 테스트 케이스의 수 TC가 주어진다. 이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다. 각 테스트 케이스는 다음과 같이 구성되었다.
첫 번째 줄에 정수 N이 주어진다. (2 <= N <= 10^12)
출력
각 테스트 케이스 마다 한 줄씩 문제의 정답을 출력하라.
소스코드
import java.io.*;
class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
long n = Long.parseLong(br.readLine());
long min = Long.MAX_VALUE;
for (int j = 1; j < n; j++) {
if(n/j < j) break;
if (n % j == 0) {
if ((n / j + j) < min) min = (n / j + j);
}
}
sb.append("#" + (i + 1) + " " + (min - 2) + "\n");
}
System.out.println(sb);
}
}
해결 방법
- 약수쌍(나눈 수, 몫)의 합이 가장 작은 약수쌍을 찾아야 한다.
- 가능한 약수쌍을 모두 구해야 한다.
- 나눈 수와 몫은 모두 약수가 될 수 있으므로 나누는 수가 몫보다 커지기 전까지 약수쌍을 구하면 된다.
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 1949번 : 등산로 조성 (1) | 2023.11.06 |
---|---|
[SWEA] 5658번 : 보물상자 비밀번호 (0) | 2023.11.06 |
[SWEA] 4615번 : 재미있는 오셀로 게임 (0) | 2023.11.05 |
[SWEA] 8016번 : 홀수 피라미드 (0) | 2023.11.03 |
[SWEA] 11315번 : 오목 판정 (1) | 2023.11.03 |