본문 바로가기
Algorithm/Baekjoon

Baekjoon 2153 소수 단어 JAVA

by Hunveloper 2022. 6. 21.
728x90

 

2153번: 소수 단어

소수란 1과 자기 자신으로만 나누어떨어지는 수를 말한다. 예를 들면 1, 2, 3, 5, 17, 101, 10007 등이 소수이다. 이 문제에서는 편의상 1도 소수로 하자. 알파벳 대소문자로 이루어진 영어 단어가 하나

www.acmicpc.net

문제

소수란 1과 자기 자신으로만 나누어떨어지는 수를 말한다. 예를 들면 1, 2, 3, 5, 17, 101, 10007 등이 소수이다. 이 문제에서는 편의상 1도 소수로 하자.

알파벳 대소문자로 이루어진 영어 단어가 하나 있을 때, a를 1로, b를 2로, …, z를 26으로, A를 27로, …, Z를 52로 하여 그 합을 구한다. 예를 들어 cyworld는 합을 구하면 100이 되고, abcd는 10이 된다.

이와 같이 구한 수가 소수인 경우, 그 단어를 소수 단어라고 한다. 단어가 주어졌을 때, 그 단어가 소수 단어인지 판별하는 프로그램을 작성하시오.

입력

첫째 줄에 단어가 주어진다. 단어의 길이는 20자 이하이다. 주어지는 단어는 알파벳 소문자와 대문자만으로 이루어져 있다.

출력

아래의 예제와 같은 형식으로 출력을 한다. 소수 단어인 경우에는 It is a prime word.를, 아닌 경우에는 It is not a prime word.를 출력한다.

풀이

영어 단어를 입력받고, character형태로 계산하면서 대문자일 경우 'A'를 27, 소문자일 경우 'a'를 1로 계산한다.

그 계산한 값을 sum에 더해놓고, sum에 대해서 소수인지 판단을 한다.

이때 소수임을 판별하려면 제곱근까지 돌면서 그 값에 대해 나눠지는 값이 없다면 소수이다.

소수판별이 끝난 후 조건에 맞춰서 "It is a prime word." 혹은 "It is not a prime word."을 출력한다.

코드
import java.io.*;

public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		int sum=0;
		boolean isPrime=true;
		for(int i=0;i<str.length();i++) {
			if(Character.isLowerCase(str.charAt(i)))
				sum+=str.charAt(i)-'a'+1;
			else
				sum+=str.charAt(i)-'A'+27;
		}
		for(int i=2;i<=Math.sqrt(sum);i++)
			if(sum%i==0)
				isPrime=false;
		if(isPrime)
			System.out.println("It is a prime word.");
		else
			System.out.println("It is not a prime word.");
	}
}

 

728x90
728x90

댓글