본문 바로가기
PS/BOJ

[자바] 백준 2153 - 소수 단어 (boj 2153)

by Nahwasa 2022. 7. 5.

문제 : boj2153

 

1. 문자를 문제에서 제시된 방법대로 합계를 구할 수 있어야 한다.

-> 문자의 각 character인 c를 확인하면서 아래처럼 구하자.

- 'a'~'z'인 경우 : sum += 1+c-'a';

- 'A'~'Z'인 경우 : sum += 27+c-'A'; 

 

2. '1'에서 구한 sum이 소수인지 소수판정을 해야 한다.

-> 이 경우 2부터 sqrt(sum) 까지의 정수로 직접 나눠보고, 이 중 하나라도 sum을 나누어떨어지게(나머지가 0) 하는 값이 있다면 소수가 아니다. sqrt(sum) 까지 확인하는 이유는 '에라토스테네스의 체 혹은 소수판정 시 제곱근 까지만 확인하면 되는 이유' 글에 적어두었다(링크).

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    private boolean isPrime(int n) {
        for (int i = 2; i <= Math.sqrt(n); i++) {
            if (n % i == 0) return false;
        }
        return true;
    }

    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        int sum = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c >= 'a') sum += 1+c-'a';
            else sum += 27+c-'A';
        }
        System.out.println(isPrime(sum)?"It is a prime word.":"It is not a prime word.");
    }


    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글