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
- Synchronization
- 서버 호스팅
- Dijkstra Algorithm
- 프록시
- 동기화
- 클라우드 서버
- 다익스트라 알고리즘
- 세마포어
- 삼성 청년 SW 아카데미
- 프록시서버
- 최단 경로
- 호스팅이란?
- 싸피 합격
- 세마포어와 뮤텍스의 차이
- 플로이드 와샬
- 세마포어란?
- 싸피
- Proxy
- 뮤텍스란?
- 싸피 면접 후기
- 호스팅
- 플로이드 워셜
- Proxy Server
- 뮤텍스
- floyd-warshall
- SSAFY
- 세마포어와 뮤텍스
- 웹 호스팅
- 다익스트라
Archives
- Today
- Total
어제의 나보다 성장한 오늘의 나
[프로그래머스][Level2][Java] 수식 최대화 본문
programmers.co.kr/learn/courses/30/lessons/67257
코딩테스트 연습 - 수식 최대화
IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과
programmers.co.kr
문제풀이
먼저 숫자와 수식을 따로 저장하였다. 후에 조합을 통해 수식의 우선 순위를 정하였다.
후에 재귀의 깊이가 3이 되면 기존의 숫자와 수식을 저장했던것을 따로 max값을 구하기 위해 List를 복사한다.
우선순위에 해당 되는 operator에 앞과 뒤의 숫자를 calcul 함수를 통해 끝까지 계산하고 Math.max로 비교해서 max값을 갱신한다.
코드
import java.util.*;
class Solution {
List<Long> number = new ArrayList<>();
List<Character> operator = new ArrayList<>();
char[] SelectOper = new char[3];
boolean[] visited = new boolean[3];
char[] arrOper = {'-', '+', '*'};
long answer;
public long solution(String expression) {
String num = "";
for(int i=0; i<expression.length(); i++) {
char check = expression.charAt(i);
switch(check) {
case'-':
case'+':
case'*':
number.add(Long.parseLong(num));
num = "";
operator.add(check);
break;
default:
num += check;
if(i == expression.length()-1) number.add(Long.parseLong(num));
}
}
dfs(0);
return answer;
}
public void dfs(int cnt){
if( cnt == 3){
List<Long> tempNumber = new ArrayList<>();
List<Character> tempOper = new ArrayList<>();
for(int i=0; i<number.size(); i++) tempNumber.add(number.get(i));
for(int i=0; i<operator.size(); i++) tempOper.add(operator.get(i));
for(int i=0; i<SelectOper.length; i++){
for(int j =0; j<tempOper.size(); j++){
if(SelectOper[i] == tempOper.get(j)){
tempNumber.set(j, calcul(tempOper.get(j), tempNumber.get(j), tempNumber.get(j+1)));
tempNumber.remove(j+1);
tempOper.remove(j--);
}
}
}
answer = Math.max(Math.abs(tempNumber.get(0)), answer);
return;
}
for(int i=0; i<3; i++){
if(visited[i]) continue;
SelectOper[cnt] = arrOper[i];
visited[i] = true;
dfs(cnt+1);
visited[i] = false;
}
}
public long calcul (char oper, long num1, long num2){
long result = 0;
switch(oper){
case'-': result = num1 - num2; break;
case'+': result = num1 + num2; break;
case'*': result = num1 * num2; break;
}
return result;
}
}
'알고리즘 > 프로그래머스(Programmers)' 카테고리의 다른 글
[프로그래머스][Level3][Java] 여행경로 (0) | 2020.12.30 |
---|---|
[프로그래머스][Level2][Java] JadenCase 문자열 만들기 (0) | 2020.12.30 |
[프로그래머스][Level2][Java] 행렬의 곱셈 (0) | 2020.12.29 |
[프로그래머스][Level2][Java] 폰켓몬 (0) | 2020.12.28 |
[프로그래머스][Level2][Java] 다음 큰 숫자 (0) | 2020.12.26 |
Comments