[프로그래머스 / Java] 징검다리 건너기

2024. 11. 24. 07:42·CodingTest/Sorting & Thinking

1. 문제

 

프로그래머스

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

programmers.co.kr

 

[문제 요약]

  • 최소 몇 명이 건널 수 있는지 구하기
  • 숫자가 적힌 배열, 건널 수 있는 길이
  • 숫자의 범위가 크다 (원소의 값이 최대 2억)

 

2. 생각대로 풀기

숫자의 범위가 크기 때문에 무작정 반복문을 돌리면 안된다.
N명이 건널 수 없다면, N보다 큰 수의 사람들도 건널 수 없음.
N명이 건널 수 있다면, N보다 작은 수의 사람들도 건널 수 있음.
-> 이진탐색으로 좁혀가면서 N찾기
import java.util.*;
class Solution {
    public int solution(int[] stones, int k) {
        int left = 1;
        int right = 200000000;
        
        // 이진탐색
        while (left <= right) {
            int mid = left + (right - left) / 2;
            
            if (canCross(stones, k, mid)) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        return right;
    }
    
    private boolean canCross(int[] stones, int k, int people) {
        int count = 0;
        
        // 각 돌을 건널 때 people만큼의 인원이 지나갈 수 있는지 확인
        for (int stone : stones) {
            
            // 건널 수 없으면 카운트 증가
            if (stone - people < 0) {
                count++;
            } else {
                count = 0;
            }
            
            // 연속된 건널 수 없는 돌의 갯수가 k(길이) 이상이면 false
            if (count >= k) {
                return false;
            }
        }
        
        return true;
    }
}
저작자표시 (새창열림)
'CodingTest/Sorting & Thinking' 카테고리의 다른 글
  • [프로그래머스 / Java] 입국심사
마볼링
마볼링
개발과 게임에 관한 내용을 읽기 쉽게 정리합니다.
  • 마볼링
    게임을 좋아하는 개발자의 블로그
    마볼링
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Project
        • LOATODO
        • 인스타그램 클론코딩(중단)
      • Language
        • Java
        • PHP
        • Javascript
      • Framework & Library
        • Spring
        • Vue
      • Computer Science
        • Web
        • Linux
      • CodingTest
        • Algorithm
        • Kotlin으로 푼 코딩 테스트
        • Java로 푼 코딩 테스트
        • Sorting & Thinking
        • BFS
      • 책&강의 정리
      • 정보처리기사
      • 개인
        • 팰월드(PALWORLD)
        • 마인크래프트
  • 블로그 메뉴

    • 링크

      • GitHub
      • Threads
    • 공지사항

    • 인기 글

    • 태그

      코딩테스트
      CS
      LoaTodo
      오블완
      php
      네트워크
      Spring
      java
      티스토리챌린지
      Database
      codingtest
      프로그래머스
      아크 서바이벌
      로아투두
      이터널 모드
      운영체제
      springboot
      JPA
      jsp
      error
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.1
    마볼링
    [프로그래머스 / Java] 징검다리 건너기
    상단으로

    티스토리툴바