HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🤎
프론트엔드 데브코스 5기 교육생
/
🙆
박병현팀
/
🌉
징검다리 건너기
🌉

징검다리 건너기

레벨
LV.3
날짜
Nov 9, 2023
링크
https://school.programmers.co.kr/learn/courses/30/lessons/64062

🔎 문제


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

🧩 구현과정 및 코드

개인 토글 영역에 구현 과정과 코드를 자유롭게 작성해주시면 됩니다.

사용할 데이터 구조와 풀이 방향성
사용할 데이터 구조와 풀이 방향성
적용할 알고리즘 혹은 메서드
적용할 알고리즘 혹은 메서드

수영


구현

  • 이분탐색, 재귀
  • 절반씩 건너서 탐색 범위 줄이기

코드

  • 일부 테스트만 통과, 정확성/효율성 실패
function solution(stones, k) { // 건너기 const step = (array, k, min, max) => { if (min === max) { return min; } const mid = Math.round((min + max) / 2); let count = 0; for (let i = 0; i < array.length; i++) { if (count === k) break; let stone = array[i] - (mid - 1); stone <= 0 ? count++ : 0; } if (count === k) { // 건널 수 없으면 범위 좁히기 return step(array, k, min, mid - 1); } else { // 건널 수 있으면 다음 범위 return step(array, k, mid, max); } } return step(stones, k, 1, 200000000); }

정은


구현

  • 슬라이딩 윈도우 사용

코드

from collections import deque def solution(stones, k): max_arr = [] q = deque() q.append((-stones[0], 0)) max_arr.append(stones[0]) for i in range(1, len(stones)): tmp = stones[i] while q and -q[-1][0] < tmp: q.pop() q.append((-stones[i], i)) while i - q[0][1] >= k: q.popleft() max_arr.append(-q[0][0]) return min(max_arr[k-1:])

처음 코드(완전탐색) → 효율성 테스트 실패

def solution(stones, k): answer = 0 while True: currentIdx = -1 while currentIdx < len(stones): canWalk = False for step in range(1,k+1): currentIdx += step if currentIdx >= len(stones): canWalk = True break if (currentIdx < len(stones) and stones[currentIdx]): stones[currentIdx] -= 1 canWalk = True break if not canWalk: return answer answer += 1

종혁


구현

  • 못 건너는 경우는 → 0이 연속으로 k번 이상 존재할때
  • 1명부터(돌이 다 1일때) , 최대 2억명(돌이 다 2억일때)
  • 안 될 때까지 한명씩 증가시켜서 찾는 방법보다, 이분탐색을 이용해야 될듯
  • left - 1 , right - 2억으로 놓고 이분탐색

코드

function solution (stones, k) { let left = 1; let right = 200000000;//2억 while(left <= right) { const mid = Math.floor((left + right) / 2) //mid명이 건넜다고 가정 const copy = [...stones] let flag = false; let count = 0; for(let i = 0; i < copy.length; i++) copy[i] -= mid; for(const value of copy) { count = value <= 0 ? count+1 : 0; if(count === k) { flag = true; break; } } flag ? right = mid - 1 : left = mid + 1; } return left; }

재웅


구현

2019 카카오 개발자 겨울 인턴십 코딩 테스트 문제 해설
"2019년 카카오 개발자 겨울 인턴십" 공개 채용을 위한 1차 코딩 테스트가 지난 2019년 11월 9일 오후 2시부터 6시까지 총 4시간에 걸쳐 진행되었습니다. '19년 신입공채 1차 코딩 테스트 시에 7문제가 출제되고 5시간의 풀이 시간이 주어졌던 것과는 달리 이번 인턴 코딩 테스트는 5문제가 출제되고 4시간의 풀이 시간이 주어졌습니다. 인턴의 경우 신입 공채와는 달리 인턴 과정을 통해 추가 검증을 하기 때문입니다. 이전과 동일하게 쉬운 문제를 앞쪽에, 어려운 문제를 뒤쪽에 배치하여 지원자가 처음부터 어려운 문제를 만나 당
2019 카카오 개발자 겨울 인턴십 코딩 테스트 문제 해설
https://tech.kakao.com/2020/04/01/2019-internship-test/?source=post_page-----12fdbcf4ffaa--------------------------------
2019 카카오 개발자 겨울 인턴십 코딩 테스트 문제 해설
 
한 시간 넘게 썼는데 아직 이해를 못했습니다..😓 주말에 찬찬히 살펴봐야겠어요..

코드

 

✏️ 후기

문제를 풀고 느낀 점, 막혔던 부분 혹은 개선 사항 등을 자유롭게 작성해주시면 됩니다.

👧🏻
수영
  • 숫자가 커지니까 확실히 테스트를 통과하기가 어렵다.
👧🏻
정은
 
👦🏻
종혁
 
👦🏻
재웅