HelloMinchan
처음처럼
HelloMinchan
LinkedIn
전체 방문자
오늘
어제
  • 분류 전체보기 (306)
    • Backend (4)
      • NestJS (1)
      • Express (1)
      • Spring (2)
    • Infrastructure (1)
      • AWS (1)
    • Frontend (1)
      • Next.js (1)
    • Language & Runtime (4)
      • Java (2)
      • Node.js (2)
    • Computer Science (8)
      • Computer Networks (3)
      • Operating Systems (4)
      • OOP (1)
    • 독서 (4)
      • 데이터 중심 애플리케이션 설계 (3)
      • 객체지향의 사실과 오해 (1)
    • 회고 (4)
      • Project (2)
      • Career (2)
    • Deprecated (280)

채널

  • GitHub
  • LinkedIn

최근 글

태그

  • programmers
  • 개발자
  • 알고스팟
  • 알고스팟Python
  • front-end
  • 프로그래머스Python
  • 코딩
  • 프로그래머스C++
  • 백준Python
  • back-end
  • Algospot
  • 데이터베이스
  • 백준Go
  • 백준
  • 프로그래밍
  • Database
  • 백엔드
  • 백준C++
  • 프로그래머스
  • Baekjoon Online Judge

최근 댓글

인기 글

hELLO
HelloMinchan

처음처럼

[programmers] 프로그래머스 징검다리 건너기(Python)
Deprecated

[programmers] 프로그래머스 징검다리 건너기(Python)

2020. 5. 18. 20:56

(주)그렙

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

(Python)

(글쓴날 : 2020.05.18)

 


* programmers, 프로그래머스 문제 Python 언어 풀이입니다.

* 소스 코드의 저작권은 글쓴이에게 있습니다.


 

 

프로그래머스 징검다리 건너기


1) 문제

문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/64062

 

코딩테스트 연습 - 징검다리 건너기

[2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3

programmers.co.kr


2) 풀이 과정

* 시간 복잡도 : O(n log n)

 

한번 밟을 때마다 디딤돌에 적혀있는 숫자가 1씩 줄어드는 징검다리가 주어지고, 디딤돌의 숫자가 0이 되면 다음 디딤돌로 여러 칸을 건너뛸 수 있지만, 0이 아닐 경우 건너뛸 수 없을 때 징검다리를 건널 수 있는 횟수를 구하는 문제입니다.

단, 한 번에 건너 뛸 수 있는 디딤돌은 최대 k개 입니다.

 

저의 경우, 이분 탐색을 적용하였고, Python을 사용했습니다.

디딤돌에 적혀있는 숫자의 최대 크기가 200,000,000이므로, 이분 탐색의 최댓값을 200,000,000으로 잡아 이분 탐색하는 mid 값만큼 디딤돌들의 숫자를 빼가며 k만큼 건너뛰어 징검다리를 건널 수 있는지의 여부를 체크해 문제를 해결했습니다.


3) 코드

 

* Python 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def isPossible(stones, k, mid):
    disappearedStones = 0
    
    for s in stones:
        if s - mid <= 0:
            disappearedStones += 1
            if disappearedStones == k:
                return False
        else:
            disappearedStones = 0
            
    return True
 
    
def solution(stones, k):
    answer = 0
    
    left = 0
    right = 200000000
    
    while left <= right:
        mid = (left + right) // 2
        
        if isPossible(stones, k, mid):
            answer = mid
            left = mid + 1
        else:
            right = mid - 1
    
    return answer + 1

 

저작자표시 비영리 변경금지 (새창열림)

'Deprecated' 카테고리의 다른 글

[ALGOSPOT] 알고스팟 QUADTREE 쿼드 트리 뒤집기(Python)  (0) 2020.05.22
[ALGOSPOT] 알고스팟 BOARDCOVER 게임판 덮기(Python)  (0) 2020.05.21
[programmers] 프로그래머스 호텔 방 배정(Python)  (0) 2020.05.18
[Baekjoon Online Judge] 백준 2170번 선 긋기(Python)  (0) 2020.05.17
[Algorithm] 유니온 파인드  (0) 2020.05.16
    'Deprecated' 카테고리의 다른 글
    • [ALGOSPOT] 알고스팟 QUADTREE 쿼드 트리 뒤집기(Python)
    • [ALGOSPOT] 알고스팟 BOARDCOVER 게임판 덮기(Python)
    • [programmers] 프로그래머스 호텔 방 배정(Python)
    • [Baekjoon Online Judge] 백준 2170번 선 긋기(Python)
    HelloMinchan
    HelloMinchan
    Though you should not fear failure, You should do your very best to avoid it.

    티스토리툴바