강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của su88888888941670
su88888888941670

câu hỏi đã được viết

Nhập môn giải bài toán bằng thuật toán cho việc làm CNTT (với C/C++): Luyện thi viết mã

43. Video nhạc (ứng dụng tìm kiếm nhị phân: thuật toán quyết định)

질문있습니다.

Viết

·

231

0

밑에 코드와 같이 강의를 듣기 전에 먼저 코드를 작성해보았습니다. 선생님 강의 내용에서는 함수를 사용했지만 저는 함수 대신 다른 방법으로 짰는데 모두 wrong answer이 나오네요ㅠㅠ

계속해서 어디 부분이 틀렸는지 보지만 알고리즘은 맞는 듯해보이는데 혹시 어디서 오류가 발생했나요?

#include <iostream>

#include <vector>

#include <algorithm>

#include <string>

using namespace std;

int main() {

int n, m, tmp, cnt=0, mid = 0, start = 1, end;

scanf("%d %d",&n,&m);

vector <int> array(n);

for (int i = 0; i < n; i++){

scanf("%d",&array[i]);

end = end + array[i];

}

while (start <= end){

int pl = 0;

mid = (start + end) / 2;

for (int i = 0; i < n; i++){

pl = pl + array[i];

if (pl > mid) {

cnt++;

pl = array[i];

}

}

if (cnt <= m) {

end = mid - 1;

tmp = mid;

}

else start = mid + 1;

}

printf("%d",tmp);

return 0;

}

C++코테 준비 같이 해요!

Câu trả lời 2

0

su88888888941670님의 프로필 이미지
su88888888941670
Người đặt câu hỏi

친절한 답변 너무 감사합니다. 

선생님 덕분에 코딩공부가 재밌네요^^

0

codingcamp님의 프로필 이미지
codingcamp
Người chia sẻ kiến thức

안녕하세요^^

아래 for문이 돌기전에 항상 cnt=0으로 초기화를 해야 합니다.

for (int i = 0; i < n; i++){

pl = pl + array[i];

if (pl > mid) {

cnt++;

pl = array[i];

}

}

그리고 위 for문이 카운팅을 제대로 못하고 있습니다. 

채점폴더의 in1.txt 열면 입력예가 있습니다. wrong answer 가 나오는 데이터를 가지고 디버그해 보세요.

in1.txt의 정답은 out1.txt에 있습니다. 스스로 디버그해보세요. 

Hình ảnh hồ sơ của su88888888941670
su88888888941670

câu hỏi đã được viết

Đặt câu hỏi