• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

제가 직접 짠 코드에서 16번문제 4번에서만 오류가 납니다.

20.07.21 10:42 작성 조회수 174

0

이상하게 4번에서만 오류가 나서 반례가 있는지 계속 생각해봤는데 생각이 잘 안되서 질문드립니다!

aRes 는 a의 해당 a[i]번 값의 갯수를 저장하고 bRes는 b의 해당 b[j]번 값을 저장합니다. 그리고 그 값이 같을때 

flag를 flase로 해줍니다. 

c++ 에서도 강사님과 같은 방법을 써야하나요? 제 코드와 차이점이 뭔가요? 시간 측면에서 더 효율적인건가요?

#include 
#include 

int main(){
	using namespace std;
	//freopen("input.txt", "rt", stdin);
	string a,b;
	int i,j;
	int aRes,bRes;
	bool flag=true;
	cin>>a>>b;
	if(a.length()==b.length()){
		flag=true;
		for(i=0; i<a.length(); i++){
			aRes=1,bRes=1;
			for(j=0;j<a.length();j++){
				if(a[i]==b[j])
					bRes++;
					
			}
			for(j=i+1;j<a.length();j++){
				if(a[i]==a[j]){
					aRes++;
				}
			}
			if(aRes!=bRes) flag=false;	
		}
			if(flag) cout<<"NO";
			else cout<<"YES";
	}
	return 0;	
}

답변 2

·

답변을 작성해보세요.

1

아래 코드로 수정하니 100점 나옵니다.

#include<bits/stdc++.h>
using namespace std;
int main(){
	using namespace std;
	//freopen("input.txt", "rt", stdin);
	string a,b;
	int i,j;
	int aRes,bRes;
	bool flag=true;
	cin>>a>>b;
	if(a.length()==b.length()){
		flag=true;
		for(i=0; i<a.length(); i++){
			aRes=0,bRes=0;
			for(j=0;j<a.length();j++){
				if(a[i]==b[j])
					bRes++;					
			}
			for(j=0;j<a.length();j++){
				if(a[i]==a[j]){
					aRes++;
				}
			}
			if(aRes!=bRes) flag=false;	
		}
			if(flag) cout<<"YES";
			else cout<<"NO";
	}
	return 0;	
}

0

dolikart님의 프로필

dolikart

질문자

2020.07.23

제가 이상하게 생각했네요...ㅠㅠ 감사합니다!!