학원에서 자바 for문을 배우는데, 예전에 대학교 교양필수로 C언어를 배울때 2부터 100까지의 수 중 소수를 찾는 문제가 있었던 게 문득 기억이 났다.
수업이 끝나고 집에 가는 길에 어떻게 알고리즘을 짜면 될 지 고민하는 과정이 뜻 깊은 과정인 거 같아 그 과정을 기록하자는 취지로 올려본다.
처음에 무작정 코드를 치면서 풀 때는 계속 헤매다가, 문제 자체를 어떻게 풀어나가야 할 지 생각하고 나니 로직을 떠올리는건 크게 오래 걸리지 않았는다. 그런데 아직 기본적인 문법조차 익숙하지 않아 생각했던 걸 막상 구현하는데에는 예상했던 시간보다 오래걸렸다.
기본적인 문제라도 혼자서 고민하면서 이래저래 해보다보면 수동적으로 코드를 따라치는 것 보다는 효과적으로 학습할 수 있는 것 같다. 일반인과 다르다고 불리우는 개발자의 사고방식을 기르는데에도 도움이 되는건 덤인듯 하다. 앞으로 어려운 프로젝트나 코테 문제에 부딪혔을 때 혼자 고민하는 시간에 아끼지 않아야겠다고 다짐해본다.
======================== 풀이
일단 소수의 정의,
1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수.
여기서, 약수로 가진다 => 나머지 = 0인 수.
따라서, 1과 자기자신만을 약수로 가진다 -> n을 1부터 n까지의 수로 나누었을 때 나머지 = 0인 수가 총 2개.
그래서 나머지가 0인 수가 2개일때 n을 출력.
그래서 로직은,
(1) 100까지의 수를 찾는다고 하면, n은 2부터 100까지 -> 반복문
(2) 그리고 n을 나누어 보는 수는 1부터 n까지 반복 -> 반복문
(3) 만약 나머지가 0인 수가 나오면 count 값을 +1 ->if문, ++문
(4) n을 1부터 n까지 나누어 보는 과정(2)이 끝나면, count가 2인 n값을 출력
(5) count를 0으로 초기화
이렇게 접근하기로 했다.
그래서 코드는
public class FindPrimeNumber {
public static void main(String[] args) {
int count = 0;
for(int n = 2; n <= 100; n++) { //(1)
for(int i = 1; i <= n; i++) { //(2)
if(( n % i ) == 0) {
count++; //(3)
} else {
}
} //두번째 for문 끝
if(count == 2) {
System.out.println( n ); //(4)
} else {
}
count = 0 ; //(5)
} //첫번째 for문 끝
}
}
====================
처음에는 그냥 count를 ++하면 되겠지라고만 생각했는데, 계속 안되길래 머릿속으로 debug를 해보니 count 값을 초기화를 안해줬다.
'Back-End > Java' 카테고리의 다른 글
자바 Servlet 기초 예제(doGet : 데이터 조회) (0) | 2023.08.31 |
---|---|
JDBC 사용하기(Java + MySQL) 쿼리날려보자! (0) | 2023.07.27 |
mySQL과 Java 연결하기(JDBC 라이브러리) (0) | 2023.07.26 |
Scanner(데이터 입력), 연산자 (0) | 2023.05.25 |
변수 초기화, 자료형, 형변환 (0) | 2023.05.23 |
실행문, 출력문, 변수 (0) | 2023.05.14 |