본문 바로가기
코드문제풀이/JAVA

[자바] 1037번 약수

by 똥쟁이핑크 2023. 7. 29.

https://www.acmicpc.net/problem/1037

 

1037번: 약수

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되

www.acmicpc.net

 

문제

양수 A가 N의 진짜 약수가 되려면, N이 A의 배수이고, A가 1과 N이 아니어야 한다. 어떤 수 N의 진짜 약수가 모두 주어질 때, N을 구하는 프로그램을 작성하시오.

 

입력

첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되지 않는다.

 

출력

첫째 줄에 N을 출력한다. N은 항상 32비트 부호있는 정수로 표현할 수 있다.

 

나의 문제 풀이

1) 약수를 구하기 위해 약수의 개수가 주어진다.

2) 예를 들어 16의 약수의 개수는 1, 2, 4, 8, 16이다. 여기서 1과 자기자신을 제외 하면 2, 4, 8이다.

3) 2)에서 제일 처음 값 2(제일 작은 수)와 제일 마지막 값 8(제일 큰 수)을 곱하면 16을 구할 수 있다.

4) 위의 과정을 코드로 구현했다.

// 첫 번째 통과 코드 -> min, max 활용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());

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

        int max = -1; // max 값을 찾기 위해 작은 값으로 설정
        int min = 100001; // min 값을 찾기 위해 큰 값으로 설정

        st = new StringTokenizer(br.readLine());
        
        for(int i = 0; i< n; i++){
            int x = Integer.parseInt(st.nextToken());
            if(x>max) max = x; // max 값을 찾아나간다.
            if(x<min) min = x; // min 값을 찾아나간다.
        }
        System.out.println(min*max);
    }
}



// 두 번째 통과 코드 -> Array 사용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int[] answer = new int[n]; // 약수의 개수를 넣기 위한 배열 값을 설정

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

        for(int i = 0; i < n; i++){
            answer[i] = Integer.parseInt(st.nextToken()); // 토큰화한 값을 배열에 넣어준다.
        }
        Arrays.sort(answer); // 배열을 정렬한다.
        System.out.println(answer[0] * answer[n-1]); // 정렬한 배열에서 제일 처음 값과 마지막 값을 곱해준다.
    }
}

'코드문제풀이 > JAVA' 카테고리의 다른 글

[자바] 1541번 잃어버린 괄호  (0) 2023.07.29
[자바] 1927번 최소 힙  (0) 2023.07.29
[자바] 11047번 동전 0  (0) 2023.07.29
[자바] 11866번 요세푸스 문제 0  (0) 2023.07.28
[자바] 11279번 최대 힙  (0) 2023.07.28