Lv 3. 징검다리 건너기

2024. 10. 30. 15:41·Algorithm & Data Structures/Programers

https://school.programmers.co.kr/learn/courses/30/lessons/64062

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

이문제는 징검다리를 건널 수 있는 최대 사람 수를 구하는 문제다.

stones 배열은 징검다리의 각 위치가 견딜 수 있는 최대 사람 수를 나타내며,

k는 건널 수 없는 돌의 연속 개수를 의미한다.

이 문제는 이분 탐색을 통해 최적의 값을 찾는 방식으로 풀 수 있다.

사람 수의 범위를 최소 1명부터 최대 징검다리 배열의 최댓값까지로 설정한다.

이분 탐색을 통해 사람 수의 중간값(mid)을 사용해

사람들이 징검다리를 건널 수 있는지 확인한다.

 

find 메서드는 현재 mid 값만큼 사람들이 건널 때 돌이 견딜 수 있는지를 검사한다.

돌이 mid 값보다 작은 경우, 건널 수 없는 돌의 연속된 횟수를 check로 증가시키고,

check가 k보다 커지면 false를 반환해 건너기 불가능하다는 것을 확인하는 메서드다.

반대로, 연속된 건널 수 없는 돌이 k 이하라면 true를 반환해 건널 수 있다고 판단한다.

 

solution 메서드에서는 이분 탐색을 진행하며,

find 메서드의 결과에 따라 start와 end의 범위를 좁혀 나간다.

find가 true를 반환하면 건널 수 있는 사람 수(mid)를 answer로 갱신하고

start를 mid + 1로 이동해 더 큰 값도 가능한지 확인한다. 반면, false일 경우

end를 mid - 1로 줄여 더 적은 인원에 대해 재검토한다.

 

 

import java.util.*;

class Solution {
    private boolean find(int[] stones,int n,int k){
        int check = 0;
        for(int i = 0 ; i < stones.length ; i++){
            if(stones[i] < n) check++;
            else check = 0;
            if(check > k) return false;
        }
        return true;
    }
    public int solution(int[] stones, int k) {
        int answer = 0;
        int start = 1;
        int end = Arrays.stream(stones).max().getAsInt();
        while(start<=end){
            int mid = (start + end) / 2;
            if(find(stones,mid,k-1)){ 
                answer = mid;
                start = mid + 1; 
            }
            else end = mid - 1;
        }
        return answer;
    }
}

'Algorithm & Data Structures > Programers' 카테고리의 다른 글

Lv 3. 입국심사  (0) 2024.11.05
Lv 3. 여행경로  (0) 2024.11.01
Lv 3. 섬연결하기  (2) 2024.10.28
Lv 3. 가장 먼 노드  (1) 2024.10.09
Lv 2. 행렬의 곱셈  (0) 2024.10.07
'Algorithm & Data Structures/Programers' 카테고리의 다른 글
  • Lv 3. 입국심사
  • Lv 3. 여행경로
  • Lv 3. 섬연결하기
  • Lv 3. 가장 먼 노드
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (313) N
      • Algorithm & Data Structures (235) N
        • BOJ (93) N
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (25) N
        • SQL (19) N
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    전위순회
    이분탐색
    스택
    구현
    baekjoon
    유니온파인드
    dfs
    후위순회
    DynamicProgramming
    unionfind
    dp
    백트래킹
    SQL
    다익스트라
    Java
    binarySearch
    동적계획법
    PriorityQueue
    Union-Find
    BFS
    골드
    투포인터
    programmers
    algorithm
    프로그래머스
    경로압축
    백준
    Stack
    알고리즘
    Dijkstra
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
Lv 3. 징검다리 건너기
상단으로

티스토리툴바