본문 바로가기

백준

백준1032 - 명령 프롬프트

https://www.acmicpc.net/problem/1032

 

1032번: 명령 프롬프트

첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은 알파벳과 "." 그리고 "?"로만 이루어져 있다.

www.acmicpc.net

자료형의 갯수도 적고 주어진 문자열의 최대 길이도 작아서 쉽게 푼 문제다. 문제에서 입력한 모든 문자열의 길이는 같다고 주었기 때문에 입력한 문자열을 모두 서로 비교한다. 서로 다른 문자열에 비교를 통하여 다른 문자가 하나라도 있다면 해당 비교한 위치에 ?를 넣고 모두 같은 문자면 해당 비교 위치에 같은 문자를 넣는 방식으로 구현하였다. 

 

#include <iostream>
#include <string>
#include <vector>
using namespace std;

string check; //답

//문자열을 서로 비교하는 함수
void compare(string a, string b) {
	int num = a.size();
	for (int i = 0; i < num; i++) {
		if (a[i] == b[i] && check[i] != '?') { //같은 문자고 해당위치가 ?가 아니라면
			check[i] = a[i]; //해당 같은 문자를 입력
		}
		else { //두 조건에 한개라도 어긋나면
			check[i] = '?'; //?를 입력
		}
	}
}

int main() {
	vector<string> v; //문자열의 정보를 담을 공간
	int n; //자료형의 갯수
	

	cin >> n;
	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;
		v.push_back(s);
	}

	check = v[0]; //처음에는 맨 앞에 단어를 check로 설정하여 check의 길이를 주어진 입력과 같게 한다.
	
	//n개를 비교하는 과정
	for (int i = 0; i < v.size() - 1; i++) { 
		compare(v[i], v[i + 1]); //size - 1을 한 이유
	}

	cout << check;
}

'백준' 카테고리의 다른 글

백준10546 - 배부른 마라토너  (1) 2019.07.21
백준3184 - 양  (0) 2019.07.20
백준1735 - 최단경로  (0) 2019.07.19
백준6118 - 숨바꼭질  (0) 2019.07.18
백준5639 - 이진 검색 트리  (0) 2019.07.18