[알고리즘] 2. 약수 구하기

문정준's avatar
Feb 07, 2025
[알고리즘] 2. 약수 구하기

약수 구하기

  • 1 ~ 100까지의 수 중에 100의 약수면 “약수”, 아니면 “아님”이라고 출력하시오.
 

문제 분석

  • 약수는 특정한 수를 나눌 수 있는 수이므로, 나눈 나머지가 0
  • 1 ~ 100까지 찾아야 하므로 반복문 필요
 

1. Sampling & Hard Coding 1

  • 1 ~ 4까지의 경우만 분석
package algo; public class Divisor { public static void main(String[] args) { // 1 ~ 100의 수 중 100의 약수는 "약수", 아니면 "아님"이라고 출력하시오. // Sampling : 1 ~ 4까지 수 중 4의 약수는 "약수"라고, 아니면 "아님"이라고 출력하기 // 1. 1은 약수입니다. System.out.println("1은 약수입니다."); // 2. 2는 약수입니다. System.out.println("2는 약수입니다."); // 3. 3은 약수가 아닙니다. System.out.println("3은 약수가 아닙니다."); // 4. 4는 약수입니다. System.out.println("4는 약수입니다."); } }
코드 분석
  1. 1, 2, 3, 4를 변수 a로 치환 → a를 1씩 증가시키면서 비교
  1. “입니다” 또는 “가 아닙니다”가 반복 → 반복문 내에 문자열 삽입
 

2. Sampling & Hard Coding 2

package algo; public class Divisor { public static void main(String[] args) { // 1 ~ 100의 수 중 100의 약수는 "약수", 아니면 "아님"이라고 출력하시오. // Sampling : 1 ~ 4까지 수 중 4의 약수는 "약수"라고, 아니면 "아님"이라고 출력하기 int a = 0; // 1. 1은 약수입니다. a++; System.out.println(a+"은 약수입니다."); // 2. 2는 약수입니다. a++; System.out.println(a+"은 약수입니다."); // 3. 3은 약수가 아닙니다. a++; System.out.println(a+"은 약수가 아닙니다."); // 4. 4는 약수입니다. a++; System.out.println(a+"은 약수입니다."); } }
코드 분석 2
  1. a++; sout(~~~)의 형태가 반복 → 반복문에 삽입
  1. 약수일 경우는 “입니다.”, 아닐 경우는 “가 아닙니다.”의 조건 확인
    1. 삼항연산자 활용 가능
 

3. Moduling

package algo; public class Divisor { public static void main(String[] args) { // 1 ~ 100의 수 중 100의 약수는 "약수", 아니면 "아님"이라고 출력하시오. // Sampling : 1 ~ 4까지 수 중 4의 약수는 "약수"라고, 아니면 "아님"이라고 출력하기 int a = 0; String s = ""; for (int i = 0; i < 4; i++) { a++; s = 4 % a == 0 ? "입니다." : "가 아닙니다."; System.out.println(a + "은 약수" + s); } } }
코드 분석 3
  1. 반복문을 통해 공통된 부분 압축
  1. String s를 추가하여 약수일 때만 약수임을 출력하도록 삼항연산자를 이용한 조건 사용
  1. 최대 범위 4를 변수로 활용 가능 → 추가 변수 선언
    1. 범위는 선언 후 바뀌지 않아야 하므로 상수 (final int) 선언도 가능
 

4. Sampling 완성

package algo; public class Divisor { public static void main(String[] args) { // 1 ~ 100의 수 중 100의 약수는 "약수", 아니면 "아님"이라고 출력하시오. // Sampling : 1 ~ 4까지 수 중 4의 약수는 "약수"라고, 아니면 "아님"이라고 출력하기 int a = 0; final int N = 4; String s = ""; for (int i = 0; i < N; i++) { a++; s = N % a == 0 ? "입니다." : "가 아닙니다."; System.out.println(a + "은 약수" + s); } } }
 

결과

notion image
 

5. 문제 코드 작성

  • 범위를 100으로 확장
package algo; public class Divisor { public static void main(String[] args) { // 1 ~ 100의 수 중 100의 약수는 "약수", 아니면 "아님"이라고 출력하시오. int a = 0; final int N = 100; String s = ""; for (int i = 0; i < N; i++) { a++; s = N % a == 0 ? "입니다." : "가 아닙니다."; System.out.println(a + "은 약수" + s); } } }
 

결과

notion image
 
Share article

sxias