-
Notifications
You must be signed in to change notification settings - Fork 2
24-Seol-Munhyeok #85
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
24-Seol-Munhyeok #85
Conversation
|
κ°λ¨ν΄ 보μ΄λλ° μμ΄ κ½€λ κ°λ λ¬Έμ μλ€μ... μ λ νμ΄νλ ν° κ³¨μλ λ¬Ένλκ³Ό λΉμ·νμ΅λλ€. μ°μ°μ μ°μ μμλ₯Ό κ°λ¨ν μ¬κ·ν¨μλ‘ λ½μ μ€ λ€μ, ν΄λΉ μ°μ μμμ λν΄ κ³μ°λ κ°μ μ΄μ©ν΄ answerλ₯Ό κ°±μ ν΄λκ°λ λ°©μμ λλ€. λ€λ§ μ€νμ μ¬μ©ν΄μ μ€μ μ°μ°μ νλ λΆλΆμμ μ½κ° λΉν¨μ¨μ μΈ λΆλΆμ΄μλ..? μΆμ λΆλΆμ΄ ν μ°μ°μμ λν΄ μ°μ°μ λλΈ ν, μμ 벑ν°λ₯Ό μ΄μ©ν΄ λ€μ μ°μ°μλ₯Ό μν μΈν μ ν΄μ£Όλ λΆλΆμ΄ μλλ° μκ°ν κ±Έ μ λΆ κ΅¬νν΄λ³΄λ reverseλ while(!empty)κ° λ무 λ§μ΄ μ¬μ©λλλΌκ΅¬μ. μκ° μ΄κ³Όλ₯Ό κ°μνκ³ μ μΆνλλ°, μΌλ¨ μ λ΅μ λ°κΈ΄ νμ΅λλ€. λμ€μ λ μ΅μ νν μ μλ λΆλΆμ΄ μλμ§, κΉλν λ‘μ§μ΄ μλμ§ κ³ λ―Όν΄λ΄μΌν κ² κ°μ΅λλ€. λ νλ λλ μ μ next_permutationμ λν΄μ κ° μ‘κ³ κ³΅λΆνλ μκ°μ κ°μ Έλ΄μΌκ² λ€κ³ λκΌμ΅λλ€. μ½λ©ν μ€νΈμμ μμ΄ / μ‘°ν©λ‘ λ¬Έμ κ° κ½€λ μμ£Ό λ±μ₯νλ κ² κ°μλ°, κ·Έλλ§λ€ μ¬κ·λ‘ μ§κΈ΄ νμ§λ§ μ¬κ° λ²κ±°λ‘μ΄ κ² μλλλΌκ΅¬μ. ν° ν 4κ°μ§(μ‘°ν© / μμ΄ / μ€λ³΅μ‘°ν© / μ€λ³΅μμ΄)μ λν΄μλ§μ΄λΌλ ν¨μλ‘ μ§λ λ²μ 미리 μ°μ΅ν΄ λ¬μΌκ² μ΅λλ€. μ μΆ μ½λμ λλ€. κ³ μνμ ¨μ΄μ! μμ μ΅λν / c++#include <bits/stdc++.h>
using namespace std;
long long calc(long long a, long long b, char op)
{
if (op == '+') return a + b;
if (op == '-') return a - b;
return a * b;
}
// κ³μ°
long long evaluate(vector<long long> nums, vector<char> ops, vector<char> priority)
{
for (char p : priority)
{
stack<long long> stnum;
stack<char> stop;
stnum.push(nums[0]);
for (int i = 0; i < ops.size(); i++)
{
if (ops[i] == p)
{
long long a = stnum.top();
stnum.pop();
long long b = nums[i + 1];
stnum.push(calc(a, b, ops[i]));
}
else
{
stnum.push(nums[i + 1]);
stop.push(ops[i]);
}
}
// λ€μ μ°μ°μ μν΄ μ΄κΈ°ννκΈ°
nums.clear();
ops.clear();
vector<long long> tempnum;
vector<char> tempop;
while (!stnum.empty())
{
tempnum.push_back(stnum.top());
stnum.pop();
}
reverse(tempnum.begin(), tempnum.end());
while (!stop.empty())
{
tempop.push_back(stop.top());
stop.pop();
}
reverse(tempop.begin(), tempop.end());
nums = tempnum;
ops = tempop;
}
return nums[0];
}
vector<char> operators = {'+', '-', '*'};
vector<bool> used(3,false);
long long answer = 0;
vector<char> cur;
// μ°μ°μ μμ΄
void permute(vector<long long>& nums, vector<char>& ops)
{
if (cur.size() == 3)
{
long long res = evaluate(nums, ops, cur);
answer = max(answer, abs(res));
return;
}
for (int i = 0; i < 3; i++)
{
if (!used[i])
{
used[i] = true;
cur.push_back(operators[i]);
permute(nums, ops);
cur.pop_back();
used[i] = false;
}
}
}
long long solution(string expression)
{
vector<long long> nums;
vector<char> ops;
string num = "";
// μ«μ/μ°μ°μ λΆλ¦¬
for (char c : expression)
{
if (isdigit(c))
{
num += c;
}
else
{
nums.push_back(stoll(num));
num = "";
ops.push_back(c);
}
}
nums.push_back(stoll(num));
permute(nums, ops);
return answer;
}
|
|
0μ΄ κ°λ₯νλ€λ κ²κ³Ό long long νμ
μΈ κ²μ λμ³μ μ½μ§μ μ€λνλ€μ. intλ‘λ λΆμ‘±ν μ μλ€λ κ²μ νμ λͺ
μ¬ν΄μΌκ² μ΅λλ€. μμ μ΅λν#include<bits/stdc++.h>
using namespace std;
long long calc(long long a, long long b, char c) {
if(c == '*') return a * b;
if(c == '+') return a + b;
if(c == '-') return a - b;
}
long long solution(string str) {
long long res = 0;
vector<long long> nv; // μ«μ
vector<char> cv;
set<char> cs; // μ°μ° κΈ°νΈ μ§ν©
long long num = 0;
for(int i = 0; i < str.size(); i++) {
if(str[i] >= '0' && str[i] <= '9') {
if(num == 0 && str[i] == '0') {
nv.push_back(0);
continue;
}
else num = num * 10 + (str[i] - '0');
}
else {
if(num > 0) {
nv.push_back(num);
num = 0;
}
if(str[i] == '*' || str[i] == '-' || str[i] == '+') {
cs.insert(str[i]);
cv.push_back(str[i]);
}
}
}
nv.push_back(num);
vector<char> tv;
for(auto c : cs) {
tv.push_back(c);
}
do {
auto tnv = nv;
auto tcv = cv;
for(int i = 0; i < tv.size(); i++) {
char c = tv[i];
int f = tcv.size();
for(int j = 0; j < f; j++) {
if(tcv[j] == c) {
long long tn = calc(tnv[j], tnv[j + 1], c);
tnv[j] = tn;
tnv.erase(tnv.begin() + j + 1);
tcv.erase(tcv.begin() + j);
f--;
j--;
}
}
}
res = max(res, abs(tnv[0]));
} while(next_permutation(tv.begin(), tv.end())); // μ°μ°μ μ°μ μμ μ νκΈ°
return res;
}
|
π λ¬Έμ λ§ν¬
μμ μ΅λν
https://school.programmers.co.kr/learn/courses/30/lessons/67257
βοΈ μμλ μκ°
35λΆ
β¨ μλ μ½λ
μ°μ°μ λ³ μ°μ μμλ₯Ό permutationsλ₯Ό ν΅ν΄μ λͺ¨λ μμ΄μ ꡬνκ³ κ·Έ μμμ λ°λΌμ μ€μ λ‘ κ³μ°μ μνν΄μ μ΅λκ°μ μ°ΎμΌλ©΄ λλ λ¬Έμ μ λλ€.
λ¬Έμμ΄λ‘ λ μμμ μ΄λ»κ² κ³μ°ν μ§λ λ€μν λ°©λ²μ΄ μμ κ±° κ°μλ° μ λ μ€νμ μ¬μ©νμ΅λλ€.
μλμ½λλ‘ λνλ΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
π μλ‘κ² μκ²λ λ΄μ©
νμ΄μ¬μ
eval()μ΄λΌλ λ¬Έμμ΄λ‘ λ μμμ λ°λ‘ κ³μ°ν μ μλ ν¨μκ° μμ΄μ μ§μ μ°μ μμμ λ§μΆ° κ΄νΈλ₯Ό μ£Όμ νκ³eval()λ‘ κ³μ°νλ λ λ¨Ήμ΄ κ°λ₯ν©λλ€.κ·Έλ°λ° λμ ν μ€μ μμλ λͺ» λ μ¬λ¦΄ νμ΄κ°μ΅λλ€... μΌλ¨
eval()μ΄λΌλ ν¨μκ° μλ€λ κ²λ§ κΈ°μ΅νλ©΄ μ’μ κ±° κ°μ΅λλ€.μ°Έκ³ λ‘ μ€λ¬΄μμλ
eval()ν¨μλ 보μ λ¬Έμ λ‘ μ°μ§ μλλ€κ³ ν©λλ€.