기억보다 기록을

[JAVA] n개의 연속된 숫자 나열을 정수로 환산하여 소수인지 판별 후 최대값 구하는 프로그램 본문

Language/JAVA

[JAVA] n개의 연속된 숫자 나열을 정수로 환산하여 소수인지 판별 후 최대값 구하는 프로그램

juyeong 2022. 3. 5. 12:33
반응형

Q/

n개의 음이 아닌 한자리 정수를 입력받아 배열에 저장한다. 이들 중에서 1개 이상의 연속된 정수들을 합하여 얻을 수 있는 소수들 중에서 최대값을 구하여 출력하는 프로그램을 작성하라. 

 

A/

package chapter1;

import java.util.Scanner;

public class code13 {
	public static void main(String args) {

		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] data = new int[n];

		for (int i = 0; i < n; i++)
			data[i] = sc.nextInt();
		sc.close();

		int max = 0;

		for (int i = 0; i < n; i++) {
			for (int j = i; j < n; j++) {

				// 정수로 환산
				int val = 0;
				for (int k = i; k <= j; k++)
					val = val * 10 + data[k];

				// 소수인지 판별
				boolean isPrime = true;
				for (int k = 2; k * k <= val && isPrime; k++)
					if (val % k == 0)
						isPrime = false;

				// 최대값과 비교
				if (isPrime && val > max)
					max = val;

			}
		}

		if (max > 0)
			System.out.println(max);

		else
			System.out.println("No prime number");

	}
}

이 때 1을 입력받은 경우 1은 소수가 아님에도 isPrime = true; 로 되어있기에 문제가 된다. 따라서 최대값과 비교할 때 조건을 추가해준다.

package chapter1;

import java.util.Scanner;

public class code13 {
	public static void main(String args) {

		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] data = new int[n];

		for (int i = 0; i < n; i++)
			data[i] = sc.nextInt();
		sc.close();

		int max = 0;

		for (int i = 0; i < n; i++) {
			for (int j = i; j < n; j++) {

				// 정수로 환산
				int val = 0;
				for (int k = i; k <= j; k++)
					val = val * 10 + data[k];

				// 소수인지 판별
				boolean isPrime = true;
				for (int k = 2; k * k <= val && isPrime; k++)
					if (val % k == 0)
						isPrime = false;

				// 최대값과 비교
				if (isPrime && val>1 && val > max)
					max = val;

			}
		}
		
		if  (max > 0)
			System.out.println(max);

		else
			System.out.println("No prime number");
		
	}
}
반응형