JAVA 배열

배열을 사용하면 변수 하나에 값을 여러개 담을 수 있다.

배열 생성

  • 선언과 동시에 빈 배열 생성
    1
    int[] intArray = new int[5];
  • 선언 후 배열 생성
    1
    2
    int[] intArray;
    intArray = new int[5]; // 크기 5의 빈 배열
  • 리터럴로 배열 생성
    1
    2
    3
    4
    int[] intArray = {1, 2, 3, 4, 5};

    int[] intArray;
    intArray = {1, 2, 3, 4, 5}; // 오류

배열 사용

  • 값을 대입할 때
    1
    2
    intArray[0] = 1;
    intArray[1] = 2;
  • 값을 읽을 때
    1
    System.out.println(intArray[0] + intArray[1]); // 1 + 2

앨리어싱 (Aliasing)

  • arr1arr2에 지정해주었을 때 두 변수는 같은 주서를 가리키게 된다.
  • arr2arr1의 __Alias(가명)__이라고 할 수 있다.
1
2
3
4
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1;

System.out.println(arr2[0]);

Clone

  • arr1arr2에 새롭게 복사한다.
1
2
3
4
5
6
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1.clone();

arr1[0] = 100;
System.out.println(arr1[0]); // 100
System.out.println(arr2[0]); // 1

for-each

1
2
3
for (int i : intArray) {
System.out.println(i);
}
1
2
3
4
5
6
7
8
9
10
11
String[] fruitsArray = new String[5];

fruitsArray[0] = "딸기";
fruitsArray[1] = "당근";
fruitsArray[2] = "수박";
fruitsArray[3] = "참외";
fruitsArray[4] = "메론";

for (String fruit : fruitsArray) {
System.out.println(fruit);
}
1
2
3
4
5
딸기
당근
수박
참외
메론

다중배열

초기값 선언

  • 2차원 구조는 다중배열로 선언한다.
1
int[][] multiArray;
1
2
3
4
5
int[][] multiArray = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
}

생성

  • 선언과 생성만 하기 위해서는 각 대괄호 사이에 사이즈를 삽입한다.
  • 일반적으로 ‘행(줄)’을 첫 번째 대괄호에, ‘열(칸)’을 두 번째 대괄호에 넣는다.
1
int[][] multiArray = new int[3][4];

사용

  • 예시로 든 multiArray[0], multiArray[1], multiArray[3]int[4]의 자료형을 갖는다.
  • 그렇기 때문에 일반적인 배열 탐색법으로 탐색할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < multiArray[0].length; i++) {
multiarray[0][i] = 1 + i;
}

for (int i = 0; i < multiArray[1].length; i++) {
multiarray[1][i] = 5 + i;
}

for (int i = 0; i < multiArray[2].length; i++) {
multiarray[2][i] = 9 + i;
}

중첩 반복문

  • 중첩 반복문을 사용하면 보다 깔끔하게 사용할 수 있다.
  • 여기서 multiArray[i][j].length는 전체 자리 수(12)가 아닌 행(줄)의 수(3)이다.
1
2
3
4
5
for (int i = 0; i < multiArray.length; i++) {
for (int j = 0; j < multiArray[i].length; j++) {
multiArray[i][j] = (i * 4 + 1) + j;
}
}

연습문제

배열연습

(1) 크기가 30인 정수형 배열 intArray를 만들어 주세요.
(2) 배열의 첫 번째(0번 인덱스) 칸부터 1001, 1002, 1003, …, 1029, 1030을 순서대로 넣어주세요.
(3) 크기가 4인 문자열형 배열 remainders를 만들어 “Zero”, “One”, “Two”, “Three”를 순서대로 넣어주세요.
(4) intArray 배열에 담긴 각 값을 4로 나눈 나머지를 인덱스로 생각하고, remainders 배열에서 그 인덱스에 위치한 단어를 출력해주세요. 이 때 반드시 ‘배열 정리’ 노트에 있는, for- each문을 활용해주세요!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Main {
public static void main(String[] args) {
int[] intArray = new int[30];

for (int i = 0; i<intArray.length; i++) {
intArray[i] = i + 1001;
}

String[] remainders = {"Zero", "One", "Two", "Three"};

for (int num : intArray) {
System.out.println(remainders[num % 4]);

}

}
}

DNA 염기 서열 분석

DNA 염기 서열은 생물의 유전 성질을 결정하는 매우 중요한 역할을 가지고 있습니다. 템플릿에 주어진 염기 서열에서 TAGG, CCAG, AGCC가 총 몇 번 등장하는지 세어봅시다.

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class Main {
public static void main(String[] args) {
String dna = "GATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCA"
+ "CCACGCCCGGCTAATTTTTATTTATTTATTTAAAGACAGAGTCTCACTCT"
+ "GTCACTCAGGCTAGAGTGCAGTGGCACCATCTCAGCTCACTGCAGCCTTG"
+ "ACCTCCCTGGGCTCCGGTGATTTCACCCTCCCAAGTAGCTAGGACTACAG"
+ "GCACATGCCACGACACCCAGCTAATTTTTTATTTTCTGTGAAGTCAAGGT"
+ "CTTGCTACGTTGCCCATGCTGGTATCAAACCCCTGGGCTCAATCAATCCT"
+ "TCCACCTCAGCCTCCCCAAGTATTGGGGTTACAGGCATGAGCTACCACAC"
+ "TCAGCCCTAGCCTACTTGAAACGTGTTCAGAGCATTTAAGTTACCCTACA"
+ "GTTGGGCAAAGTCATCTAACACAAAGCCCTTTTTATAGTAATAAAATGTT"
+ "GTATATCTCATGTGATTTATTGAATATTGTTACTGAAAGTGAGAAACAGC"
+ "ATGGTTGCATGAAAGGAGGCACAGTCGAGCCAGGCACAGCCTGGGCGCAG"
+ "AGCGAGACTCAAAAAAAGAAAAGGCCAGGCGCACTGGCTCACGCCTGTAA"
+ "TCCCAGCATTTCGGGAGGCTGAGGCGGGTGGATCACCTGAGGTCAGGAGT"
+ "TCAAGACCAGCCTAGCCAACATGGTGAAACCCCGTCTCTACTAAAATACA"
+ "AAAATTAACCGGGCGTGATGGCAGGTGCCTGTAATCCCAGCTACTTGGGA"
+ "GGCTGAGGCAGGAGAATCGCTTGAACCAGGAGGCGGAGGTTGCAGGGAGC"
+ "CAAGATGGCGCCACTGCACTCCAGCCTGGGCGATAGAGTGAGACTCCGTC"
+ "TCAGAAAAAAAAGAAAAGAAACGAGGCACAGTCGCATGCACATGTAGTCC"
+ "CAGTTACTTGAGAGGCTAAGGCAGGAGGATCTCTTGAGCCCAAGAGTTTG"
+ "AGTCCAGCCTGAACAACATAGCAAGACATCATCTCTAAAATTTAAAAAAG"
+ "GGCCGGGCACAGTGGCTCACACCTGTAATCCCAGCACTTTGGGAGGTGGA"
+ "GGTGGGTAGATCACCTGACGTCAGGAGTTGGAAACCAGCCTGGCTAACAT";
char[] charArray = dna.toCharArray();

// AGG, CCAG, AGCC가 각각 몇 개씩 있는지 담을 변수가 필요
int TAGG = 0;
int CCAG = 0;
int AGCC = 0;

// 검사할 문자 4개를 담을 4칸짜리 문자 배열(char[])을 선언
char[] current = new char[4];

// charArray를 탐색할 for문
for (int i = 0; i < charArray.length - 3; i++) {
// 반복문 내에 또 반복문을 만들어 검사해야 할 문자열 4개를 순서대로 채워 넣음
for (int k = 0; k < current.length; k++) {
current[k] = charArray[i + k];
}

// char[]을 String으로 변환
String seq = new String(current);

// 염기서열 세기
switch (seq) {
case "TAGG":
TAGG++;
break;
case "CCAG":
CCAG++;
break;
case "AGCC":
AGCC++;
break;
}
}

System.out.println("TAGG: " + TAGG);
System.out.println("CCAG: " + CCAG);
System.out.println("AGCC: " + AGCC);
}
}

charArray를 탐색할 for문

  1. int i = 0에서 시작
  2. i < charArray.length - 3까지만 탐색

문자열의 첫 줄(“GATCCGCCCGCCTCGGCCTCCCAAAGTGCTGGGATTACAGGTGTGAGCCA”)을 “GATC”(인덱스 0 ~ 3) / “ATCC”(인덱스 1 ~ 4) / “TCCG”(2 ~ 5) / “CCGC”(3 ~ 6), … 이런 식으로 확인한다. 그러다가 맨 마지막 줄(“GGTGGGTAGATCACCTGACGTCAGGAGTTGGAAACCAGCCTGGCTAACAT”)에서 “ACAT”까지만 확인 필요하다. “ACAT”은 인덱스 length - 4부터 length - 1까지이기 때문에 종결식을 i < charArray.length - 3으로 잡아야 한다.

검사할 문자 4개를 담을 4칸짜리 문자 배열(char[])을 선언
for문 안에서 배열을 선언하는 이유는 반복문을 벗어나면 더 이상 사용할 일이 없기 때문이다.
하지만 배열을 새로 만드는 작업 비용이 클 수 있기 때문에 여러번 반복하여 만들지 않고 for문 밖에서 한 번 만들어 재사용하는 것이 나을 수 있다.


REFERENCE
코드잇 온라인 강의 자바 기초

  • © 2020-2025 404 Not Found
  • Powered by Hexo Theme Ayer