@떤떤/#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);
	}

}

 

아직 옵션 추가 안함

코드 최대한 간결하게 하기

★객체화

 

나만 문제 이해못하고 진지하게 문자열받는 함수까지 만들었다..

어쩐지 다른 사람들 코드 짧더라..