본문 바로가기
🌈 백엔드

JAVA 개념_ 배열 메소드 / 다차원 배열

by 개발자 알마 2023. 2. 14.
반응형

 

배열 메소드

메소드 내용
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

댓글