#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
void GetNum(const string & str, vector<int> & numList)
{
string element;
for (const auto & data : str)
{
if (data == 43 || data == 45)
{
numList.push_back(stoi(element));
element = data;
}
else element += data;
}
numList.push_back(stoi(element));
}
int main()
{
string input;
cin >> input;
vector<int> numList;
GetNum(input, numList);
int result = 0;
bool transSwitch = false;
for (auto & data : numList)
{
if (data < 0) transSwitch = true;
if (transSwitch == true && 0 < data) data *= -1;
result += data;
}
cout << result;
return 0;
}
내가 푼 코드는 이러하다.
그리디 유형에 속해 있어서 그리디적으로 생각해보려고 했다.
수식 맨 처음부터 읽으면서 당장 '-'가 나온다면 그 후에 나오는 +는 모두 -로 바꾸어 계산하였다
input을 하나하나 읽으면서 동시에 result로 계산하는 방법이 더 나았지만
길이제한없는 연속된 정수를 따로 저장해보고 싶어서 저장하는 함수를 따로 구현하였다.
근데 다른 사람이 푼 코드가 충격이였다
#include <stdio.h>
int main()
{
char cmd;
int n,s,m=0;
for(scanf("%d",&s);scanf("%c",&cmd),cmd!=10;)
{
if(cmd=='-')m=1;
scanf("%d",&n);
if(m)s-=n;
else s+=n;
}
printf("%d",s);
return 0;
}
ㅋㅋㅋㅋ보면서 대단하다고 생각했다
다음에 기회가 된다면 응용해 봐야겠다
'코딩 테스트 > 알고리즘 풀이' 카테고리의 다른 글
[백준 - 1715] 카드 정렬하기 (0) | 2022.07.28 |
---|---|
[백준 - 2751] 수 정렬하기2 (0) | 2022.07.27 |
[백준 - 10610] 30 (0) | 2022.07.27 |
[백준 - 2217] 로프 (0) | 2022.07.23 |
[HackerRank] Time Conversion (0) | 2022.06.05 |