Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Union-find
- 코딩테스트
- BaekJoon
- 코테
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 보석쇼핑
- BFS
- Smilegate
- 알고리즘
- 카카오
- 카카오인턴
- c++
- 스마일게이트
- 유니온파인드
- 서버개발캠프
- 소감
- 백준
- Algorithm
- 투포인터
- 중반부
- 삼성 #코테 #2020상반기 #c++
- 1편
- 식단
- LIS #Algorithm #요소추적
Archives
- Today
- Total
짱아의 개발 기록장
2020 카카오 인턴 코딩 테스트 - 2번. 수식 최대화(c++) 본문
반응형
연산자의 종류를 exp벡터에 넣어주고, 연사자의 위치를 차례대로 location벡터에 넣어준다.
이후, next_permutation으로 exp벡터에 있는 연산자들의 우선순위의 경우 수를 구한다.
do while문 안에서는 임시 벡터를 만들어서 우선순위에 해당되는 연산들은 먼저 계산을 해주고 없애고 하는 식으로 계산을 해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
long long solution(string expression) {
long long answer = 0;
vector<long long> num;
vector<char> exp, location; // 연산자 종류, 연산자 위치
string s = "";
for(int i=0; i<expression.size(); i++){
if(expression[i]=='+' || expression[i]=='-' || expression[i]=='*'){
num.push_back(stoi(s));
s = "";
if(find(exp.begin(), exp.end(), expression[i]) == exp.end()){
exp.push_back(expression[i]);
}
location.push_back(expression[i]);
}else{
s += expression[i];
}
}
num.push_back(stoi(s));
sort(exp.begin(), exp.end());
do {
// 매번 계산한 위치를 지우고 하는 작업이 필요하기 때문에 임시 벡터가 필요하다.
vector<char> tmp_loc = location;
vector<long long> tmp_num = num;
for(int i=0; i<exp.size(); i++){
for(int j=0; j<tmp_loc.size(); j++){
if(exp[i]==tmp_loc[j]){
if(exp[i]=='+'){
tmp_num[j] = tmp_num[j]+tmp_num[j+1];
} else if(exp[i]=='-'){
tmp_num[j] = tmp_num[j]-tmp_num[j+1];
} else{
tmp_num[j] = tmp_num[j]*tmp_num[j+1];
}
// 계산한 부분 지우기
tmp_num.erase(tmp_num.begin()+j+1);
tmp_loc.erase(tmp_loc.begin()+j);
j--;
}
}
}
// 최대값 갱신
answer = max(answer, abs(tmp_num[0]));
} while(next_permutation(exp.begin(), exp.end()));
return answer;
}
|
cs |
참고 자료
반응형
'Algorithm > 카카오 기출' 카테고리의 다른 글
2020 KAKAO BLIND RECRUITMENT - 괄호 변환(c++) (0) | 2021.03.04 |
---|---|
2020 KAKAO BLIND RECRUITMENT - 문자열 압축(c++) (0) | 2021.03.04 |
프로그래머스. 징검다리 건너기(c++) / 이분탐색 (0) | 2021.02.25 |
2020 카카오 인턴 코딩 테스트 - 4번. 경주로 건설(c++) (0) | 2020.07.21 |
2020 카카오 인턴 코딩 테스트 - 3번. 보석쇼핑(c++) (0) | 2020.07.20 |
Comments