알고리즘/구름톤 챌린지

구름톤 2주차 후기 -1

ebang 2023. 8. 21. 16:57
반응형

이번 문제는 난이도가 확 올라갔다. 

ㅠㅠㅠ... 중복 부분 문자열을 제거하고 사전 순으로 정렬하는 부분을 제대로 구현하지 않아 생긴 문제가 많았다. 

ㅠㅠ...,,

 

구현한 코드는 다음과 같다. 

 

눈여겨 볼 점:

중복을 피하기 위해 map 을 사용했는데 중요한 점은 map은 저장 순서가 유지되지 않고 어차피 사전순으로 정렬되면서 알아서 저장된다. 

그래서 iterator를 이용해서 점수를 차례대로 넣어주면 사전순이 구현된다. 

#include <iostream>
#include <map>
#include <algorithm>
using namespace std;


int main() {
	int N;
	map<string, int> m;
	string str;
	cin >> N;
	cin >> str;
	//map 에 넣고 저장. 하고 없으면 점수 제거. 
	
	//str[0] -> 개수 1개, ... 개수 N -2 개
	// sort(str.begin(), str.end());
	// 
	int score = 1;
	for(int i = 0; i < N; i++){
		for(int j = 1; j <= N - 2 && i + j <= N; j++){
			string temp = "";
			temp = str.substr(i, j);
			if(m.find(temp) == m.end())
				m.insert(make_pair(temp, 0));
			else
				continue;
		}
	}
	

	map<string, int>::iterator it;
	for(it = m.begin(); it != m.end(); it++){
		it->second = score++;
	}
	
	
	//[0][1] [1][2] [3][1]
	long long max = -2147483648;
	long long sum;
	for(int x = 1; x < N ; x++){
		for(int y = 1; x + y < N && y <= N - 2; y++){
			sum = 0;
			string temp = str.substr(0, x);
			sum += m.find(temp)->second;
			
			temp = str.substr(x, y);
			sum += m.find(temp)->second;
			
			temp = str.substr(x+y, N-x-y);
			sum += m.find(temp)->second;
			
		// cout << x << " " << y << " " << sum << "\n";
			if(sum > max)
					max = sum;		
		}
	}
	cout << max <<"\n";
	
	return 0;
}

 

주위 다른 분이 DFS 로 만든 부분 문자열은 다음과 같다. (depth 3 부분을 주의깊게 보자. )

void dfs(int depth, string& input, vector<string>& sel, vector< vector<string> >& list, map<string, int>& myMap, int cur)
{
	if (depth == 3)
	{
		if (cur == input.length())
		{
			for (int i=0; i<3; ++i)
				myMap.insert(make_pair(sel[i], 0));
			list.push_back(sel);
		}
		return;
	}
​
	for (int i=cur; i<input.length(); ++i)
	{
		sel[depth].push_back(input[i]);
		dfs(depth + 1, input, sel, list, myMap, i + 1);
	}
	sel[depth].clear();
}

 

반응형

'알고리즘 > 구름톤 챌린지' 카테고리의 다른 글

구름톤 4주차 후기 (1)  (0) 2023.09.04
구름톤 후기 3주차 (2)  (0) 2023.08.29
구름톤 3주차 후기 - 1  (1) 2023.08.28
구름톤 2주차 후기 - 2  (0) 2023.08.22
구름톤 챌린지 1주차 후기 (1)  (0) 2023.08.15