Resign

문제 복기

문제 접근 방식 : "선택" 관점에서 풀어본 방법

N개의 날마다 선택 O, 선택 X => 총 2^N가지 경우의 수가 있다. N의 제한은 15이고, 2^15은 38xxx이므로 경우의 수를 모두 다 구해도 된다.

상담을 하는 경우와 하지 않는 경우를 나눠서 살펴본다.

재귀함수 구현 go(day,sum) : day(=index를 의미)일이 되었다. day일에 있는 상담을 할지말지 결정해야한다. 지금까지 얻은 수익sum이다.

BRUTE FORCE - RECURSION 방법 적용

  1. 정답을 찾은 경우 : day == N+1 ("N+1일이 되는 날 퇴사" 문제에서 주어진대로 접근. 복잡하지 않다.)

  2. 불가능한 경우 : day > N+1

  3. 다음 경우 호출 1. 상담한다 : go(day+t[day],sum+p[day]) 2. 상담하지 않는다 : go(day+1,sum)

문제 복기 및 부족한 부분 반성

알고리즘을 체계화시키고 구체화시키면 쉽다. 바로 코드로 구현하는 게 아니라 수도코드라도 단계적으로 로직을 짚고 넘어가야 한다.

코드 구현 불가능한 경우, 정답인 경우 바로바로 return을 해주어 배열 인덱스초과 오류가 나지 않도록 한다!

public static void go(int day,int sum) {//day = index의미. day의 범위:1부터 n까지.n=7인데 day+1
		//불가능한 경우
		if(day > n+1) return;
		//정답인 경우
		if(day == n+1) {
			if(ans < sum) ans = sum;
			return;
		}
		//다음 경우 호출
		//1.선택하는 경우
		go(day+t[day],sum+p[day]);
		//2.선택X 경우
		go(day+1,sum);
	}

Last updated