반응형
입력된 문자열 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
반응형
'문제풀기' 카테고리의 다른 글
[백준/BOJ] 출력 10171/10172번 문제, 개/고양이 C++ 풀이 (0) | 2021.12.13 |
---|---|
[MySQL] 프로그래머스 SQL 고득점 kit level1, SELECT 문 (0) | 2021.11.03 |
[프로그래머스] 77484 로또의 최고 순위와 최저 순위, C++ 풀이 (0) | 2021.10.03 |
[백준/BOJ] 배열 1475번 문제, 방 번호 C++ 풀이 (0) | 2021.08.07 |
비쥬얼 스튜디오 설치 없는 온라인 컴파일러 사이트 추천, ideone (0) | 2021.08.06 |
[백준/BOJ] 배열 10807번 문제, 개수 세기 C++ 풀이 (0) | 2021.07.28 |