@떤떤/#Study
[프로그래머스/JAVA] 다트 게임
떤떤
2020. 4. 16. 16:45
package practice;
import java.util.Random;
public class DartGame {
// 0~10의 정수와 문자 S,D,T,*,#로 구성된 문자열이 입력될 시 총점수를 반환하는 함수
// 자바에서 쓰는 제곱함수 Math.pow(밑, 지수);
public int checkScore(String[] result, String field) {
int score = 0;
String tmp="";
for (int i = 0; i < result.length; i++) {
if (i - 2 >= 0) {
// 점수가 10점인지 확인
if ((result[i - 2].equals("S") == false) && (result[i - 2].equals("D") == false)
&& (result[i - 2].equals("T") == false) && (result[i - 2].equals("*") == false)
&& (result[i - 2].equals("#") == false)) {
tmp = result[i - 2] + result[i - 1];
score = (Integer.valueOf(tmp));
System.out.println(score);
} else {
score = (Integer.valueOf(result[i - 1]));
}
} else if (i == 1) {
score = (Integer.valueOf(result[0]));
}
System.out.print(field+"의 위치 : " + i);
System.out.println(" , score : " + score);
}
return score;
}
public int solution(String dartResult) {
int answer = 0;
int s = 1, d = 2, t = 3;
String[] result = dartResult.split(""); // 배열에 한글자씩 저장하기
int score = 0;
String tmp = "";
for (int i = 0; i < result.length; i++) {
if (result[i].equals("S")) {
if (i - 2 >= 0) {
// 점수가 10점인지 확인
if ((result[i - 2].equals("S") == false) && (result[i - 2].equals("D") == false)
&& (result[i - 2].equals("T") == false) && (result[i - 2].equals("*") == false)
&& (result[i - 2].equals("#") == false)) {
tmp = result[i - 2] + result[i - 1];
score = (Integer.valueOf(tmp));
System.out.println(score);
} else {
score = (Integer.valueOf(result[i - 1]));
}
} else if (i == 1) {
score = (Integer.valueOf(result[0]));
}
System.out.print("S의 위치 : " + i);
System.out.println(" , score : " + score);
answer += Math.pow(score, s); // 제곱함수
} else if (result[i].equals("D")) {
if (i - 2 >= 0) {
// 점수가 10점인지 확인
if ((result[i - 2].equals("S") == false) && (result[i - 2].equals("D") == false)
&& (result[i - 2].equals("T") == false) && (result[i - 2].equals("*") == false)
&& (result[i - 2].equals("#") == false)) {
tmp = result[i - 2] + result[i - 1];
score = (Integer.valueOf(tmp));
System.out.println(score);
} else {
score = (Integer.valueOf(result[i - 1]));
}
} else if (i == 1) {
score = (Integer.valueOf(result[0]));
}
System.out.print("D의 위치 : " + i);
System.out.println(" , score : " + score);
answer += Math.pow(score, d); // 제곱함수
} else if (result[i].equals("T")) {
if (i - 2 >= 0) {
// 점수가 10점인지 확인
if ((result[i - 2].equals("S") == false) && (result[i - 2].equals("D") == false)
&& (result[i - 2].equals("T") == false) && (result[i - 2].equals("*") == false)
&& (result[i - 2].equals("#") == false)) {
tmp = result[i - 2] + result[i - 1];
score = (Integer.valueOf(tmp));
System.out.println(score);
} else {
score = (Integer.valueOf(result[i - 1]));
}
} else if (i == 1) {
score = (Integer.valueOf(result[0]));
}
System.out.print("T의 위치 : " + i);
System.out.println(" , score : " + score);
answer += Math.pow(score, t); // 제곱함수
}
}
return answer;
}
public String playGame() {
StringBuilder sb = new StringBuilder(); // 점수와 문자를 받을 임시 저장소
Random random = new Random();
int round = 3; // 총 3회
int score = 0;
int option = 0; // 아차상,스타상 랜덤으로 뽑아낼 정수
String dartResult = "";
for (int i = 0; i < round; i++) {
score = random.nextInt(10);
sb.append((String.valueOf(score)));
if (score >= 0 && score <= 3) { // 0~3까지 Single(S)
sb.append("S");
} else if (score >= 4 && score <= 7) { // 4~7까지 Double(D)
sb.append("D");
} else if (score >= 8 && score <= 10) { // 8~10까지 Triple(T)
sb.append("T");
}
option = random.nextInt(3); // 0:아차상(#), 1:스타상(*), 2:아무것도없음
if (option == 0) {
sb.append("#");
} else if (option == 1) {
sb.append("*");
} else {
}
}
dartResult = sb.toString();
return dartResult;
}
public static void main(String[] args) {
DartGame dg = new DartGame();
String dartResult = "";
int answer = 0;
System.out.println("☆★☆★Game Start★☆★☆");
dartResult = dg.playGame();
System.out.println("Dart Result = " + dartResult);
answer = dg.solution(dartResult);
System.out.println("Answer = " + answer);
}
}
아직 옵션 추가 안함
코드 최대한 간결하게 하기
★객체화
나만 문제 이해못하고 진지하게 문자열받는 함수까지 만들었다..
어쩐지 다른 사람들 코드 짧더라..