https://school.programmers.co.kr/learn/courses/30/lessons/120907
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
bool Cal(int n1, int n2, int ans, char op)
{
switch (op)
{
case '+':
return (n1 + n2 == ans) ? true : false;
case '-':
return (n1 - n2 == ans) ? true : false;
case '*':
return (n1 - n2 == ans) ? true : false;
case '/':
return (n1 - n2 == ans) ? true : false;
}
}
vector<string> solution(vector<string> quiz) {
vector<string> answer;
for (int i = 0; i < quiz.size(); i++)
{
int pos = quiz[i].find(' ');
string num1 = quiz[i].substr(0, pos);
char op = quiz[i][pos + 1];
int pos2 = quiz[i].find(' ', pos+3);
string num2 = quiz[i].substr(pos + 3, pos2-(pos + 3));
string ans = quiz[i].substr(pos2 + 3);
int n1 = stoi(num1);
int n2 = stoi(num2);
int an = stoi(ans);
if (Cal(n1, n2, an, op))
answer.push_back("O");
else
answer.push_back("X");
}
return answer;
}
설명
문자열 벡터를 받아서 각 문자열에 담긴 식이 맞는지 틀린지 여부를 O와 X로 answer에 저장하는 것이다.
string 표준헤더에서 제공하는 string.find 와 string.substr, stoi 함수들을 이용하면 간단하게 해결할 수 있다.
먼저 for문을 돌며 각 문자열을 1개씩 확인한다.
int pos = quiz[i].find(' ');
string num1 = quiz[i].substr(0, pos);
첫번째 숫자를 구분하기 위한 코드이다.
string.find함수는 찾을 문자를 매개변수로 넣게 되면 처음부터 시작해서 매개변수로 넣은 문자를 찾고 그 위치를 반환해준다.
그리고 string.substr함수는 어떤 문자열에서 새로운 문자열을 만들어주는 함수이다.
ex) s = "abcde"
즉, string.substr(0,2) 이면 0번인덱스부터 2개의 문자를 새 문자열로 만들어달라는 뜻으로,
"ab" 가 반환된다.
따라서 위 코드는 처음 숫자를 num1에 저장한다.
char op = quiz[i][pos + 1];
pos는 공백을 가리키고 그 다음이 연산자이니 pos+1 번째를 op변수에 저장한다.
int pos2 = quiz[i].find(' ', pos+3);
string num2 = quiz[i].substr(pos + 3, pos2-(pos + 3));
마찬가지로 pos+3은 두번째 숫자가 시작하는 지점이다.
따라서 find함수로 pos+3부터 시작해서 ' ' 을 찾아달라고 한다.
substr의 두번째 인자는 두번째 숫자의 길이를 구하기 위함이다.
시작점은 pos+3 이고 종료지점은 pos2이기 때문에 거기까지 잘라서 문자열을 만든다.
string ans = quiz[i].substr(pos2 + 3);
마지막에 답부분을 ans문자열에 저장한다.
int n1 = stoi(num1);
int n2 = stoi(num2);
int an = stoi(ans);
stoi함수를 통해 각 문자열을 int형 변수에 저장한다.
bool Cal(int n1, int n2, int ans, char op)
{
switch (op)
{
case '+':
return (n1 + n2 == ans) ? true : false;
case '-':
return (n1 - n2 == ans) ? true : false;
case '*':
return (n1 - n2 == ans) ? true : false;
case '/':
return (n1 - n2 == ans) ? true : false;
}
}
Cal 함수를 만들어 식이 맞는지를 확인하고 참, 거짓을 반환해준다.
if (Cal(n1, n2, an, op))
answer.push_back("O");
else
answer.push_back("X");
따라서 마지막에 Cal 값에 따라 O, X 를 answer에 삽입해준다.
'알고리즘 > 프로그래머스 1단계' 카테고리의 다른 글
프로그래머스 - 평행 - C++ (0) | 2023.09.12 |
---|---|
프로그래머스 - 안전지대 - C++ (0) | 2023.09.11 |
프로그래머스 - 특이한 정렬 - C++ (0) | 2023.09.09 |
프로그래머스 - 다음에 올 숫자 - C++ (0) | 2023.09.08 |
프로그래머스 - 최빈값 구하기 - C++ (0) | 2023.09.07 |