inflearn logo
강의

Course

Instructor

Coding Test Practice Test (with C++): For Large Companies

5. Efficient study (dynamic programming)

1-5 효율적인 공부 dy를 시간(N)으로 하는 풀이 질문

320

HB

12 asked

0

안녕하세요. 결론부터 말하자면 1-5문제 오답인데요

선생님께서 푸신 풀이와는 좀 다른 방식으로 풀었습니다.

저는 구간이 아니라 쌩으로 전체 시간 (N)을 dy로 놓고 풀었습니다. = (time_)

=> dy는 해당 시간까지의 최대효율값을 넣고있습니다.

 

[1] 일들을 끝나는 시간으로 정렬해서 그 순서대로 진행하는건 동일하구요.

[2] dy 배열에서 해당 일의 시작 시간 - R (쉬는시간) 부터

0번째 시간까지 한 일 중에 가장 큰 값에다 해당 일의 효율을 더하는 식으로 진행했습니다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int time_[1000001]; //dy***

struct my{
	int a,b,c;
	my(int a, int b, int c){
		this->a=a; //시작 시간
		this->b=b; //끝나는 시간
		this->c=c; //효율
	}
	
	bool operator<(const my& other)const{
		return b<other.b;
	}
	
};

int main() {
	int max_=0;
	int N,M,R; //총 시간, 일 개수, 휴식시간 
	vector<my> arr;
	
        ...
	
	//DP
	sort(arr.begin(), arr.end());
	for(int i=0; i< arr.size(); i++){ //일의 갯수 
		int val;
		if(arr[i].a - R >=1){
			//time의 1번째부터  arr[i].a - R번째까지 수 중에... 
			//가장 큰 값을 찾아서 더하여 넣음
			int maxtmp=0;
			for(int j=0; j<=arr[i].a-R; j++){
				if(maxtmp < time_[j]) maxtmp = time_[j];
			}
			val = maxtmp + arr[i].c;
			
		}
		else{
			val = arr[i].c;
		}
		
                //할 수 있는 일이 없으므로                   
		//다음 일정이 끝나기 전 까지 같은 값 넣기 
		int j = arr[i].b;
		time_[j]=val;
		
		while( i+1!=arr.size() && j<arr[i+1].b){
			time_[j]=val;			
			j++;			
		}
		//최대값 찾기
		if(val > max_) max_ = val;
	}
	
	cout<<max_;

	return 0;
}

 

이렇게 풀다가 오답이 나왔습니다. 결과는 케이스 1만 오답이고 나머지 2345는 정답인데

큰 입력에 대해서는 정답인게 케이스 1에 뭔가 반례가 있어서 틀린 것 같은데 모르겠습니다...

이전 단계 강의에서 늘상 하던 방식으로 걸리는 시간을 배열로 놓은거라 방법 자체는 맞는 것 같은데 이유를 모르겠습니다. 도와주세요

 

 

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

Answer 1

0

codingcamp

안녕하세요^^

1번 입력데이터입니다. 스스로 디버그해보세요.

90 20 4

55 80 5

74 84 16

42 57 19

40 64 8

48 57 5

43 58 17

62 81 10

1 59 16

17 38 18

80 83 19

83 86 20

32 33 13

13 25 8

27 79 9

12 43 16

64 70 3

75 89 12

62 75 18

34 55 14

3 26 13

조합을 구할때 algorithm 함수 next_permutation 사용 가능 여부

0

457

1

최악의 경우 연산 질문이 있습니다.

0

411

1

로컬 환경과 다르게 오답이라고 나와서 문의 드립니다.

0

302

1

6강 3번 정사각형 그리키 코드 질문 드립니다.

0

242

1

반복수와 시간초 계산을 어떻게 하나요??

0

333

1

왜 DP로 풀어야하는지 궁금합니다

0

242

1

선생님 안녕하세요. 다른 풀이에 대한 질문이 있습니다.

0

223

1

문제 해결방법에 대한 질문이 있습니다.

0

245

0

바둑대회 코딩 질문

0

270

1

6분 11초에서 dis [0][][]3차원 격자판이있는데요. 격자판안에 숫자는 문제에 없던데 어떻게 구해지는건가요?

0

200

0

실전모의고사 5회 1번 패턴찾기 질문있습니다.

0

220

1

전역변수관련 질문입니다.

0

255

1

5-1 패턴찾기 문제 질문드립니다.

0

218

1

오렌지 나무 문제 질문드립니다

0

310

1

코드 한번 봐주시면 감사하겠습니다!

0

175

1

코드 한번 봐주시면 감사하겠습니다!

0

234

1

코드 한번 봐주시면 감사하겠습니다!

0

198

1

시작점의 ch

0

204

1

vector에서 질문이 있습니다~!

0

235

1

그대로 따라했는데 시간 초과가 나왔습니다

0

161

1

2회 모의고사 4번 숲속의 기사 코드 질문이 있습니다.

0

288

1

질문있습니다.

0

209

1

이렇게 풀면 반례가 어떻게되나요?

0

245

1

1회 1번 공통 문자열 문제 설명 보충하시면 더 좋을 것 같습니다!

0

221

1