728x90
[백준알고리즘] 1032번: 명령 프롬프트 -C++
문자열 정규 표현식과 관련된 문제다.
실제로 문제에서 주어진 것처럼 '?'는 정규식에서 '임의의 한 글자'를 의미한다.
잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다
입력이 들어오는 여러 문자열을 받은 뒤, 첫 문장을 기준으로 비교를 했다.
각 위치마다 모든 문자열에 같은 문자(\(character\))가 들어간다면 해당 문자를 추가해주었고, 그렇지 않다면 '?'를 추가해주었다.
쉬운 문제였기 때문에 설명할 것이 딱히 없는 것 같다..
맨 아래 코드 중 일부다. 이 코드는 각 위치마다 비교하다가 다른 문자가 삽입된 것을 확인해 \(answer\)라는 문자열에 '?'가 추가되었다면, answer.size() == i + 1
이 되는 것을 이용했다. size는 1부터 시작하기 때문에 0부터 시작하는 인덱스와는 1 차이가 나기 때문이다. 따라서, answer.size() == i
인 경우는 \(answer\)라는 문자열에 '?' 문자가 추가되지 않은 것이기 때문에 모두 같은 문자를 같은 위치에서 갖고 있는 것이고, 그렇기 때문에 해당 문자를 추가해야 하는 것이다.
if (i == answer.size())
answer += character;
아래는 전체 C++ 코드다.
#include <iostream>
#include <vector>
#include <string>
void solve(void);
int main(void)
{
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
solve();
}
void solve(void)
{
int n;
std::cin >> n;
std::vector<std::string> dictionary(n);
for (int i = 0; i < n; i++)
std::cin >> dictionary[i];
int len = dictionary[0].size();
std::string answer = "";
for (int i = 0; i < len; i++)
{
const char character = dictionary[0][i];
for (auto d : dictionary)
if (character != d[i])
{
answer += '?';
break;
}
if (i == answer.size())
answer += character;
}
std::cout << answer;
}
728x90
'algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 1890번: 점프 -C++ (0) | 2021.02.19 |
---|---|
[백준알고리즘] 1038번: 감소하는 수 -C++ (0) | 2021.02.15 |
[백준알고리즘] 1014번: 컨닝 -C++ (0) | 2021.02.13 |
[백준알고리즘] 1026번: 보물 -C++ (0) | 2021.02.12 |
[백준알고리즘] 1027번: 고층 건물 -C++ (0) | 2021.02.11 |