본문 바로가기
개발 노트/백준, 프로그래머스 풀이

백준 3986/c++ )) 좋은 단어 - 오답

by tokkiC 2022. 6. 16.

나열한 문자간의 규칙을 찾아서 수열을 이용해서 풀어보았다.

s의 길이가 짝수개일때 B의 개수는 중요하지 않고 A의 개수만 파악하여 A의 인덱스를 벡터d에 저장, A가 없을시에는 s는 모두 B만 있고 짝수이므로 a를 세는 acnt 가 0일때 결과개수 cnt 를 하나 올려준다

벡터 d의 요소들의 총 합이 홀수일 경우 s는 결과에 부합 cnt 를 올려주는 로직이다.

테스트 케이스는 모두 맞으나 계속 실패한 원인 분석 결과, 로직이 잘못되었다.

반례로 ABAAAABABBAA 의 경우는 결과에 부합하지만 d의 총합이 짝수이므로 에러가 난다

d 의 인덱스 사이의 차이를 새 벡터 de로 만들어서 de 총합이 홀수인 경우로 수정하여도 에러가 났다

즉 이 로직은 설계부터 잘못되었으므로 폐기한다.

아래는 실패한 코드이다

#include <bits/stdc++.h>
using namespace std;
string s;

int main(){
	int n;
	int cnt=0;
	int acnt=0;
	long long sum=0;
	vector<char> d;
	vector<int> de;

	cin >> n;
	
	for(int k=0; k<n; k++){
		cin >> s;
		// s 길이가 짝수인 경우만 실행 
		if(s.length()%2==0){
			// s 내부를 돌며 A들의 인덱스를 추출하여 벡터d 에 담는다  
			for(int i=0; i<s.length(); i++){
			if(s[i]=='A'){
				d.push_back(i);
				acnt++;
			}
			}
			if(acnt==0){
				cnt++;
			} else if(d.size()%2==0){
				for(int i=0; i<d.size()-1; i++){
					de.push_back(d[i+1]-d[i]);
				}
				for(int j=0; j<de.size(); j++){
					sum+=(long long)de[j];
				}
				if(sum%2==1){
					cnt++;
				}
			}
		}		
	}
	cout << cnt << "\n";
	return 0;
}

 

 

 

댓글