[백준 BOJ] 2153번 소수 단어 (C++/cpp)

2022. 6. 15. 03:18PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2153번: 소수 단어

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

www.acmicpc.net

백준 BOJ 2153번 소수 단어 문제 사진

 

접근 방법 - 아스키코드에 관한 소수 판별 문제

백준의 2153번 문제는 아스키코드와 연관 지어진 소수 판별 문제이다.

해당 문제는, 입력받은 문자열에 대하여 특정 규칙에 따라 지정된 값이 소수인지를 판별해야 하는 문제이다.

여기서 규칙은, a~z에는 1부터 26의 값을 지정하며 A~Z에는 27부터 52의 값을 지정하고 이들의 값을 모두 합하여 문자열에 특정 값을 부여한다.

해당 문제는 소수의 기본적인 개념을 파악하고 있으며 아스키코드를 응용하는 데에 익숙하다면 쉽게 풀 수 있는 문제로 예상된다.

만일 이들을 적절하게 사용하는 방법에 대해 어색하다면, 아래 필자가 작성한 설명을 참고해보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 문자열(st)을 입력받는다.

 

2) st의 값을 연산하여 저장할 공간인 변수 sum을 0으로 초기화하여 선언한다.

 

3) st의 문자들을 탐색하며 아래의 연산을 취한다.

- 현재 탐색값이 소문자일 경우, 해당 문자에 'a'를 뺀 뒤 1을 더한 값을 sum에 더하도록 한다.

- 현재 탐색값이 대문자일 경우, 해당 문자에 'A'를 뺀 뒤 27을 더한 값을 sum에 더하도록 한다.

 

4) sum의 연산이 끝났다면, 해당 값이 소수인지를 판별하도록 한다.

반복문과 나머지 연산자를 이용해, sum에 대하여 1과 자기 자신을 제외한 값들 중에 약수가 있는지를 파악한다.

만일 나누어 떨어지는 숫자가 있다면, 이는 소수가 아니다. 따라서 이 경우엔, 소수 단어가 아닌 경우의 출력문을 출력한 뒤 실행 종료한다.

 

5) 4)에서 실행 종료되지 않았다면, 이는 소수로 판별된다. 따라서 이 경우엔, 소수 단어일 경우의 출력문을 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <string>
#define endl '\n'
using namespace std;

//백준 2153번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	string st;
	cin >> st;

	int sum = 0;
	for (int i = 0; i < st.length(); i++) {
		if (st[i] >= 'a' && st[i] <= 'z') {
			sum += st[i] - 'a' + 1;
		}
		else {
			sum += st[i] - 'A' + 27;
		}
	}
	for (int i = 2; i < sum; i++) {
		if (sum % i == 0) { 
			cout << "It is not a prime word." << endl;
			return 0;
		}
	}
	cout << "It is a prime word." << endl;
}

 

제출 결과

백준 BOJ 2153번 소수 단어 문제 C++ 제출 결과

(2022.05.28 백준 2153번 문제 제출 결과)

반응형