https://programmers.co.kr/learn/courses/30/lessons/17682
이번문제는 다양한 방식으로 풀이가 가능한 것 같았다.
후...어제 과음을 해서 그런가 생각이 길게 이어지지 않아서...코드가 조금 복잡할지라도 순차적으로 해결하려고 노력했다.
[알고리즘 Flow]
1. 각각의 점수를 분해하여 list 배열에 담아준다. (1S*, 2D# ... 이런식으로)
2. list.size 만큼 for문으로 각각의 점수를 계산한다.
3. *일경우에는 i > 0 크면 i - 1과 i번지의 숫자들을 x2해준다. i == 0 이면 해당 i만 x2
[작성코드]
package com.level01;
import java.util.ArrayList;
import java.util.List;
public class DartGame {
public static void main(String[] args) {
solution("1S2D*3T");
}
public static int solution(String dartResult) {
int answer = 0;
List<String> list = new ArrayList<String>();
// 각각의 점수결과를 담을리스트
String res = "";
for (int i = 0; i < dartResult.length(); i++) {
res += dartResult.charAt(i);
if (res.length() == 2) {
// res의 길이가 2라면 (1S or 10 이런식으로 저장되어있을 것)
if (res.equals("10")) {
// 점수가 10인경우에는 바로 뒤에 보너스를 더해서 리스트에 더한다.
res += dartResult.charAt(i+1);
list.add(res);
res = "";
i++;
} else {
if (i < dartResult.length()-1) {
// 아웃오브바운즈 방지
if (dartResult.charAt(i+1) == '*' || dartResult.charAt(i+1) == '#') {
res += dartResult.charAt(i+1);
list.add(res);
res = "";
i++;
} else {
list.add(res);
res = "";
}
} else if (i == dartResult.length()-1) {
// 마지막 번지 일 경우
list.add(res);
res = "";
}
}
}
}
List<Integer> score = new ArrayList<Integer>();
// 점수를 담을 리스트
for (int i = 0; i < list.size(); i++) {
// 각각의 점수를 합산하자.
int point = Character.getNumericValue(list.get(i).charAt(0));
// 각 라운드의 포인트를 가져온다
if (list.get(i).charAt(1) == 'D') {
point = point * point;
} else if (list.get(i).charAt(1) == 'T') {
point = point * point * point;
} else if (list.get(i).charAt(1) == '0') {
// 점수가 10점인 경ㅇ
String ten = "";
ten += list.get(i).charAt(0);
ten += list.get(i).charAt(1);
point = Integer.parseInt(ten);
if (list.get(i).charAt(2) == 'D') {
point = point * point;
} else if (list.get(i).charAt(2) == 'T') {
point = point * point * point;
}
}
score.add(point);
}
for (int i = 0; i < list.size(); i++) {
if (list.get(i).length() == 3) {
if (list.get(i).charAt(2) == '*') {
score.set(i, score.get(i) * 2);
if (i > 0) {
score.set(i-1, score.get(i-1) * 2);
}
} else if (list.get(i).charAt(2) == '#') {
score.set(i, score.get(i) * -1);
}
}
}
for (int i = 0; i < score.size(); i++) {
answer += score.get(i);
}
return answer;
}
}
생각보다 약간 노가다 느낌이다... 하튼 일단 푼거로 만족한다. 숙취해소하러가야징~
[깃허브링크]
'문제풀이 > 프로그래머스' 카테고리의 다른 글
3진법 뒤집기 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.07.29 |
---|---|
숫자 문자열과 영단어 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.07.27 |
최대공약수와 최소공배수 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.06.29 |
약수의 개수와 덧셈 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.06.11 |
내적 / 프로그래머스 연습문제 / programmers / level1 / Java (0) | 2021.06.10 |