백준 1032 - 명령 프롬포트
문제링크
문제 접근
- 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