백준 한조서열정리하고옴ㅋㅋ

KIMYEONGJUN·2024년 5월 16일
post-thumbnail

문제

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

첫째 줄에 봉우리의 수 겸 활잡이의 수 N이 주어진다. (1 ≤ N ≤ 30,000) 둘째 줄에 N개 봉우리의 높이가 왼쪽 봉우리부터 순서대로 주어진다.
(1 ≤ 높이 ≤ 100,000) 각각 봉우리의 높이는 중복 없이 유일하다.
최고의 활잡이가 처치할 수 있는 적의 최대 숫자를 출력한다.

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

입력된 정보를 저장한다.
각 활잡이가 오른쪽으로 쏘았을 때 처치하는 횟수를 탐색한다.
최고의 활잡이를 찾은 후 처치한 적의 횟수를 결과로 출력한다.

코드로 구현

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

// 백준 14659번 문제
public class Main654 {
    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];
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

        // 봉우리 정보 저장
        for(int i = 0; i < N; i++) { 
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int answer = Integer.MIN_VALUE;

        // 각 봉우리에 활잡이 탐색
        for(int i = 0; i < N; i++) {
            int count = 0;
            int h = arr[i];
            for(int j = i + 1; j < N; j++) {
                if(h < arr[j]) { // 더 높은 봉우리 만났을때 종료
                    break;
                } else { // 처치 성공
                    count++;
                }
            }
            answer = Math.max(answer, count); // 최고의 활잡이 비교하기
        }

        System.out.println(answer + "");
        br.close();
    }
}

마무리

그리디 알고리즘 계속 풀고있는데 조금 어렵게 느껴진다. 다음에 이문제를 풀어볼때 이중 for문을 사용하지 않고 코드를 작성해 볼 생각이다.

profile
Junior backend developer

0개의 댓글