반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

1654 랜선 자르기 본문

코딩 테스트(Python)/백준, 프로그래머스

1654 랜선 자르기

5_hyun 2022. 6. 18. 00:45

https://www.acmicpc.net/problem/1654

 

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net

 

내 풀이(반례 보고 맞춤)

n, m = map(int, input().split())
ary = []
for i in range(n):
    ary.append(int(input()))

start = 1
end = max(ary)
answer = 0

while (start <= end):
    mid = (start+end) // 2
    
    total = 0
    for i in range(n):
        if ary[i] >= mid:
            total += ary[i] // mid
               
    #너무 짧게 짤랐다.
    if total >= m:
        start = mid + 1
        answer = mid
    else:
        end = mid - 1
print(answer)

이 문제 또한 어제 푼 문제와 유사하다. 그래서 똑같이 풀었는데 이 문제는 조금 달랐다. 맨 처음에 실수 한 점이 랜선은 0으로 자를 수 없는데 start를 0으로 설정했다. 문제에도 나와있듯이 start는 1부터 시작해야 한다. 그리고 for문에서 ary[i]와 mid를 비교할 때 처음에는 ary[i]가 mid보다 커야지만 자를 수 있다고 했는데, 생각해보면 같은 길이라도 자를 수 있다. 따라서 ary[i] >= mid로 해줘야 잘 수행된다.

728x90
반응형

'코딩 테스트(Python) > 백준, 프로그래머스' 카테고리의 다른 글

17219 비밀번호 찾기  (0) 2022.06.25
1로 만들기(백준)  (0) 2022.06.22
2805 나무 자르기  (0) 2022.06.17
1316 그룹 단어 체커  (0) 2022.06.13
1213 팰린드롬 만들기  (0) 2022.06.11
Comments