백준 1654. 랜선 자르기 [실패]

알고리즘/백준 알고리즘

2020. 7. 27. 13:41

1.실패 원인

조건 하나를 빠트렸고, 이분탐색을 활용하지 않아서 시간초과가 났다. 랜선의 개수가 정확히 떨어지지 않아도 그 보다 많이 만드는 경우도 답이기에 조건 설계에서 실수를 했다. 이분 탐색 문제를 몇 번 풀어봤으면 아마 쉽게 답을 맞추지 않았을까 생각을 한 것이, 접근 방법은 추론했기 때문이다. 

 

2.작성 코드

#include <iostream>
#include <algorithm>
using namespace std;
const int MAX = 10000;
long long line[MAX];
int n, k;
bool possible(long long int len) {
	int cnt = 0;
	for (int i = 0; i < n; i++) {
		cnt += line[i] / len;
	}

	if (cnt >= k)
		return true;
	return false;
}

int main() {
	cin >> n >> k;
	long long int high = 0;
	for (int i = 0; i < n; i++) {
		cin >> line[i];
		high = max(line[i], high);
	}

	long long int result = 0;
	long long low = 1;

	while (low <= high) {
		long long int mid = (low + high) / 2;
		if (possible(mid)) {
			if (result < mid) {
				result = mid;
			}
			low = mid + 1;
		}
		else
			high = mid - 1;
	}
	cout << result << endl;
}

3.참고 코드

https://jaimemin.tistory.com/964

 

백준 1654번 랜선 자르기

문제 링크입니다: https://www.acmicpc.net/problem/1654 이분 탐색을 이용하는 문제에 익숙하지 않다고 판단해서 풀어본 문제입니다. 알고리즘은 아래와 같습니다. 1. 입력 받은 전선의 길이 중 최대 길이

jaimemin.tistory.com