1. 6의 약수 구하기
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd01 {
public static void main(String[] args) {
int a = 6;
int b = 8;
int[] arr1 = new int[6]; // [1][2][3][0][0][6]
int[] arr2 = new int[8];
if(a%1==0) arr1[0] = 1;
if(a%2==0) arr1[1] = 2;
if(a%3==0) arr1[2] = 3;
if(a%4==0) arr1[3] = 4;
if(a%5==0) arr1[4] = 5;
if(a%6==0) arr1[5] = 6;
}
}약수의 개수가 얼마인지 모르기 때문에 배열 크기를 6, 8로 임의 지정
3, 4번지에 0이 존재. 0을 없애려면 조건이 맞을 때만 arr1[]번지를 ++하도록 조건 추가하기
※ if 사용할 때 중괄호 안 내용이 한 줄이면 중괄호 입력하지 않고 한 줄로 적어도 됨
2. 배열 정리되게 if 수정
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd01 {
public static void main(String[] args) {
int a = 6;
int b = 8;
int[] arr1 = new int[6]; // [1][2][3][6][0][0]
int[] arr2 = new int[8];
int n1 = 0; // 배열의 위치를 나타내는 번호값 = 인덱스
if(a%1==0) {
arr1[n1] = 1;
n1++;
}
if(a%2==0) {
arr1[n1] = 2;
n1++;
}
if(a%3==0) {
arr1[n1] = 3;
n1++;
}
if(a%4==0) {
arr1[n1] = 4;
n1++;
}
if(a%5==0) {
arr1[n1] = 5;
n1++;
}
if(a%6==0) {
arr1[n1] = 6;
n1++;
}
}
}n1++이 없으면 [1][2][3][0][0][6] 이런 식으로 배열 중간에 0이 들어감 → 그럼 불필요한 비교 횟수 늘어남
3. 8의 약수 구하기
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd01 {
public static void main(String[] args) {
int a = 6;
int b = 8;
int[] arr1 = new int[6]; // [1][2][3][6][0][0]
int[] arr2 = new int[8]; // [1][2][4][8][0][0][0][0]
// 1. 6의 약수 채우기 ================================================================
int n1 = 0; // 배열의 위치를 나타내는 번호값 = 인덱스
if (a % 1 == 0) {
arr1[n1] = 1;
n1++;
}
if (a % 2 == 0) {
arr1[n1] = 2;
n1++;
}
if (a % 3 == 0) {
arr1[n1] = 3;
n1++;
}
if (a % 4 == 0) {
arr1[n1] = 4;
n1++;
}
if (a % 5 == 0) {
arr1[n1] = 5;
n1++;
}
if (a % 6 == 0) {
arr1[n1] = 6;
n1++;
}
// 2. 8의 약수 채우기 ================================================================
int n2 = 0;
if (b % 1 == 0) {
arr2[n2] = 1;
n2++;
}
if (b % 2 == 0) {
arr2[n2] = 2;
n2++;
}
if (b % 3 == 0) {
arr2[n2] = 3;
n2++;
}
if (b % 4 == 0) {
arr2[n2] = 4;
n2++;
}
if (b % 5 == 0) {
arr2[n2] = 5;
n2++;
}
if (b % 6 == 0) {
arr2[n2] = 6;
n2++;
}
if (b % 7 == 0) {
arr2[n2] = 7;
n2++;
}
if (b % 8 == 0) {
arr2[n2] = 8;
n2++;
}
} // end of main
}4. 6의 약수, 8의 약수 비교하기
1) 배열 비교 - 노가다 & 변수 정리
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd02 {
public static void main(String[] args) {
int a = 6;
int b = 8;
int[] arr1 = new int[6]; // [1][2][3][6][0][0]
int[] arr2 = new int[8]; // [1][2][4][8][0][0][0][0]
// 1. 6의 약수 채우기 ================================================================
int n1 = 0; // 배열의 위치를 나타내는 번호값 = 인덱스
if (a % 1 == 0) {
arr1[n1] = 1;
n1++;
}
if (a % 2 == 0) {
arr1[n1] = 2;
n1++;
}
if (a % 3 == 0) {
arr1[n1] = 3;
n1++;
}
if (a % 4 == 0) {
arr1[n1] = 4;
n1++;
}
if (a % 5 == 0) {
arr1[n1] = 5;
n1++;
}
if (a % 6 == 0) {
arr1[n1] = 6;
n1++;
}
// 2. 8의 약수 채우기 ================================================================
int n2 = 0;
if (b % 1 == 0) {
arr2[n2] = 1;
n2++;
}
if (b % 2 == 0) {
arr2[n2] = 2;
n2++;
}
if (b % 3 == 0) {
arr2[n2] = 3;
n2++;
}
if (b % 4 == 0) {
arr2[n2] = 4;
n2++;
}
if (b % 5 == 0) {
arr2[n2] = 5;
n2++;
}
if (b % 6 == 0) {
arr2[n2] = 6;
n2++;
}
if (b % 7 == 0) {
arr2[n2] = 7;
n2++;
}
if (b % 8 == 0) {
arr2[n2] = 8;
n2++;
}
// 3. 최대공약수 구하기 ==================================================
int result = 0;
int c = 0;
if(arr1[c] == arr2[0]) result = arr1[c];
if(arr1[c] == arr2[1]) result = arr1[c];
if(arr1[c] == arr2[2]) result = arr1[c];
if(arr1[c] == arr2[3]) result = arr1[c];
c++;
if(arr1[c] == arr2[0]) result = arr1[c];
if(arr1[c] == arr2[1]) result = arr1[c];
if(arr1[c] == arr2[2]) result = arr1[c];
if(arr1[c] == arr2[3]) result = arr1[c];
c++;
if(arr1[2] == arr2[0]) result = arr1[2];
if(arr1[2] == arr2[1]) result = arr1[2];
if(arr1[2] == arr2[2]) result = arr1[2];
if(arr1[2] == arr2[3]) result = arr1[2];
if(arr1[3] == arr2[0]) result = arr1[3];
if(arr1[3] == arr2[1]) result = arr1[3];
if(arr1[3] == arr2[2]) result = arr1[3];
if(arr1[3] == arr2[3]) result = arr1[3];
System.out.println("메인끝");
} // end of main
}
2) 배열 비교 - for문 정리 1
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd03 {
public static void main(String[] args) {
int a = 6;
int b = 8;
int[] arr1 = new int[6]; // [1][2][3][6][0][0]
int[] arr2 = new int[8]; // [1][2][4][8][0][0][0][0]
// 1. 6의 약수 채우기 ================================================================
int n1 = 0; // 배열의 위치를 나타내는 번호값 = 인덱스
if (a % 1 == 0) {
arr1[n1] = 1;
n1++;
}
if (a % 2 == 0) {
arr1[n1] = 2;
n1++;
}
if (a % 3 == 0) {
arr1[n1] = 3;
n1++;
}
if (a % 4 == 0) {
arr1[n1] = 4;
n1++;
}
if (a % 5 == 0) {
arr1[n1] = 5;
n1++;
}
if (a % 6 == 0) {
arr1[n1] = 6;
n1++;
}
// 2. 8의 약수 채우기 ================================================================
int n2 = 0;
if (b % 1 == 0) {
arr2[n2] = 1;
n2++;
}
if (b % 2 == 0) {
arr2[n2] = 2;
n2++;
}
if (b % 3 == 0) {
arr2[n2] = 3;
n2++;
}
if (b % 4 == 0) {
arr2[n2] = 4;
n2++;
}
if (b % 5 == 0) {
arr2[n2] = 5;
n2++;
}
if (b % 6 == 0) {
arr2[n2] = 6;
n2++;
}
if (b % 7 == 0) {
arr2[n2] = 7;
n2++;
}
if (b % 8 == 0) {
arr2[n2] = 8;
n2++;
}
// 3. 최대공약수 구하기 ==================================================
int result = 0;
int c = 0;
for (int i = 0; i < 4; i++) {
if(arr1[c] == arr2[0]) result = arr1[c];
if(arr1[c] == arr2[1]) result = arr1[c];
if(arr1[c] == arr2[2]) result = arr1[c];
if(arr1[c] == arr2[3]) result = arr1[c];
c++;
}
System.out.println("최대공약수 = " + result);
System.out.println("메인끝");
} // end of main
}3) 배열 비교 - for문 정리 2
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd03 {
public static void main(String[] args) {
int a = 6;
int b = 8;
int[] arr1 = new int[6]; // [1][2][3][6][0][0]
int[] arr2 = new int[8]; // [1][2][4][8][0][0][0][0]
// 1. 6의 약수 채우기 ================================================================
int n1 = 0; // 배열의 위치를 나타내는 번호값 = 인덱스
if (a % 1 == 0) {
arr1[n1] = 1;
n1++;
}
if (a % 2 == 0) {
arr1[n1] = 2;
n1++;
}
if (a % 3 == 0) {
arr1[n1] = 3;
n1++;
}
if (a % 4 == 0) {
arr1[n1] = 4;
n1++;
}
if (a % 5 == 0) {
arr1[n1] = 5;
n1++;
}
if (a % 6 == 0) {
arr1[n1] = 6;
n1++;
}
// 2. 8의 약수 채우기 ================================================================
int n2 = 0;
if (b % 1 == 0) {
arr2[n2] = 1;
n2++;
}
if (b % 2 == 0) {
arr2[n2] = 2;
n2++;
}
if (b % 3 == 0) {
arr2[n2] = 3;
n2++;
}
if (b % 4 == 0) {
arr2[n2] = 4;
n2++;
}
if (b % 5 == 0) {
arr2[n2] = 5;
n2++;
}
if (b % 6 == 0) {
arr2[n2] = 6;
n2++;
}
if (b % 7 == 0) {
arr2[n2] = 7;
n2++;
}
if (b % 8 == 0) {
arr2[n2] = 8;
n2++;
}
// 3. 최대공약수 구하기 ==================================================
int result = 0;
int c = 0;
for (int i = 0; i < 4; i++) {
int d = 0;
for (int j = 0; j < 4; j++) {
if(arr1[c] == arr2[d]) result = arr1[c];
d++;
}
c++;
}
System.out.println("최대공약수 = " + result);
System.out.println("메인끝");
} // end of main
}5. 약수 구하기 for문 정리
1) 6의 약수, 8의 약수 각각 for문 정리
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd03 {
public static void main(String[] args) {
int a = 6;
int b = 8;
int[] arr1 = new int[6]; // [1][2][3][6][0][0]
int[] arr2 = new int[8]; // [1][2][4][8][0][0][0][0]
// 1. 6의 약수 채우기 ================================================================
int n1 = 0; // 배열의 위치를 나타내는 번호값 = 인덱스
int k1 = 1;
for (int i = 0; i < a; i++) {
if (a % k1 == 0) {
arr1[n1] = k1;
n1++;
}
k1++;
}
// 2. 8의 약수 채우기 ================================================================
int n2 = 0;
int k2 = 1;
for (int i = 0; i < b; i++) {
if (b % k2 == 0) {
arr2[n2] = k2;
n2++;
}
k2++;
}
// 3. 최대공약수 구하기 ==================================================
int result = 0;
int c = 0;
for (int i = 0; i < 4; i++) {
int d = 0;
for (int j = 0; j < 4; j++) {
if(arr1[c] == arr2[d]) result = arr1[c];
d++;
}
c++;
}
System.out.println("최대공약수 = " + result);
System.out.println("메인끝");
} // end of main
}2) 약수 구하기 2개 for문 → 하나로 합치기(함수)
함수 만들기 → return
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd04 {
// 공급 (약수를 구할 숫자를 받아 그 숫자의 약수 배열을 리턴)
static int[] 약수구하기(int a){
int[] arr1 = new int[a];
int n1 = 0;
int k1 = 1;
for (int i = 0; i < a; i++) {
if (a % k1 == 0) {
arr1[n1] = k1;
n1++;
}
k1++;
}
return arr1;
}
public static void main(String[] args) {
int a = 6;
int b = 8;
int[] arr1 = 약수구하기(6); // [1][2][3][6][0][0] 약수구하기는 함수의 호출문
int[] arr2 = 약수구하기(8); // [1][2][4][8][0][0][0][0]
// 3. 최대공약수 구하기 ==================================================
int result = 0;
int c = 0;
for (int i = 0; i < 4; i++) {
int d = 0;
for (int j = 0; j < 4; j++) {
if(arr1[c] == arr2[d]) result = arr1[c];
d++;
}
c++;
}
System.out.println("최대공약수 = " + result);
System.out.println("메인끝");
} // end of main
}3) 최대공약수 구하기 함수
package algo;
/**
* 6의 약수를 구하고, 8의 약수를 구해서 최대공약수 찾기
* (1) 비지니스 (6을 1~6까지 나눠서 떨어지는 약수 - 배열에 담기)
* (2) (8을 1~8까지 나눠서 떨어지는 약수 - 배열에 담기)
* (3) arr1 = [1,2,3,6]
* (4) arr2 = [1,2,4,8]
* (5) 두 배열을 비교해서 최대공약수 찾기
* 후보 1 -> 2 int result 담기 (후보 1을 2로 덮어씌움 -> 마지막 후보군이 최대공약수)
*/
public class Gcd04 {
// 책임 : 약수를 구해서 리턴하기
// (함수는 책임을 하나만 가지는게 좋음. 2개 가지면 유지보수 어려움)
// 공급 (약수를 구할 숫자를 받아 그 숫자의 약수 배열을 리턴)
static int[] 약수구하기(int a){
int[] arr1 = new int[a];
int n1 = 0;
int k1 = 1;
for (int i = 0; i < a; i++) {
if (a % k1 == 0) {
arr1[n1] = k1;
n1++;
}
k1++;
}
return arr1;
}
static int 최대공약수구하기(int[] arr1, int[] arr2){
int result = 0;
int c = 0;
for (int i = 0; i < 4; i++) {
int d = 0;
for (int j = 0; j < 4; j++) {
if(arr1[c] == arr2[d]) result = arr1[c];
d++;
}
c++;
}
return result;
}
public static void main(String[] args) {
// 1. 약수 구하기
int[] arr1 = 약수구하기(6); // [1][2][3][6][0][0] 약수구하기는 함수의 호출문
int[] arr2 = 약수구하기(8); // [1][2][4][8][0][0][0][0]
// 2. 최대공약수 구하기 ==================================================
int result = 최대공약수구하기(arr1, arr2);
// 3. 결과 확인
System.out.println("최대공약수 : " + result);
System.out.println("메인끝");
} // end of main
}

Share article