[백준 1032] 명령 프롬프트 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
여러 개의 파일 이름이 주어졌을 때, 모든 파일에서 공통적으로 나타나는 패턴을 추출하는 문제입니다.
- 각 파일 이름은 같은 길이를 가지며, 총
N
개의 파일이 입력으로 주어집니다. - 각 파일 이름의 같은 위치에 있는 문자가 모두 동일하면 그 문자를 출력합니다.
- 하나라도 다른 문자가 있다면, 해당 위치에는 물음표(
?
)를 출력합니다. - 즉, 공통된 접두어나 접미사를 찾는 것이 아니라, 각 인덱스별 문자 일치 여부를 따져서 문자열을 만들어야 합니다.
접근법
- 첫 번째 파일 이름을 기준 문자열로 사용합니다.
- 두 번째 파일부터 하나씩 비교하면서, 같은 위치에 있는 문자가 서로 다르면 해당 위치를
?
로 바꿉니다. - 이 과정을 반복하면 모든 파일에 대해 공통적으로 일치하는 문자만 남고, 나머지는
?
가 됩니다. - 마지막으로 완성된 문자열을 출력하면 됩니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
class Program {
static void Main() {
int n = int.Parse(Console.ReadLine());
string[] files = new string[n];
for (int i = 0; i < n; i++)
files[i] = Console.ReadLine();
char[] result = files[0].ToCharArray();
for (int i = 1; i < n; i++) {
for (int j = 0; j < result.Length; j++) {
if (result[j] != files[i][j])
result[j] = '?';
}
}
Console.WriteLine(new string(result));
}
}
[ C++ ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <bits/stdc++.h>
using namespace std;
typedef vector<string> vs;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int cntF; cin >> cntF;
vs files(cntF);
for (int i = 0; i < cntF; i++)
cin >> files[i];
string ans = files[0];
for (int i = 1; i < cntF; i++) {
for (size_t j = 0; j < ans.size(); j++) {
if (ans[j] != files[i][j]) ans[j] = '?';
}
}
cout << ans << "\n";
return 0;
}