ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ 백준 1449 수리공 항승
    Algorithm/BOJ 2020. 6. 13. 12:00
    728x90

    출처: www.acmicpc.net/problem/1449

    분류: 그리디


    접근방식

    테이프의 좌 우로 0.5를 남겨둬야 한다고 했으니 테이프 길이 - 1 만큼의 구멍은 한 번에 막을 수 있습니다.

    구멍을 막을 때마다 테이프의 길이는 줄어들겠죠. 테이프의 길이보다 구멍까지의 간격이 더 크다면 테이프를 새로 끊어야 합니다.

    현재 남은 테이프로 남은 구멍을 메꿀 수 있는지 확인하고 아니면 테이프를 새로 끊어줍니다.

     

    다른 분의 접근법을 보고 알았는데요.

    더 쉽게 생각하면 현재 구멍의 위치 + 테이프길이-1 만큼까지 커버가 가능하다는 말이 됩니다.
    테이프를 새로 끊을 때 현위치 + 테이프길이-1 까지를 커버 가능한 범위라고 생각하면, 다음 위치가 커버 가능한 범위를 벗어나면 테이프를 새로 끊어주면 됩니다.

     

    해결방법

     

    배운점

    let n = readLine()!.split(separator: " ").map{Int($0)!}
    var leaks = readLine()!.split(separator: " ").map{Int($0)!}
    leaks.sort()
    
    var used = 0
    var current = 0
    var tape = 0
    for leak in leaks {
        if tape < leak - current {
            used += 1
            tape = n[1] - 1 // 테이프를 새로 끊음
        } else {
            tape -= leak - current
        }
        current = leak
    }
    
    print(used)

     

    보다 간결한 다른 풀이

    let n = readLine()!.split(separator: " ").map{Int($0)!}
    var leaks = readLine()!.split(separator: " ").map{Int($0)!}
    leaks.sort()
    
    var cover = 0
    var used = 0
    for leak in leaks {
        if leak > cover {
            used += 1
            cover = leak + n[1]-1
        }
    }
    
    print(used)

     

    회고

     

    쉬운 문제였는데 생각보다 오래걸렸습니다 ;;; 

    간단하게 생각할 수 있는데 어렵게 생각하는 경향이 있는 것 같네요. 

    연습하면 점점 나아지겠죠!!!

     

    'Algorithm > BOJ' 카테고리의 다른 글

    백준 1969 DNA  (0) 2020.06.15
    백준 1543 문서 검색  (0) 2020.06.15
    백준 2437 저울  (0) 2020.06.13
    BOJ 2352 반도체 설계  (0) 2020.06.12
    BOJ1080 행렬  (0) 2020.06.11

    댓글

Designed by Tistory.