새소식

코딩테스트/소프티어

[C++] 비밀 메뉴2

  • -

[문제]

https://softeer.ai/practice/info.do?idx=1&eid=633 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

[문제 풀이]

조건에서 N과 M이 3000이 안되니 n^2 으로도 시간제한 안에 충분히 풀 수 있었던 문제였기에 LCS 알고리즘을 응용해서 풀었다.

N의 배열과 M의 배열을 이중으로 교차시키고 제일 많이 나오는 연속된 숫자를 답으로 체크하였다.

* LCS 알고리즘에 관한 설명은 이쪽에 있다. https://yoon-1212.tistory.com/108

[코드]

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main(int argc, char** argv)
{

	int n,m,k;
	cin>>n>>m>>k;
	vector<int> firstKio(n,0);
	vector<int> secondKio(m,0);
	for(int i = 0;i<n;i++){
		cin>>firstKio[i];
	}
	for(int i = 0;i<m;i++){
		cin>>secondKio[i];
	}

	vector<vector<int> > menu(n + 1,vector<int>(m + 1,0));

	int answer = 0;

	for(int i = 1;i<=n;i++){
		for(int j = 1;j<=m;j++){
			if(firstKio[i - 1] == secondKio[j - 1]){
				menu[i][j] = menu[i-1][j-1] + 1;
			}
			answer = max(answer, menu[i][j]);
		}
	}

	cout<<answer<<endl;

	return 0;
}

'코딩테스트 > 소프티어' 카테고리의 다른 글

[C++] 자동차 테스트  (0) 2023.08.25
[C++] 순서대로 방문하기  (0) 2023.08.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.