코딩테스트

코딩테스트 배열 관련 함수②

망고고래 2024. 4. 23. 16:07

1. 배열에서 두 항목 선택

각 인덱스에서 자신의 뒤에 있는 항목 선택 -> 모든 경우의 수 실행 가능

for(int i = 0; i < arr.length -1; i++){
    for(int j = i + 1; j < numbers.length; j++){
        //실행할 코드 작성
    }
}

이중 반복문 -> 시간 복잡도 O(N^2)

 

 

*2차원 배열

int[][] pattern = {
{1, 2, 3, 4, 5},
{2, 1, 2, 3, 2, 4, 2, 5},
{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}
};

이 2차원 배열은 다음과 같이 저장된다.

1 2 3 4 5          
2 1 2 3 2 4 2 5    
3 3 1 1 2 2 4 4 5 5

 

이렇게 2차원 배열로 저장하면 다음과 같이 2중 for문을 사용해서 값을 비교하는 경우 등에 효율적이다.

        for(int i = 0; i<answers.length; i++){
            for(int j = 0; j < pattern.length; j++){
                if(answers[i] == pattern[j][i % pattern[j].length]){
                    scores[j]++;
                }
            }
        }

 

2. 최댓값

stream의 max()

int maxScore = Arrays.stream(scores).max().getAsInt();

 

Arrays.stream(scores): scores 배열로 스트림 생성

max(): 스트림의 최댓값 리턴

getAsInt(): max() 메서드로 반환된 OptionalInt 객체가 값을 포함하고 있다면 그 값 반환

- OptionalInt가 비어있는 경우(=스트림이 비어있는 경우) 예외 발생

 

*OptionalInt

Optional 클래스의 한 형태

int 값을 감싸는 래퍼 클래스

int 값이 있을 수도 있고 없을 수도 있는 경우에 사용