Skip to content

Conversation

@alirz-pixel
Copy link
Member

🚀 이슈 번호

Resolve: {#2314}

🧩 문제 해결

스스로 해결:

🔎 접근 과정

문제 해결을 위한 접근 방식을 설명해주세요.

  • 🔹 어떤 알고리즘을 사용했는지: DP + 비트마스킹
  • 🔹 어떤 방식으로 접근했는지

DP의 기본 아이디어는 어떠한 가격을 주고 산 구매자 이후에 몇 번 더 구매가 가능한지를 저장한다.
여기서 추가되는 것은 어떤 경로를 통해 구매 되었는가인데,

이 부분을 비트마스킹을 통해 방문처리를 구현할 수 있다.

⏱️ 시간 복잡도

시간 복잡도 분석을 작성해주세요.
최악의 경우 수행 시간은 어느 정도인지 분석합니다.

  • Big-O 표기법: O(?)
  • 이유:

💻 구현 코드

#include <iostream>
#include <vector>

using namespace std;

int recursive(vector<vector<int>> &price, vector<vector<vector<int>>> &dp, int visited, int artist, int boundary) {
	int& ret = dp[visited][artist][boundary];
	if (ret != -1)
		return ret;

	ret = 0;
	for (int i = 1; i < price.size(); i++) {
		if (!(visited & (1 << i)) && price[artist][i] >= boundary) {
			int next_visited = visited | (1 << i);
			ret = max(ret, recursive(price, dp, next_visited, i, price[artist][i]) + 1);
		}
	}

	return ret;
}

int main() {
	int N;
	cin >> N;

	vector<vector<int>> price(N, vector<int>(N));
	for (int i = 0; i < N; i++) {
		string input;
		cin >> input;

		for (int x = 0; x < N; x++)
			price[i][x] = input[x] - '0';
	}

	vector<vector<vector<int>>> dp(1 << N, vector<vector<int>>(N, vector<int>(10, -1)));
	recursive(price, dp, 1, 0, 0);

	cout << dp[1][0][0] + 1;

	return 0;
}

@alirz-pixel alirz-pixel self-assigned this Jan 19, 2026
@alirz-pixel alirz-pixel linked an issue Jan 19, 2026 that may be closed by this pull request
@alirz-pixel alirz-pixel merged commit a7ffc61 into main Jan 25, 2026
1 check passed
@alirz-pixel alirz-pixel deleted the munhyeong/2314/1 branch January 25, 2026 11:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

260119 : 코딩테스트

2 participants