5355번: 화성 수학 (acmicpc.net)

5355번: 화성 수학

겨울 방학에 달에 다녀온 상근이는 여름 방학 때는 화성에 갔다 올 예정이다. (3996번) 화성에서는 지구와는 조금 다른 연산자 @, %, #을 사용한다. @는 3을 곱하고, %는 5를 더하며, #는 7을 빼는 연산

www.acmicpc.net


문제 자체는 직관적이고 쉬웠으나 c++의 새로운 개념들을 공부하면서 문제를 푸느라 시간이 걸렸다.

#include <iostream>;
#include <stdio.h>;
#include <string>;
#include <vector>;
using namespace std;

int main() 
{
    double num, t;
    string oper;
    cin >> t;
    vector<double> ansVec;

    for(int i = 0; i < t; i++)
    {
        cin >> num;
        getline(cin, oper);

        for (int j = 0; j < oper.size(); j++) 
        {
            if (oper[j] == '@') num *= 3;
            else if (oper[j] == '%') num += 5;
            else if (oper[j] == '#') num -= 7;
        }
        
        ansVec.push_back(num);
    }

    for (int i = 0; i < ansVec.size(); i++) {
        printf("%.2f\n", ansVec[i]);
    }    
}


개인적으로 입력과 출력을 분리시켜서 기능을 구현하는 것을 선호하는데 이럴 때 필연적으로 C#의 컬렉션 기능이 필요하다. 지금까지 C++로 문제를 해결할 때는 동적배열을 사용하였는데 배열의 갯수를 반환하거나 그 외 부가적인 기능을 쓰는게 너무 불편하여 벡터 사용법을 찾아보았다. 헤더파일 vector를 참조해야 하며 문자열 배열과 같은 방식(변수명.size())으로 배열의 갯수를 반환 받을 수 있는 점이 사용하기 편했다.

Vector
헤더파일 <vector>
선언 : vector<타입> 변수명
배열의 갯수 : 변수명.size()

getline() -> 띄어쓰기를 무시하고 문자열을 추가해주면서 입력 중 엔터를 사용하면 문자열의 갯수를 미리 정하지 않아도 자동으로 값이 할당된다. 헤더파일 <String>을 선언해야한다.

'Algorithm > C++ BOJ' 카테고리의 다른 글

C++) [BOJ] 2935 소음  (0) 2023.02.19
C++) [BOJ] 2675 문자열 반복  (0) 2023.02.11
C++) [BOJ] 2914 저작권  (0) 2023.02.10
C++) [BOJ] 11022 A+B - 8  (0) 2023.02.02
C++) [BOJ] 11021 A+B - 7  (0) 2023.01.30

+ Recent posts