Coding Problems(백준)/Cpp

백준 1032번 명령 프롬프트 C++ 풀이

곰코딩 2021. 10. 24. 15:10

곰코딩 블로그 C++ 문제풀이 로고

설명

입력: int형 숫자, string 문자(수는 가변적이나, 문자열의 길이는 고정)

출력: string 문자열

입력으로는 파일의 이름들이 들어오고 파일의 이름을 비교한 후 중복되는 부분을 '?'로 바꿔서 출력하는 아주 간단한 문제네요.

링크

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

 

1032번: 명령 프롬프트

첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은

www.acmicpc.net

 

 

문제 해설

객체 지향으로 문제를 풀어 보았는데요

전체적인 코드는 다음과 같습니다.


#include <iostream>
#include <string>
#include <vector>

class CCmdSolver
{
private:
    int32_t iCaseNum;
    std::vector<std::string> dirVec;

public:
    CCmdSolver();
    ~CCmdSolver();

    void userInput();
    void compareStrFn();
    std::string compareStrInnerFn(std::string str1, std::string str2);

};

CCmdSolver::CCmdSolver() {
    // constructor(생성자)
};

CCmdSolver::~CCmdSolver() {
    // destructor(소멸자)
};

// 사용자 입력 처리 부분
void CCmdSolver::userInput() {
    std::cin.tie(NULL);
    std::ios::sync_with_stdio(false);

    std::string inputStr = "";
    std::cin >> iCaseNum;

    for (int i = 0; i < iCaseNum; i++)
    {
        std::cin >> inputStr;
        dirVec.push_back(inputStr);
    }
};

// 비교 및 결과 출력
void CCmdSolver::compareStrFn() {

    std::string tempStr = dirVec.at(0);

    for (int i = 1; i < iCaseNum; i++)
    {
        tempStr = compareStrInnerFn(tempStr, dirVec.at(i));
    }

    std::cout << tempStr;
};

// 내부에서 사용하는 비교함수
std::string CCmdSolver::compareStrInnerFn(std::string str1, std::string str2) {

    std::string retVal;

    for (int i = 0; i < str1.length(); i++)
    {
        if (str1.at(i) == str2.at(i))
        {
            retVal.push_back(str1.at(i));
        }
        else
            retVal.push_back('?');
    }

    return retVal;
}



int main()
{
    CCmdSolver* cCmdSolver = new CCmdSolver();
    cCmdSolver->userInput();
    cCmdSolver->compareStrFn();
    delete cCmdSolver;
}

원래 제대로된 객체지향이면 namespace로 class를 묶고 출력부분도 따로 분리해야해요:)

 

코드를 간단하게 설명드리자면

 

void userInput() : 반복문으로 사용자에게 string을 입력받고 dirVect에 저장합니다.

void compareStrFn() : 입력된 숫자보다 1작게 반복문을 돌며 compareStrInnerFn()에 비교할 문자열 2개를 인자로 전달합니다.

std::string compareStrInnerFn(std::string str1, std::string str2) : compareStrFn()으로 부터 받은 매개변수를 비교합니다. 만일 동일한 문자면 동일한 문자를 다른 문자면 '?'를 retVal에 넣습니다.

 

풀이 코드 링크

https://github.com/dhk1999/coding_problems/blob/main/baekjoon/cpp/problem_1032.cpp

 

GitHub - dhk1999/coding_problems: 코딩 문제 모음

코딩 문제 모음. Contribute to dhk1999/coding_problems development by creating an account on GitHub.

github.com