반응형
문제 링크: https://www.acmicpc.net/problem/1969
문제만 이해하면 그리디적인 개념으로 쉽게 풀 수 있는 문제였습니다.
모든 문자열에서 인덱스값들중 가장 큰 값만을 결과문자열로 저장하고 그값과 달랐던 값을 카운트해서 결과값을 도출하면 됩니다.
문제 조건에서 사전순으로 가장 앞서는 것을 출력한다. 라는 규칙을 주의해서 풀어 주시면 됩니다.
아스킷 코드값을 참조하며 arr[word[j][i] - 'A']++; 의 의미가 무엇인지, 그리고 arr[26]인지 생각해보세요.
#include <iostream>
#include <string>
using namespace std;
int n, m;
string word[1000];
int result_sum = 0;
string result;
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++)
cin >> word[i];
for (int i = 0; i < m; i++) {
int arr[26] = { 0 }, maxed = 0, max_index = 0;
for (int j = 0; j < n; j++) {
arr[word[j][i] - 'A']++;
}
for (int j = 0; j < 26; j++) {
if (maxed < arr[j]) maxed = arr[j],max_index = j;
}
result_sum += n - maxed;
result += max_index + 'A';
}
cout << result << endl;
cout << result_sum << endl;
}
화이팅:)
반응형
'알고리즘 > 그리디 알고리즘' 카테고리의 다른 글
[백준] 1092-배(C++) (0) | 2020.05.05 |
---|---|
[백준] 10825-국영수(C++) (0) | 2020.03.13 |
[백준] 8980-택배(C++) (0) | 2020.03.05 |
[백준] 2437-저울(C++) (0) | 2020.03.03 |
[백준] 1783-병든 나이트(C++) (0) | 2020.03.02 |