Notice
Recent Posts
Recent Comments
초코레
기본 자료구조 본문
- 배열의 요소나 클래스의 필드는 초깃값으로 초기화가 되지만 메서드 안에서 선언한 지역 변수는 초깃값으로 초기화되지 않는다.
- 배열의 길이는 프로그램을 컴파일할 때가 아니라 실행할(runtime) 때 결정된다.
- 난수 생성에 사용할 수 있는 java.util.Random 클래스와 java.lang.Math 클래스
- 배열 안의 두 요소를 교환하는 것은 자주 사용하므로 독립적인 메서드로 구현하자.
소수 구하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public class PrimeNumber2 {
//소수 구하기
public static void main(String[] args) {
int counter = 0; //나눗셈의 횟수
int ptr = 0; //찾은 소수의 개수
int[] prime = new int[500]; //소수를 저장하는 배열
prime[ptr++] = 2; //2는 소수이므로 추가
//대상은 홀수만, 4 이상의 짝수는 2로 나누어 떨어지므로 소수가 아니기 때문
for (int n = 3; n <= 1000; n+=2) {
int i; //1부터 시작. 판단 대상인 n이 홀수이므로
for (i = 1; i < ptr; i++) {
counter++;
if(n % prime[i] == 0) {
break;
}
}
if(ptr == i) { //안쪽 for문이 중단되면 소수가 아님 = i는 ptr보다 작음
prime[ptr++] = n;
}
}
for (int i = 0; i < ptr; i++) {
System.out.println(prime[i]);
}
System.out.println("나눗셈을 수행한 횟수 : " + counter); //14622
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public class PrimeNumber3 {
public static void main(String[] args) {
int counter = 0; //나눗셈의 횟수
int ptr = 0; //찾은 소수의 개수
int[] prime = new int[500]; //소수를 저장하는 배열
prime[ptr++] = 2; //2는 소수이므로 추가
prime[ptr++] = 3; //3은 소수이므로 추가
//정수 n이 n의 제곱근 이하의 어떤 소수로도 나누어떨어지지 않는다면 소수이다.
//prime[i]가 n의 제곱근 이하인지 = prime[i]의 제곱이 n 이하인지
//대상은 홀수만
for (int n = 5; n <= 1000; n+=2) {
boolean flag = false;
for (int i = 1; prime[i] * prime[i] <= n; i++) {
counter += 2;
if (n % prime[i] == 0) {
flag = true;
break;
}
}
//마지막까지 나누어떨어지지 않으면 소수이므로 배열에 저장
if(!flag) {
prime[ptr++] = n;
counter++;
}
}
for (int i = 0; i < ptr; i++) {
System.out.println(prime[i]);
}
System.out.println("곱셈과 나눗셈을 수행한 횟수 : " + counter); //3774
}
}
|
cs |
- 클래스를 간단하게 사용하기 위해 명시적으로 import를 선언할 필요가 있다. 하지만 JAVA 언어와 밀접하게 연관된 클래스나 인터페이스 등을 모아놓은 java.lang 패키지는 import를 선언할 필요가 없다. 따라서 이 패키지에 속하는 Integer나 String 등의 클래스는 import를 선언하지 않고 간단한 이름만으로 나타낼 수 있다.
- 배열의 접근은 모두 런타임(실행 시)에 검사되기 때문에 만약 배열 길이 이상의 인덱스에 접근하면 IndexOutOfBoundsException이 발생한다.
- 다차원 배열을 복제(clone)하면 최상위의 1레벨만 수행된다. 예를 들어 아래와 같이 복제한다면 a[0], a[1]만 복제되고 그 아래 레벨의 배열은 복제되지 않고 공유된다.
1
2
|
int[][] a = {{1, 2, 3, 4}, {5, 6, 7}};
int[][] b = a.clone();
|
cs |
'알고리즘' 카테고리의 다른 글
이진 검색(binary search) (0) | 2019.12.23 |
---|---|
선형 검색(linear search) (0) | 2019.12.21 |
기본 알고리즘 (0) | 2019.12.19 |
[알고리즘 개념정리] 퀵 정렬 (0) | 2019.06.08 |
[알고리즘 개념정리] 재귀 (0) | 2019.06.07 |