본문 바로가기

코딩테스트 문제풀이

[백준 1969] 문제 풀기 (그리디)

#include <stdio.h>
#include <string>
#include <iostream>

using namespace std;

int main() {
	int N, M;
	cin >> N;
	cin >> M;

	string* str = new string[N];
	char ch_n;
	char ch_o = NULL;
	int cnt_n = 0;
	int cnt_o = -1;		//첫번째 값은 무조건 비교하기 위함.

	string sol = "";
	int result = 0;

	for (int i = 0; i < N; i++) {
		cin >> str[i];
	}

	for (int i = 0; i < M; i++) {
		for (int j = 0; j < N; j++) {
			ch_n = str[j][i];
			if (ch_n == ch_o) continue;
			for (int k = 0; k < N; k++) {
				if (ch_n == str[k][i] && j!=k) {
					cnt_n++;
				}
			}
			/*cout << "ch_n is " << ch_n << endl;
			cout << "cnt_n is " << cnt_n << endl;*/
			if (cnt_n > cnt_o) {
				ch_o = ch_n;
				cnt_o = cnt_n;
			}
			else if (cnt_n == cnt_o) {
				if (ch_n < ch_o) {
					ch_o = ch_n;
					cnt_o = cnt_n;
				}
			}
			ch_n = NULL;
			cnt_n = 0;
		}
		sol += ch_o;
		//cout << "cnt_o is " << cnt_o << endl;
		result += N - (cnt_o + 1);
		//cnt_o는 자신과 같은 값을 누적한 것이므로 줄 수 - (자기 + 같은값)으로 계산하면 자신과 다른 값들의 개수를 알 수 있다.
		ch_o = NULL;
		cnt_o = -1;
		//한 라인 비교 끝.
	}
	cout << sol << endl;
	cout << result;
	delete[] str;
}

25분 6초