반응형
https://www.acmicpc.net/problem/16503
구현 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
1. 한 줄 수식 expr를 선언 후 입력받습니다.2. 이 후 ' '를 구분자로 문자열을 split해 list에 저장해줍니다.
📔 풀이과정
1, 3번째에 연산자가 고정되어 있으므로 맞춰서 사칙연산을 해줍니다.
우선순위는 두 가지 뿐입니다.
(a x b) + c 또는 a x (b + c)이므로 각각 res1, res2를 선언해 계산결과를 저장해줍니다.
📔 정답출력
res1, res2 중 최소 최대를 형식에 맞게 출력해줍니다.
📕 Code
C++
#include <bits/stdc++.h>
using namespace std;
string s;
vector <string> expr, op;
int res1, res2;
vector <string> split(string input, char delimiter){
vector <string> result;
stringstream ss(input);
string tmp;
while(getline(ss,tmp,delimiter)) result.push_back(tmp);
return result;
}
int getRes(string sa, string op, string sb){
int a = stoi(sa), b = stoi(sb);
if(op == "+") return a + b;
if(op == "-") return a - b;
if(op == "*") return a * b;
return a / b;
}
int main(){
getline(cin, s);
expr = split(s, ' ');
res1 = getRes(expr[0], expr[1], expr[2]);
res1 = getRes(to_string(res1), expr[3], expr[4]);
res2 = getRes(expr[2], expr[3], expr[4]);
res2 = getRes(expr[0], expr[1], to_string(res2));
cout << min(res1, res2) << '\n' << max(res1, res2);
}
Python
import sys
input = sys.stdin.readline
def getRes(sa, op, sb):
a = int(sa)
b = int(sb)
if(op == '+'): return a + b
if(op == '-'): return a - b
if(op == '*'): return a * b
return -1*(abs(a)//abs(b)) if a*b < 0 else a//b
expr = input().split()
res1 = getRes(expr[0], expr[1], expr[2]);
res1 = getRes(str(res1), expr[3], expr[4]);
res2 = getRes(expr[2], expr[3], expr[4]);
res2 = getRes(expr[0], expr[1], str(res2));
print(min(res1, res2))
print(max(res1, res2))
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Implementation' 카테고리의 다른 글
(C++, Rust) - 백준(BOJ) 23803 : 골뱅이 찍기 - ㄴ (0) | 2022.09.01 |
---|---|
(C++, Python) - 백준(BOJ) 15818 : 오버플로우와 모듈러 (0) | 2022.08.30 |
(Rust) - 백준(BOJ) 21312 : 홀짝 칵테일 (0) | 2022.08.26 |
(Python) - 백준(BOJ) 14579 : 덧셈과 곱셈 (2) | 2022.08.23 |
(Rust) - 백준(BOJ) 16483 : 접시 안의 원 (0) | 2022.08.22 |