반응형

 

 

 

 

 

입력된 문자열 2개를 같은 문자열로 만들기 위해 제거해야할 최소의 문자의 수를 구하는문제

 

예제를 보면 aabbcc와 xxyybb는 공통된 bb만을 갖고있으므로 나머지 aacc와 xxyy는 제거되어야한다

따라서 총 8개의 문자를 제거해야하므로 출력값은 8이 나오는것

 

 

풀이를 위해 생각한 과정

 

문자열 str1, str2를 각각 입력받은 다음, a부터 z까지의 크기를 갖는 배열 arr1, arr2를 만든다

 

str1에서 나온 문자를 arr1의 알파벳 문자에 해당하는 인덱스 값을 증가시켜주어

str1에 해당하는 문자의 개수를 기록한다

 

그렇게 str2도 동일한 과정을 거쳐

arr1과 arr2와의 차이를 모두 더한 값을 출력하도록했다

 

이때, 차이는 음수가 될수있으므로 음수인경우는 -부호를 붙여 양수로 만들어 계산을 했다

 

 

문제 - str1과 str2의 사이즈가 다르다는 생각을 못해서 런타임 에러가 났다

OutOfBounds 컨테이너 또는 배열에서 할당된 경계를 넘어가는 접근 발생

 

런타임 에러가 났길래 자세히 봤더니 배열 범위에 문제가 생긴듯해서 처음에는 알파벳개수에 문제가 생긴줄알았는데

입력받는 문자열의 개수가 다를수있다는걸 간과해서

 

각각의 개수를 반복하는 반복문으로 수정해서 오류 해결완료함

 

 

 

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

int main() {	
	string str1;
	string str2;	
	cin >> str1;
	cin >> str2;
	
	int arr1[27]={0};
	int arr2[27]={0};
	
	for(int i=0; i<str1.size();i++){		
		arr1[str1[i]-'a']++;	
	}
    
	for(int i=0; i<str2.size();i++){		
		arr2[str2[i]-'a']++;
	}
    
	int ans=0;
	int tmp;
	
	for(int i=0; i<26; i++){
		tmp = arr1[i]-arr2[i];		
		if(tmp >0){
			ans+=tmp;
		}else{
			ans+=(-tmp);
		}
	}
	cout << ans;
	return 0;
}

 

 

 

 

출처 : https://www.acmicpc.net/problem/1919

 

1919번: 애너그램 만들기

두 영어 단어가 철자의 순서를 뒤바꾸어 같아질 수 있을 때, 그러한 두 단어를 서로 애너그램 관계에 있다고 한다. 예를 들면 occurs 라는 영어 단어와 succor 는 서로 애너그램 관계에 있는데, occurs

www.acmicpc.net

 

반응형

+ Recent posts