ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스/JAVA] 다트 게임
    @떤떤/#Study 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);
    	}
    
    }
    

     

    아직 옵션 추가 안함

    코드 최대한 간결하게 하기

    ★객체화

     

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

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

    '@떤떤 > #Study' 카테고리의 다른 글

    [프로그래머스] 자바로 배우는 자료구조 후기  (1) 2020.04.06

    댓글

Designed by Tistory.