배열 메소드
메소드 | 내용 |
copyOf() | 배열 전체를 복사해서 새 배열 생성 |
copyOfRange() | 배열 범위를 복사해서 새 배열 생성 |
int [] answer = Arrays.copyOfRange(numbers,인덱스1,인덱스2); | |
fill() | 배열의 모든 요소를 지정된 값으로 채운다 |
setAll() | 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다 |
binarySearch() | 배열에 저장된 요소 검색 후 인덱스 반환 |
length | 배열의 길이 |
for(int i=1; i < s1.length; i++) { | |
equals() | 요소를 비교해서 같으면 true 다차원에서는 deepEquals() 사용 |
if(s1[i].equals(s2[j])) { | |
toCharArray() | char형으로 변환 |
char [] 변수 = String 타입을 가진 변수.toCarArray() 출력시 Arrays.toString() 사용 |
|
asList() | 배열을 ArrayList로 변환 |
System.out.println(Arrays.asList(배열이름)) | |
toString() | String으로 변환 다차원에서는 deepToString()을 사용해야함 |
System.out.println(Arrays.toString(배열이름)) | |
sort() | 오른차순 정렬 |
import java.util.Arrays (추가되어있어야함) Arrays.sort(배열이름); System.out.println(Arrays.toString(배열이름)) |
|
sort(arr,comparator) | 문자형 배열을 첫번째에 담고 , 두번째 파라미터에 Collections.reverseOrder()를 담으면 내림차순 정렬한다 |
Arrays.sort(배열, Collections.reverseOrder()); System.out.println(Arrays.toString(배열)); |
|
sort(arr, int start, int end) | 시작과 끝 인덱스까지만 오른차순 정렬 |
Arrays.sort(배열이름, 3, 6); System.out.println(Arrays.toString(배열이름)); |
|
sort(arr, int start, int end, comparator) | 시작과 끝 인텍스까지 내림차순 정렬 |
Arrays.sort(sarr, 2, 5, Collections.reverseOrder()); System.out.println(Arrays.toString(sarr)); |
|
copyOf(arr2,int newlength) | 복사하는 배열, 크기를 넣으면 배열 복사 |
String[] 새배열이름 = Arrays.copyOf(이전배열, Arrays.asList(이전배열).size()); System.out.println(Arrays.toString(새배열)) |
|
parallelXX() | 빠른 결과를 얻기 위해 작업 나누어 처리한다 |
spliterator() | 여러작업으로 나누는 Spliterator 반환 |
stream() | 컬렉션을 스트림으로 변환 |
배열의 길이 n 을 반복하여 합산해라
int [] numbers = {1,2,3,4,5,6,...n}
numbers[1]+numbers[2]+numbers[3]... +numbers[n]의 값을 찾아야한다
for(int i =0; i< numbers.length; i++) { // numbers.length = i
answer += numbers[i] ;
//배열에 i 넣은 값을 반복해서 반환하면 answer 변수에 합해서 넣어라
}
// for_each 문도 사용가능
for(int i : numbers.length) {
}
다른 방식으로 스트림을 사용하면 코드가 간결해진다
스트림 stream이 제공하는 기본 함수에 평균 구하는 메소드가 있다 .average()
값을 저장하는 값 기반 orElse()
Public double solution(int[] numbers){
return Arrays.stream(numbers).average().orElse(0);
}
스트림 선언하여 배열 numbers를 가져오고 .average()로 평균을 구한다. 그 값을 .orElse() 리턴한다
이차원 배열
이차원 배열 기본 구조
int [] [] array2 = { { , , , } , { , , ,} } ---> 이차원 배열
int [] [] [] array3 = { { , , , } , { , , , } , { , , , } } ---> 삼차원 배열
이차원 배열 이상을 다차원 배열이라고 한다
삼차원 배열 이상은 코드가 복잡해지기 때문에 잘 사용하지는 않는다
이차원 배열 선언 방법
int [] [] array2 = { {1, 2, 3} , { 4, 5, 6} } ----> 초기화 선언
int [] [] array2 = new int [2][3]; ----> 배열 선언 방법 (2는 행 / 3은 열을 표시)
배열의 구조는 표를 참고 한다
배열구조 | 0열 | 1열 | 2열 |
0행 | 1 | 2 | 3 |
1행 | 4 | 5 | 6 |
2행 | 7 | 8 | 9 |
※ 대각원소는 1 , 5 , 9 으로 (0,0) , (1,1) ,(2,2) 으로 대각선으로 구조를 가진 요소를 이야기 한다
이차원 배열의 인덱스 값
int [] [] array_a = {{1,2,3},{4,5,6}};
System.out.println(array_a[1][2]); ----> 이차원 배열의 1행 2열에 있는 인덱스 값(6)을 출력해라
이차원 배열의 for 반복문
int [] [] array_a = {{1,2,3},{4,5,6}};
for (int i =0; i <array_a.length;i++) { ----> 행의 갯수를 불러온다 (2개)
for (int j = 0; j < array_a[i].length; j++) { ----> 열의 갯수를 불러온다 (3개)
System.out.println(array_a[i][j]); ----> 0행, 1행 과 0열, 1열, 2열의 값을 모두 출력한다
}
}
for(int[] ints : array_a) { --->이차원 array_a 배열을 불러와서 1차원 배열로 변경하고 변수 ints로 선언한다
for (int test : ints) { ----> 1차원 배열인 ints를 반복한다
System.out.println(test);
----> test 변수를 출력한다 , 이 변수안에 array_a의 배열이 담겨 있으므로 모든 값을 출력한다
}
}
이차원 배열에서 대각원소 찾기
int[] [] testArray = { {0,0,0},{0,0,0},{0,0,0} };
for (int i = 0; i < testArray.length; i++) { ---> 행의 갯수(3)
for (int j = 0; j < testArray.length; j++) { ----> 열의 갯수(3)
testArray[i][j] =1 ; // 행과 열의 인덱스 값을 1로 바꿔라
----> 행 3개 와 열 3개의 모든 인덱스 값을 1로 바꿔라
if(i == j) {
testArray[i][j] = 10;
---> 행과 열의 인덱스 값이 같다면 대각원소이기 떄문에 대각원소를 10으로 값을 변경하라고 지시한다
}
}
}
응용 관련 문제
예_로또 당첨번호 뽑기
배열 시간복잡도
시간 복잡도 Big O 표기법 이란
불필요한 연산을 제거하여 알고리즘 분석을 쉽게 할 목적으로 사용된다
Bio O 표기법 | 내용 | 시간복잡도 빠른순 |
O(1) | 입력자료의 수에 관계없이 일정한 실행시간을 갖음 | 1 |
O(logn) | 입력자료의 수에 따라 시간이 흐를수록 시간이 조금씩 증가 | 2 |
O(n) | 입력 자료의 수에 따라 선형적인 실행 시간이 걸리는 경우 - 입력자료마다 일정 시간 할당 |
3 |
O(nlogn) | 큰 문제를 일정 크기 갖는 문제로 쪼개고(logn+logn+ .. + logn) 다시 그것을 모으는 경우 |
4 |
O(n^2) | 이중 루프내에서 입력 자료를 처리할 때 | 5 |
O(n^3) | 삼중 루프 내에서 입력자료 처리할 때 | 6 |
O(2^n) | 7 | |
O(n!) | 8 |
접근 : 찾고자 하는 값이 몇번째 인덱스에 있는지 알고 있다면 빠른 검색 속도를 갖는다
단순 사칙연산이 수행된다
검색 : 인덱스를 알지 못할때 원하는 값을 찾기 위해 배열을 하나씩 확인한다.
추가,삭제 : 접근의 개념은 O(1)의 시간 복잡도를 가지지만 인덱스를 찾아야한다면 O(n) 시간 복잡도를 가진다
배열의 시간복잡도 | 접근 | O(1) |
검색 | O(n) | |
추가 삭제 | O(n) |
'🌈 백엔드' 카테고리의 다른 글
JAVA_개념_ 문자열 정규표현식 (0) | 2023.02.23 |
---|---|
JAVA 개념_ASCII 아스키코드 (0) | 2023.02.17 |
JAVA_기초_람다 표현식 (0) | 2023.02.16 |
JAVA 개념_Package 패키지 (0) | 2023.02.15 |
JAVA 기초 응용하기_1 (0) | 2023.02.13 |