[백준] 2153번: 소수 단어 (JAVA)

2022. 3. 3. 13:09알고리즘

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

 

2153번: 소수 단어

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

www.acmicpc.net

 


 

문제 설명

기본적으로 a는 1, z는 26, A는 27, Z는 52라는 숫자로 표현한다. 그리고 입력받은 문자들의 숫자값의 합이 소수인지 아닌지를 판별하는 문제이다.

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		String str = br.readLine();
		int sum = 0;
		boolean isPrime = false;

		for (int i = 0; i < str.length(); i++) {
			char c = str.charAt(i);
			if (c >= 'a' && c <= 'z') {
				sum += (int) c - 96;
			} else if (c >= 'A' && c <= 'Z') {
				sum += (int) c - 38;
			}
		}

		for (int i = 2; i < sum; i++) {
			if (sum % i == 0) {
				isPrime = true;
				break;
			}
		}

		if (isPrime) {
			bw.write("It is not a prime word.");
		} else {
			bw.write("It is a prime word.");
		}

		bw.flush();
	}
}

코드 설명

합을 구할 변수 sum, 소수인지 아닌지 판별하는 변수 isPrime을 선언한다.

그리고 입력받은 문자만큼 for문을 돌려 charAt 메소드를 이용하여 char 변수에 하나씩 저장한다.

만약 문자가 a와 z사이면 int로 강제변환을 한 문자에 96을 뺀다. 그러면 만약 입력으로 'a'가 들어오면 1이 출력된다.

그리고 A와 Z사이면 38을 빼준다.

마지막으로는 소수 판별을 하고 소수면 'It is a prime word.', 소수가 아니면 'It is not a prime word.'를 출력한다.