[C#] 소수인지 아닌지 판별하기
📕 소수인지 아닌지 판별하기
학교 강의에서 C, Java, C# 등을 배우면 한 번씩은 마주치는 문제다.
사실 며칠 전에 같은 과 동기한테 C#을 가르쳐주다가 어려워하길래 어떻게 쉽게 설명하지.. 하다가 그냥 글로 써버리기로 했다. 내가하는거 말고 방식은 많으니 다른 것도 참고해보시길...
💡 소수란?
1과 자기 자신으로만 나눠 떨어지는 수, 즉 약수가 1과 해당 숫자 뿐이다.
예를들어 7은 약수가 1, 7이기 때문에 소수, 6은 약수가 1, 2, 3, 6이기 때문에 소수가 아니다.
🔥 문제
숫자를 입력받으면 그 숫자가 소수인지 아닌지 출력하시오.
✏️ 입력
7
혹은
6
🖨️ 출력
소수입니다.
혹은
소수가 아닙니다.
💡 해결해 봅시다.
코딩 전 해결순서 나열
1. 숫자를 입력받는다. (변수명을 num으로 지정하겠다.)
2. 소수인지 판별한다.
2-1. num == 2 일경우 true를 return 한다. (2는 유일한 짝수형 소수)
2-2. num % 2 == 0 일경우 false를 return 한다. (2를 제외한 짝수는 모두 소수가 아님)
2-3. 여기서부터 중요!!!
num % 2부터 num-1 까지의 숫자들 == 0 일 경우 false를 return 한다.
이게 무슨 말이냐.
예를들어 15가 입력되었다고 하자.
만일 2~14까지 숫자 (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) 중에서 한 개라도 15랑 나누어 떨어진다면 소수가 아니므로 false를 return 한다.
순차적으로 생각해보자면
15 % 2 == 7.5; 나누어 떨어지지 않으니까 true
15 % 3 == 5; 나누어 떨어지니까 false -> 이 시점에서 이미 15는 소수가 아님. 고로 false를 return 한다.
반대로 생각해서 7이 입력되었다고 하자.
만일 2~6까지 숫자 (2, 3, 4, 5, 6) 중에서 한 개라도 6이랑 나누어 떨어진다면 false를 return 한다.
순차적으로 생각해보면
7 % 2 == 3.5; 나누어 떨어지지 않으니까 true
7 % 3 == 2.333; 나누어 떨어지지 않으니까 true
7 % 4 == 1.75; 나누어 떨어지지 않으니까 true
7 % 5 == 1.4; 나누어 떨어지지 않으니까 true
7 % 6 == 1.166; 나누어 떨어지지 않으니까 true
-> 2부터 6까지 전부 나눴음에도 전부 true이므로 고로 7은 소수이다.
3. 마지막으로 결과 값을 출력한다.소수입니다.
소수가 아닙니다. 등등...
⌨️ 코딩해봅시다.
0. 먼저 변수 초기화
int num = 0;
bool isitsosu = true; //아무걸로나 초기화해줘도 됨.
1. 숫자를 입력받는다.
num = int.Parse(Console.ReadLine()); //ReadLine은 String만 받기 때문에 Parse 필수
2. 소수인지 판별한다.
//2-1. num이 2이면 true
if(num == 2){
isitsosu = true;
//2-2. num이 짝수이면 false
} else if (num % 2 == 0){
isitsosu = false;
//2-3. num % 숫자들 == 0이 한번이라도 나올 시 false하고 break;
} else {
//어짜피 2는 위에서 판별했으니 3부터 시작
for(int i=3; i<num; i=i++){
if(num % i == 0){ //num이 i로 나누어 떨어질경우
isitsosu = false; //나누어 떨어지는게 있으니 false
break; //어짜피 소수가 아니니까 반복 중지
} else {
isitsosu = true; //나누어 떨어지지 않으면 true
}
}
}
3. 마지막으로 결과 값을 출력한다.
if(isitsosu){
Console.WriteLine("소수입니다.");
} else {
Console.WriteLine("소수가 아닙니다.");
}
🖨️ 결과 값
15
소수가 아닙니다.
7
소수입니다.
마치며
처음으로 알고리즘 관련해서 글을 써보는거라
조금 부족한 설명이 있을 수도 있지만..
이외의 궁금한 점은 댓글로 남겨주시길.. 😆
'Code > Algorithm' 카테고리의 다른 글
[Python] [프로그래머스 한 줄 풀기] Lv.1 핸드폰 번호 가리기 (0) | 2022.05.04 |
---|