[백준/26091] 현대모비스 소프트웨어 아카데미 - JAVA

이지환·2023년 12월 18일

알고리즘(백준) 💻

목록 보기
7/80
post-thumbnail

📌 문제

알고리즘 분류 : 투포인터, 그리디
난이도 : 실버1
출처 : 백준 - 현대모비스 소프트웨어 아카데미

🦧 문제 풀이 접근

사이즈가 N인 배열에 능력치를 입력 받은 후 오름차순으로 정렬한다.
s와 e에 각각 0, N-1을 넣고 s번째 값과 e번째 값의 합이 M보다 크거나 같으면 cnt+1, s+1, e-1를 한다.
작다면 s+1을 한다.

💻 code

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine(), " ");
        Integer[] arr = new Integer[N];
        for(int i=0;i<N;i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(arr);

        int s = 0, e = N-1, cnt=0;
        while(s<e) {
            if(arr[s]+arr[e]>=M) {
                cnt++;
                s++;
                e--;
            }
            else {
                s++;
            }
        }
        System.out.println(cnt);
    }
}

🥇 결과

🎓 느낀점

그리디와 투포인터를 섞은 문제다. s인덱스와 e인덱스 값의 변화를 잘 고려해야한다.

profile
takeitEasy

0개의 댓글