developer-ellen
인간 디버거의 로그 찍기
developer-ellen
전체 방문자
오늘
어제
  • 분류 전체보기 (217)
    • 회고록 (0)
    • 취뽀 및 커리어 여정의 Stack (2)
      • SSAFY 7기 (2)
    • 프로그래밍공부 (24)
      • c++ (0)
      • JAVA (3)
      • Spring (5)
      • design pattern (3)
      • BackDB (1)
      • Servlet&JSP (3)
      • Vue (4)
      • JPA (4)
      • Infra (1)
      • Linux (0)
    • AI (3)
      • papers (3)
      • trend (0)
    • 프로젝트진행 (0)
      • 데이터베이스 (0)
      • 서버개발 (0)
      • 인공지능 (0)
      • 하루정리 (0)
    • 포트폴리오 (0)
    • 알고리즘 (158)
      • 알고리즘문풀 (155)
      • 알고리즘공부 (3)
    • 통계공부 (15)
      • 시계열분석 (15)
      • 회귀분석 (0)
    • CS (14)
      • 컴퓨터네트워크 (4)
      • 운영체제 (8)
      • 데이터베이스 (2)
    • 주저리주저리 (0)
      • 필사 (0)
    • 취업관련정보 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코테파이썬
  • SW역량테스트파이썬
  • 삼성코테자바준비
  • 삼성코테기출자바풀이
  • 삼성코테파이썬
  • SW역량테스트파이썬풀이
  • 시계열분석
  • 삼성코테자바꿀팁
  • 시계열
  • 카카오코테java풀이
  • 운영체제인터럽트
  • 데이터분석
  • Arima
  • 통계분석
  • ARIMA모형
  • c++ 빌더 패턴
  • 백준파이썬풀이
  • 삼성코테준비
  • 삼성코테기출
  • 카카오코테
  • BOJ파이썬풀이
  • c++디자인패턴
  • 삼성코테자바풀이
  • 삼성코테파이썬풀이
  • MA모형
  • AR모형
  • 삼성코테구현풀이
  • 통계학
  • 삼성코테파이썬준비
  • 삼성코테구현문제추천

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
developer-ellen
알고리즘/알고리즘문풀

2019 카카오 겨울 인턴십 코딩테스트 - 징검다리 건너기(python)

알고리즘/알고리즘문풀

2019 카카오 겨울 인턴십 코딩테스트 - 징검다리 건너기(python)

2021. 7. 12. 12:10

❓ 문제 - 2019 카카오 코딩테스트 징검다리 건너기 문제 - python 풀이법

출처 

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

 

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

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

programmers.co.kr

 

 

 

📝 문제해결법

 

1. 문제 해결 방법은 일단 구현으로 for문 돌려서 하나씩 stones 확인하면서 하면 시간초과 발생한다. stones 배열의 각 원소값들이 200,000,000 이하이기 때문이다. 

 

2. 따라서 시간 단축을 위해서 이진탐색을 활용해서 문제를 해결한다.

  • 이진탐색을 통해 탐색할 것은 건널 수 있는 사람 수를 찾는 것
  • 이진 탐색 범위에는 1 ~ 최대 건널 수 있는 사람 수 
  • stones 원소들을 for문을 돌면서 각 원소가 건널 수 있는 사람 수보다 작으면, 사용할 수 없는 stone으로 두고 이러한 사용할 수 없는 돌의 갯수를 count , 만약 건널 수 있는 사람 수 보다 큰 stone의 횟수가 되면 count = 0하고
  • for문 돌면서 count의 수가 만약 k개보다 크다면 for문 break해서 징검다리를 건널 수 있는 사람 수의 범위 갱신
  • count의 수가 k개 보다 작다면, 즉 해당 사람 수로 건넌다면 사용될 수 없는 돌의 갯수가 조건 안에 있으므로 이진탐색의 left 값을 mid+1 로 갱신하면서 건널 수 있는 사람 수의 범위 최솟값을 높인다.
  • count의 수가 k개 보다 크다면, 즉 해당 사람 수로 건넌다면 사용될 수 없는 돌의 갯수가 조건에 해당 안되므로 이진 탐색의 right값을 mid-1 로 갱신하고 answer값을 mid 값으로 갱신하면서 건널 수 있는 사람의 수의 범위 최대값을 낮춘다.

3. 이진탐색의 시간복잡도는 O(logN) 이므로모든stones들의 원소를 돌아가면서 확인하는 O(N) 방식보다 효율적이다.

 

 

 

💻 소스코드 

def solution(stones, k):
    answer = 0
    left = 1
    right = max(stones)
    
    while left <= right:
        count = 0
        mid = (left+right) // 2
        for s in stones:
            if s - mid <= 0:
                count += 1
            else:
                count = 0
            
            if count == k:
                break
        
        if count < k:
            left = mid +1
        else:
            right = mid -1
            answer = mid
    
        
    return answer

 

 

 

 

🤷 느낀점

일단 구현방법만 떠오르지 않아서 그걸로 구현했지만 시간초과가 났다. 해당 문제의 카카오 해설을 보니

이진탐색을 이용하면 효율적이게 풀 수 있다고 하였다. 이진탐색이라는 알고리즘을 알고 관련 문제를 풀어보았지만

이러한 문제를 봤을 때 떠올리지 않았다. 앞으로 이진탐색의 알고리즘도 고려해서 문제를 봐야겠다.

'알고리즘 > 알고리즘문풀' 카테고리의 다른 글

2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어(python)  (0) 2021.07.20
2019 카카오 겨울 인턴십 코딩테스트 - 호텔 방 배정 건너기(python)  (0) 2021.07.15
2019 카카오 코딩테스트 - 블록게임(python)  (0) 2021.07.08
2019 카카오 코딩테스트 - 매칭점수(python)  (0) 2021.07.05
2020 카카오 인턴십 - 동굴탐험(python)  (0) 2021.06.29
  • ❓ 문제 - 2019 카카오 코딩테스트 징검다리 건너기 문제 - python 풀이법
  • 📝 문제해결법
  •  
  • 💻 소스코드 
  • 🤷 느낀점
'알고리즘/알고리즘문풀' 카테고리의 다른 글
  • 2021 카카오 채용연계형 인턴십 - 숫자 문자열과 영단어(python)
  • 2019 카카오 겨울 인턴십 코딩테스트 - 호텔 방 배정 건너기(python)
  • 2019 카카오 코딩테스트 - 블록게임(python)
  • 2019 카카오 코딩테스트 - 매칭점수(python)
developer-ellen
developer-ellen

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.