반응형
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 |
Tags
- exception
- 코드트리
- 코드 트리
- 디프만16기
- Scaffold
- 코딩
- 연습문제
- nGrinder
- c
- kakao
- depromeet
- 운영체제
- flutter
- Kafka
- 자료구조
- Kotlin
- 부하 테스트
- Sharding
- Spring
- Oidc
- Redis
- 디프만
- C언어
- pub.dev
- OAuth
- AOP
- 코딩테스트
- java
- 코딩 테스트
- dip
Archives
- Today
- Total
Nick Dev
[코드트리] 알파벳과 사칙연산(Java) 본문
반응형
문제 링크
[https://www.codetree.ai/trails/complete/curated-cards/test-calculations-with-alphabet/description]
내 풀이
import java.util.*;
public class Main {
static char[] input;
static int size;
static int max = Integer.MIN_VALUE;
static Map<Character, Integer> map;
static Set<Character> alph;
static List<Character> list;
// 알파벳에 숫자 매핑하기
static void recur(int idx) {
if (idx == size) {
int res = calculate();
max = Math.max(max, res);
return;
}
for (int i = 1; i <= 4; i++) {
map.put(list.get(idx), i);
recur(idx+1);
map.remove(list.get(idx));
}
}
// 매핑된 결과를 가지고 수식 계산하기
static int calculate() {
int cur = map.get(input[0]);
for (int i = 1; i < input.length - 1; i += 2) {
switch (input[i]) {
case '-':
cur -= map.get(input[i+1]);
break;
case '+':
cur += map.get(input[i+1]);
break;
case '*':
cur *= map.get(input[i+1]);
break;
}
}
return cur;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
input = sc.next().toCharArray();
// 알파벳 종류 뽑아내기
alph = new HashSet<>();
for (int i = 0; i < input.length; i += 2) {
alph.add(input[i]);
}
// 재귀 돌리기 위해 list로 변환
list = new ArrayList<>(alph);
// 알파벳 - 숫자 매핑
map = new HashMap<>();
size = list.size();
recur(0);
System.out.println(max);
}
}
과정
아이디어
초기에는 입력받은 수식을 재귀 돌면서 알파벳을 숫자로 바꿨다
근데 수식 초반에서 b를 2로 바꾸면 수식 뒷부분에서 b가 나오면 자동으로 2로 설정해야 된다
그럼 뒷 부분에서 backtracking할 때, 골치 아파진다
다시 문제를 읽고 생각해보니 꼭 수식을 돌면서 알파벳을 숫자로 바꿀 필요가 없었다
알파벳은 a ~ f로 고정이고 바꿀 숫자의 범위도 1 ~ 4로 고정이었다
그래서 우선 입력을 받고
Set
에 알파벳을 넣으면 해당 수식에 들어있는 알파벳 종류를 알 수 있다이걸 다시
List
로 만들고 알파벳에 숫자 할당하는 걸 재귀함수로 돌린다.예를 들어 수식에 알파벳이 b, d, f 가 나왔다면
b = 1, d = 1, f = 1 부터 b = 4, d = 4, f = 4까지 모든 경우의 수를 만든다
그리고 매번 경우의 수 완성될 때마다, 알파벳을 숫자로 바꿔서 계산해주고 최댓값을 구하면 된다.
반응형
'코딩 테스트' 카테고리의 다른 글
[코드트리] 방향에 맞춰 최대로 움직이기(Java) (0) | 2025.01.04 |
---|---|
[코드트리] 1차원 윷놀이(Java) (1) | 2025.01.03 |
[코드트리] 강력한 폭발(Java) (0) | 2025.01.02 |
[코드트리] 아름다운 수(Java) (0) | 2024.12.31 |
[코드트리] 최적의 십자 모양 폭발(Java) (0) | 2024.12.31 |