일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 탐욕법
- Algorithm
- programmers
- cs공부
- 자바스크립트
- 티스토리챌린지
- Java
- 소프티어
- 현대
- 파이썬
- Baekjoon
- 현대자동차
- 오블완
- heapq
- Python
- 백준
- 스마트팩토리
- softeer
- 토이프로젝트
- 알고리즘
- alogorithm
- GAN
- 프로그래머스
- 자바
- 힙큐
- re_lunchu
- boj
- JavaScript
- cim
- 딥러닝
- Today
- Total
eaz_coding
[Programmers] 징검다리 본문
문제
요약
distance 만큼의 거리 사이에 rocks의 돌들이 있음.
rocks에서 임의의 n개 돌을 제거했을 때, 돌 사이 거리의 최솟값의 최대값은 몇인가?
원본
https://school.programmers.co.kr/learn/courses/30/lessons/43236
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
이번에도 스스로 풀지 못했다 ㅠㅜ
언제쯤 알아서 척척 스스로 어른이가 되는가,,,
이번 문제는 그래도 어디서 이분탐색을 해야할지는 어떻게 할지 접근 방식이 근접했다.
돌이 일단 섞여 있으니 돌을 정렬 해주어야 하고, 돌에서 이진탐색을 한다.
예시를 보니 출발지점에서 돌까지, 돌에서 도착지점까지 들어가고 나가는 거리도 포함해서 생각해야 한다.
여기까지는 알았는데 임의의 거리를 다른 돌들과 비교하는 부분에 대해서 이해가 잘 안 갔다.
1. 임의의 거리 이분탐색해서 지정
2. 기준은 0부터 시작, 돌을 순회하면서 기준까지 거리가 임의값보다 작으면 제거하는 돌에 추가
3. 아니면 기준돌을 현재 돌로 갱신
4. 다 돌고 제거하는 돌 개수가 많으면 작은 값으로 다시 이분탐색
5. 아니면 answer 갱신과 큰 값으로 다시 이분탐색
6. 반복
이해가 안될때는 손으로 이해하자...! ㅎ
풀다 보니 이분탐색은 이분탐색 자체보다 어떻게 값을 비교하는지 비교 방법을 떠올리는게 메인인것 같다.
IQ가 낮을까,,,,나..?
def solution(distance, rocks, n):
answer = 0
rocks.append(distance)
rocks.sort()
lw, up = 1, distance
while lw <= up :
mid = (lw+up) // 2
q = 0
d = 0
for r in rocks:
if r - q < mid:
d += 1
else:
q = r
if d > n:
break
if d > n:
up = mid -1
else:
answer = mid
lw = mid + 1
return answer
'eaz_algorithm' 카테고리의 다른 글
[Softeer] 슈퍼컴퓨터 클러스터 (1) | 2024.03.07 |
---|---|
[Softeer] 징검다리 (0) | 2024.03.06 |
[Programmers] 징검다리 건너기 (0) | 2024.03.04 |
[Programmers] 입국 심사 (0) | 2024.03.01 |
[Programmers]순위 검색 (0) | 2024.02.28 |