전달된 값이 소수(prime number)인지 아닌지를 판단하여, 소수인 경우 true를, 소수가 아닌 경우 false를 반환하는 메서드를 정의하고, 이를 이용해서 1이상 100이하의 소수를 전부할 수 있도록 main 메서드를 정의하자. |
[1] main 메서드와 isPrime 메서드를 구분해서 생각할 필요가 있다.
이 문제의 포인트는 boolean (true, false)으로만 전달되는 값을 온전한 숫자로 출력할 수 어야 한다.
[2] isPrime의 반환값을 보면 boolean이다. (true 또는 false만 반환)
따라서 main 메서드에서는 소수에 해당하는 값(true)만 걸러내는 소쿠리라고 생각하자.
[3] 1이상 100이하의 소수만 찾으면 되니까 메인(main) 메서드에서는 1부터 100까지 돌리는 for문을 설정
[4] isPrime 메서드
(1) 1은 소수가 아니므로 if를 이용해 false라고 박아준다.
(2) 소수는 1과 자기자신으로만 나누어져야 한다 (즉, 그 외의 수로 나누면 나머지가 생긴다)
(3) for문에서는 2부터 시작해서 자기자신(a)까지 나눠준다.
(4) 만약 for문에 있는 i가 2에서부터 시작해서 1씩 증가하면서 반복문을 시작하는데
나머지가 0이 되는게 있다면 (즉, 나누어 떨어진다면) 이것은 소수가 될 수 없다.
여기서 i<a가 아니라 i<=a가 된다면 출력값이 어떻게 될까?
부등호를 바꿔주면 출력이 되지 않는다. a가 i로 나누어지면 for문에 있는 false값이 실행되기 때문에 아무것도 전달하지 않는다.
(5) isPrime에서 true값이 반환되면, main메서드는 i를 출력하게 된다.
'프로그래밍 > 코드분석' 카테고리의 다른 글
[파이썬] 다음 큰 숫자(next big number) (0) | 2017.06.10 |
---|---|
[파이썬] 팰린드롬(palindrome) 문제 (0) | 2017.02.16 |
continue와 break문의 활용 (0) | 2017.01.28 |
[KATA] Triangular Treasure(삼각수) (0) | 2017.01.26 |
자바의 정석 연습문제 7-22 (0) | 2016.08.21 |