문제
문제풀이
해당 문제의 경우 문제를 얼마나 이해했는가에 따라 쉽게 풀 수 있는 문제라고 생각한다.
문자 S, D, T 의경우 n^1, n^2, n^3 을 의미하고,
문자 *은 앞에 두 숫자에 x2, 앞에 숫자가 하나인 경우 한개만 x2,
문자 #은 앞의 숫자에 x(-1) 을 해주면 되는 문제이다.
숫자가 두자리 까지 나오는 케이스가 있기 때문에 각 문자열을 돌면서 숫자 -> 숫자 인경우 두 개를 더해서 list에 담아주는 방식으로 진행 하였다. 숫자 -> 문자면 한 개여도 바로 입력되게도 지정함.
그 외 나머지 연산은 케이스에 따라 진행을 할 수 있도록 설계를 해주면 된다.
나의 답안
public static int solution(String dartResult) {
int answer = 0;
ArrayList<Integer> list = new ArrayList<>();
int count = 0;
String num = "";
while (count < dartResult.length()) {
char c = dartResult.charAt(count);
if (c >= '0' && c <= '9') {
num += String.valueOf(c);
count++;
continue;
} else if (c == '#') {
list.set(list.size() -1, list.get(list.size() -1) * -1);
} else if (c == '*') {
if (list.size() == 1) {
list.set(0, list.get(0) * 2);
} else {
list.set(list.size() -1, list.get(list.size() -1) * 2);
list.set(list.size() -2, list.get(list.size() -2) * 2);
}
}
if (!"".equals(num)) {
list.add(Integer.parseInt(num));
num = "";
}
switch (c) {
case 'D':
list.set(list.size() -1, (int) Math.pow(list.get(list.size() -1), 2));
break;
case 'T':
list.set(list.size() -1, (int) Math.pow(list.get(list.size() -1), 3));
break;
}
count++;
}
System.out.println(list);
for (int i : list) answer += i;
return answer;
}
'Programmers 문제풀이 > Lv.1' 카테고리의 다른 글
기사단원의 무기 (0) | 2023.03.22 |
---|---|
로또의 최고 순위와 최저 순위 (0) | 2023.03.22 |
명예의 전당 (1) (0) | 2023.03.22 |
과일 장수 (0) | 2023.03.22 |
실패율 (0) | 2023.03.21 |