BOJ - 1633번 최고의 팀 꾸리기(C++)

woga·2020년 9월 1일
0

BOJ

목록 보기
20/83
post-thumbnail

문제 출처: https://www.acmicpc.net/problem/1633

문제 난이도

Silver 2
(인데 체감 골드 5였다, 이유는 맨 밑에)


문제 접근법

  1. 1000줄까지 입력 받을 수 있다.
  2. 흑백 누구든 선택해서 꾸릴 수 있고, 흑백 둘 중 아무도 선택하지 않을 수 있는 3가지 경우가 있다.
  3. 시간 초과를 막기 위해 메모제이션 사용

통과 코드

#include <iostream>
#include <cstdio>

using namespace std;

int player[1001][2];
int dp[1001][16][16];
int N;

int dfs(int idx, int white, int black) {
	if (white == 15 && black == 15) return 0;
	if (idx == N) return 0;
	if (dp[idx][white][black]) return dp[idx][white][black];
	int ans = 0;
	if (white < 15) {
		ans = dfs(idx+1, white + 1, black) + player[idx][0];
	}
	if (black < 15) {
		ans = max(ans, dfs(idx + 1, white, black+1) + player[idx][1]);
	}
	return dp[idx][white][black] = max(ans, dfs(idx + 1, white, black));
}


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int idx = 0;
	int w, b;
	while (scanf("%d %d", &w, &b) == 2) {
		player[idx][0] = w;
		player[idx++][1] = b;
	}

	N = idx;
	cout << dfs(0,0,0) << "\n";

	return 0;
}

피드백

왜 체감상 난이도가 더 높은 거 같았냐면, 일단 문제가 이해 안갔다. 그리고 N값이 주어지지 않아 입력을 계속 받아야하는데 VS 2017에서 계속 입력 받아져서 결과값이 안나왔다.
그래서 입력값 받는 부분에서 시간 걸리고ㅋㅋㅋ 그리고 계속 틀렸습니다 떠서 멘붕이었다가 별거 다 시도하다가 배열값 16으로 하니깐 해결됐다. 허탈!

profile
와니와니와니와니 당근당근

1개의 댓글

comment-user-thumbnail
2021년 5월 15일

혹시 작성하신 코드 관련해서 질문 드려도 될까요?

답글 달기