greedy 예제 1

차현대·2022년 5월 1일
0

알고리즘

목록 보기
1/1

풀이 방법

  • cost를 기준으로 내림차순으로 자료구조를 배열한다. (내가 선택한 자료구조는 vector

  • M1, M2에 자료를 하나씩 집어 넣는데, 이때 조건에 맞으면 넣고, 조건에 맞지 않으면 다음 인덱스에 있는 자료를 집어 넣는다.

    포인트는 조건을 어떻게 설정 할지 이다

    내가 선택한 조건은

    1. 배열의 뒷자리 부터 넣는다.

    (이걸 표현하는게 너무 어려웠다. while문과 if문을 적재적소에 넣어주는게 힘들었다.)

    우선 while문의 조건으로, container M1, M2의 인덱스 4번까지 자리가 꽉 차 있는지 확인을 했다. 꽉차 있지 않으면, 이제 container 에 자리를 채워넣어도 되는것이므로, 자리를 채워넣자.
    M1에 자리를 한번넣고, M2에 자리를 한번 넣는데, 만약 만료날짜 때문에 원래 넣으려던것을 M1에 한번에 못넣고, 다른 인덱스에 있는값들을 넣어야 한다면,
    다음과 같은 상황에서 설명해볼께

  1. 아직까지는 정상적인 상황, 예외가 없는 그대로 코딩하는 상황
  1. 이제 (40,4)가 들어오는 상황
  • 우선은 빈자리에 (40,4)를 넣어준다.
  • 이제 정렬을 한다. 왜냐하면, day가 긴게 뒤로 가는게 이득임
  • 이 다음에 어떤 상황이 생기냐면,

  • (28,2) 가 들어오는 상황,.... 28,2는 들어오지 못한다. 오직 day = 5인것들만 들어올 수 있다. 어떻게 컴퓨터한테 일반화 해서 day = 5 인것들만 들어온나 라고 할수 있을까??

이걸 어떻게 컴퓨터한테 이해시키지??

정렬한 것들은 큐로 자료구조를 제작하는게 맞는것 같다 라고 생각했는데 또 아니네 .....

	while (!is_full(M1, M2)){
		k = 2 * i;
		temp = k;
		// w[k]가 자리에 들어가?
		while (!have_seat(w[k], M1)) {k++;}
			assign_seat(w[k], &M1);
		k = temp;
		while (!have_seat(w[k], M2)) {k++;}
			assign_seat(w[k], &M2);
		i++;
	}
profile
현대적인 접근의 세계로 당신을 초대합니다.

0개의 댓글