백준 올바른 배열

KIMYEONGJUN·2024년 12월 20일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 배열의 크기 N이 주어진다.
N은 50보다 작거나 같은 자연수이다.
둘째 줄부터 N개의 줄에 배열의 원소가 한 줄에 하나씩 주어진다.
원소는 1,000,000,000보다 작거나 같은 음이 아닌 정수이다.
배열에 중복되는 수는 없다.

첫째 줄에 입력으로 주어진 배열이 올바른 배열이 되게 하기 위해서 추가되어야할 원소의 최소 개수를 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용하여 입력을 받는다.
그리고 첫 번째 줄에서 배열의 크기인 N을 입력받는다.
배열 초기화:
크기 N의 정수 배열 arr을 생성하고, 다음 N개의 줄에 걸쳐 입력받은 숫자를 배열에 저장해준다.
정렬:
입력받은 배열을 오름차순으로 정렬해준다.
오름차순으로 정렬한 이유는 연속된 수를 찾기 위해서이다.
최소 추가 원소 초기화:
minAdditions 변수를 Integer.MAX_VALUE로 초기화하여, 이후 필요한 최소 추가 원소 수를 비교할 준비를 해준다.
이중 반복문:
첫 번째 반복문에서 각 원소를 시작점으로 설정해준다.
needed 변수를 초기화하여 추가해야 할 원소의 수를 카운트할 준비를 한다.
5개의 연속된 수 확인:
내부 반복문에서는 start로부터 0, 1, 2, 3, 4를 더한 값(currentValue)을 계산해준다.
Arrays.binarySearch()를 사용하여 currentValue가 배열에 존재하는지 확인해준다.
그리고 존재하지 않으면 needed를 증가시킨다.
최소 추가 원소 업데이트:
현재 계산된 needed 값과 minAdditions를 비교하여 더 작은 값을 minAdditions에 저장한다.
결과 출력:
그리고 최종적으로 필요한 최소 추가 원소의 개수를 출력해준다.

코드로 구현

package baekjoon.baekjoon_25;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

// 백준 1337번 문제
public class Main873 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        int[] arr = new int[N];
        for(int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        // 배열을 정렬합니다.
        Arrays.sort(arr);

        int minAdditions = Integer.MAX_VALUE;

        // 연속된 수를 만들기 위해 필요한 원소 개수를 계산합니다.
        for(int i = 0; i < N; i++) {
            // 현재 원소를 시작으로 5개의 연속된 수 체크
            int needed = 0;

            // 연속 수의 시작점
            int start = arr[i];

            // 5개의 연속된 수를 체크
            for(int j = 0; j < 5; j++) {
                int currentValue = start + j;
                // 현재 수가 배열에 존재하지 않으면 추가해야 할 원소
                if(Arrays.binarySearch(arr, currentValue) < 0) {
                    needed++;
                }
            }

            minAdditions = Math.min(minAdditions, needed);
        }

        // 추가할 원소의 최소 개수를 출력
        System.out.println(minAdditions);
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글

관련 채용 정보