프로그래밍/알고리즘 PS

[C++] BOJ 1032번: 명령 프롬프트

코딩 제이티 2024. 3. 28. 21:05

학교에서 진행하는 수업에서 공유받은 알고리즘 문제를 풀어보았다. 문제의 난이도는 브론즈 1이다.

문제 링크

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

문제 분석

해당 문제는 문자열의 공통된 부분과 다른 부분을 구분지어 문자열의 공통된 부분은 문자로, 다른 부분은 ?로 표현하는 문제이다. 입출력 예시는 아래와 같다.

입력

3
config.sys
onfig.inf
configures

출력

config????

문제 풀이

문자열 중 하나를 골라 answer 변수에 담아주고 각 문자열 별로 아래의 과정을 반복한다.

  1. answer 변수의 글자와 문자열 사이에 다른 글자가 있는지 확인한다.
  2. answer 변수의 글자와 문자열 사이에 다른 글자가 있는 경우, 해당 index에 대해 answer 변수의 글자를 ?로 바꾸어준다.

입력받은 모든 문자열에 대해 위의 과정을 반복한다.

전체 코드

위의 작업을 종합해 작성한 전체 코드는 다음과 같다.

#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    vector<string> v;
    int N;
    string input;

    cin >> N;

    for (int i = 0; i < N; i++)
    {
        cin >> input;
        v.push_back(input);
    }

    string answer = input;
    int answer_size = answer.size();

    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < answer_size; j++)
        {
            if (answer[j] != v[i][j])
                answer[j] = '?';
        }
    }

    cout << answer << '\n';

    return 0;
}

 

결과