[백준] 17266번: 어두운 굴다리 (이분탐색, 파이썬)

2024. 10. 19. 23:50·코딩테스트/BOJ

📌 문제 탐색하기

 양 옆으로 가로등 높이 H만큼 비추는 가로등 M개가 있다고 했을때, 길이 N의 굴다리를 전부 밝힐 수 있는 최소 가로등의 높이를 구하는 문제이다. 

🔎  시간 복잡도

  • 각 가로등 간의 간격을 순회해야하므로 M+1번 비교를 해야한다. 간격을 순회하면서 해당 높이를 탐색하면 되므로,  시간 제한안에 풀 수 있다.

🔎 접근 방법 및 알고리즘

    • 가로등의 높이가 클수록 더 넓은 범위를 비추고, 작을수록 적은 범위를 비춘다.
    • 가로등의 높이가 가능한 범위는 0 ~ N (100,000)이다

📌 코드 설계하기

1️⃣ X의 리스트 이웃한 두 숫자 간 넓이를 순회하자.

 예를 들면 i, i + 1번째 x가 각각 3과 10이라고 한다면, 가로등의 최소 높이는  반올림한 값인 round((10 - 3) / 2)가 될 것이다. 이제 이를 맨 끝의 가로등에도 적용할 수 있는지를 보는 것이다. 

근데 이게 이진 탐색을 적용해도 되는 문제인가라는 의심이 든다. 

📌 시도 회차 수정사항

  1. 테스트 케이스에 대해서만 맞혔다. 결과적으로는 틀린코드
import sys
input = sys.stdin.readline
# 입력 받기
N = int(input())
M = int(input())
x = list(map(int, input().split()))

# min은 x[0], max는 굴다리 길이 N으로 정의하기
min_len = x[0]
max_len = N

# 모든 X의 값에 대해서 탐색을 진행한다.
for i in range(0, M - 1):
    mid = round((x[i + 1] - x[i]) / 2)
    if min_len < mid:
        min_len = mid
    else:
        continue
# 위의 인덱스를 벗어나는 값에 대한 처리를 해준다. 
if (N - x[-1]) > min_len:
    res = N - x[-1]
else:
    res = min_len

print(res)

 

2. 알고리즘으로는 틀린게 없다고 생각했고 히든케이스가 있다고 생각해 가로등 수가 0개와 N개일 경우를 추가해주었다.

그래도 틀렸다.

if M == 1: res = max(x[0], N - x[0])
if M == N: res = 1

3. 세상에 알고보니 round(3.4)면 3으로 내림되는 오사오입 방법의 반올림함수였다..

이것을 수정해주니 성공했다

📌 정답 코드 

import sys
sys.stdin = open('../input.txt')
input = sys.stdin.readline

N = int(input())
M = int(input())
x = list(map(int, input().split()))

min_len = x[0]
max_len = N

for i in range(0, M - 1):
    if (x[i + 1] - x[i]) % 2 != 0: mid = (x[i + 1] - x[i]) // 2 + 1
    else: mid = (x[i + 1] - x[i]) // 2
    if min_len < mid:
        min_len = mid
    else:
        continue
if M == 1: res = max(x[0], N - x[0])
if M == N: res = 1

if (N - x[-1]) > min_len:
    res = N - x[-1]
else:
    res = min_len

print(res)

'코딩테스트 > BOJ' 카테고리의 다른 글

[백준]25418번: 정수 a를 k로 만들기 (파이썬)  (0) 2024.10.23
[백준] 2503번: 숫자 야구 (구현, 파이썬)  (1) 2024.10.16
[백준] 13567번: 로봇 (구현, 파이썬)  (0) 2024.10.15
[백준] 2096: 내려가기 (DP, 파이썬)  (0) 2024.10.14
[백준] 14430: 자원 캐기 (파이썬)  (0) 2024.10.12
'코딩테스트/BOJ' 카테고리의 다른 글
  • [백준]25418번: 정수 a를 k로 만들기 (파이썬)
  • [백준] 2503번: 숫자 야구 (구현, 파이썬)
  • [백준] 13567번: 로봇 (구현, 파이썬)
  • [백준] 2096: 내려가기 (DP, 파이썬)
뚱이, not a starfish
뚱이, not a starfish
M.S. Student,. Mainly interested in computer vision and autonomous cars
  • 뚱이, not a starfish
    Wilbur-Babo
    뚱이, not a starfish
  • 전체
    오늘
    어제
    • 분류 전체보기 (194)
      • 통신 및 네트워크 (12)
      • Embedded Projects (2)
      • 3D Reconstruction (1)
        • Gaussian Splatting (0)
        • 3D-GS (1)
        • Multi-view Geometry (0)
        • VSLAM (0)
        • Computer Graphics (0)
      • LLM(VLM) (0)
      • AI-Study (28)
        • Mono-Depth (7)
        • Base (2)
        • Computer Vision (1)
        • Image Processing (3)
        • Tiny Object Detection (3)
      • 자율주행 (20)
        • [2023] 1-fifth AA EV (4)
        • [2022] 1-tenth AA EV (2)
        • ROS 1,2 (4)
        • 이론 (7)
        • 실습 (3)
      • Pointcloud (0)
      • sw (16)
        • 정보보안 (1)
        • Android_develop (3)
      • [학부] 전기전자공학 (12)
        • 반도체 (2)
        • 마이크로프로세서 (6)
      • 코딩테스트 (22)
        • BOJ (21)
      • 취준 (21)
        • EVS37 Ambassador (5)
        • 차량 제어 플랫폼 (5)
        • 영어 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자율주행경진대회
    자율주행시험
    현대자동차 자율주행
    자율주행
    자율주행자동차
    정렬
    evs37sdv
    오블완챌린지
    tar 파일
    현차 3월 자율주행
    evs37 sdv
    오픽후기
    software defined vehicle
    심포지움
    tar압축풀기
    현차 자율주행
    현대자동차최종면접결과
    현차 3월 신입 서류
    현대자동차 서류합격후기
    우분투터미널
    자율주행작품
    현대자동차 연구개발
    헤네스유아용자동차
    현대차3월신입후기
    현대자동차최종불합
    현차떨
    현대자동차 자율주행 서류 합격 후기
    헤네스
    EVS37
    rc카
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
뚱이, not a starfish
[백준] 17266번: 어두운 굴다리 (이분탐색, 파이썬)
상단으로

티스토리툴바