백준 1032 - 명령 프롬포트

1 minute read

문제링크

문제 접근

  • vector container 를 이용해서 데이터를 2차원 배열의 형태로 접근한다.
  • 2차원 배열의 데이터에서 행은 독립된 문자열을, 열은 각각 문자열의 첫번째, 두번째, … 마지막번째 문자를 나타낸다.
  • 첫번째 문자열의 문자를 기준으로 잡는다. 첫번째 문자열에 속해 있는 문자들을 같은 인덱스에 속해있는 다른 문자열의 문자들과 비교한다. 만약, 하나라도 다른게 있다면 해당 위치의 문자는 ‘?’가 된다.
  • 위의 과정을 반복해서 새로운 문자열을 만들어 출력한다.

의사코드(pseudo-code)

- cin >> n
- vector<string> file_name(n+1)
- for i=0 to n-1
	- cin >> str
	- file_name[i] = str
- len = file_name[0].length
- for i=0 to len-1
	- ch = file_name[0][i]
	- chk = true
	- for j=1 to n-1
		- if ch != file_name[j][i]
			- chk = false
			- break
	- if chk == true
		- file_name[n].push_back(ch)
	- else
		- file_name[n].push_back('?')
- cout << file_name[n]
	

소스코드 및 분석

전체 코드

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

int main()
{
	int n;
	cin >> n;
	vector<string> file_name(n + 1);

    // 데이터 입력
	for (int i = 0; i < n; i++) {
		string str;
		cin >> str;
		file_name[i] = str;
	}

    // 2차원 배열의 열에 해당
	int len = file_name[0].length();

    // 문자 비교 반복문
	for (int i = 0; i < len; i++) {
		char ch = file_name[0][i];
		bool chk = true;
		for (int j = 1; j < n; j++) {
			if (ch != file_name[j][i]) {
				chk = false;
				break;
			}
		}
		if (chk)
			file_name[n].push_back(ch);
		else
			file_name[n].push_back('?');
	}
	cout << file_name[n] << endl;
}
  • file_name[n] 문자열에는 문자비교의 결과를 담는다.
  • 문자 비교 반복문을 살펴보면, 변수 ch는 첫번째 문자열의 i번째 문자를 담는다. (0번째부터 시작)
  • 변수 chk는 다른 문자를 찾는 즉시 반복문을 탈출하기 위함이다.(연산을 줄이기 위해)
  • file_name 데이터를 초기화할 때 file_name[n] 문자열은 NULL 문자 하나만 할당된다. 따라서, 문자열이 아닌 문자를 대입하기 위해서는 push_back 메서드를 호출하여야한다.

Leave a comment