기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

[SW expert Academy] SWEA 16800번 구구단 걷기 자바(Java)
알고리즘 - SWEA/D3

[SW expert Academy] SWEA 16800번 구구단 걷기 자바(Java)

2023. 10. 20. 23:48

[D3] 구구단 걷기 - 16800

문제 링크

성능 요약

메모리: 24,292 KB, 시간: 497 ms, 코드길이: 931 Bytes

제출 일자

2023-10-20 23:39

출처: SW Expert Academy, https://swexpertacademy.com/main/code/problem/problemList.do

 

SW Expert Academy

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

swexpertacademy.com

 

해결 방법

1. 만약 입력한 N 값이 소수라면 무조건 1 x N이다. 

2. N : i * j 일 때 i와 j의 차이가 최소일 때 (1,1)에서 가깝기 때문에 Math.sqrt(N) 값까지 확인해준다.

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

class Solution
{
	public static void main(String args[]) throws Exception
	{
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();

		for(int tc = 1; tc <= T; tc++)
		{
            long N = sc.nextLong();
            long a = 0;
            long b = 0;
            
            if(isPrime(N)){
                a = 1;
                b = N;
            }else{
                    for(int i = 1; i <= Math.sqrt(N); i++){
                        if(N % i == 0){
                            a = i;
                            b = N / i;
                        }
                    }
            }        
            System.out.println("#" + tc +" " + (a+b-2));
        }
    }
    
    private static boolean isPrime(long N){
        for(int i = 2; i <= Math.sqrt(N); i++){
            if(N % i == 0){
                return false;
            }
        }
        return true;
    }
}

1. for문을 1부터가 아닌 sqrt(N)부터 시작해줌으로 속도를 단축 시킴

2. 변수에 값을 넣는게 아닌 바로 계산을 해줘서 가독성을 향상

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

class Solution
{
	public static void main(String args[]) throws Exception
	{
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();

		for(int tc = 1; tc <= T; tc++)
		{
            long N = sc.nextLong();
            long result = 0;
            
            if(isPrime(N)){
                result = N - 1;
            }else{
                    for(int i = (int)Math.sqrt(N); i >= 1; i--){
                        if(N % i == 0){
                            result = (i + N / i) -2;
                            break;
                        }
                    }
            }        
            System.out.println("#" + tc + " " + result);
        }
    }
    
    private static boolean isPrime(long N){
        for(int i = 2; i <= Math.sqrt(N); i++){
            if(N % i == 0){
                return false;
            }
        }
        return true;
    }
}

 

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

[SW expert Academy] SWEA 15941번 평행사변형 자바(Java)  (0) 2023.10.21
[SW expert Academy] SWEA 16002번 합성수 방정식 자바(Java)  (0) 2023.10.21
[SW expert Academy] SWEA 16910번 원 안의 점 자바(Java)  (0) 2023.10.20
[SW expert Academy] SWEA 17319번 문자열문자열 자바(Java)  (0) 2023.10.20
[SW expert Academy] SWEA 17642번 최대 조작 횟수 자바(Java)  (0) 2023.10.20
    '알고리즘 - SWEA/D3' 카테고리의 다른 글
    • [SW expert Academy] SWEA 15941번 평행사변형 자바(Java)
    • [SW expert Academy] SWEA 16002번 합성수 방정식 자바(Java)
    • [SW expert Academy] SWEA 16910번 원 안의 점 자바(Java)
    • [SW expert Academy] SWEA 17319번 문자열문자열 자바(Java)
    기몽수
    기몽수

    티스토리툴바