본문 바로가기
코딩테스트/프로그래머스

[Level 1] 로또의 최고 순위와 최저 순위

by 고구마는호박고구마 2022. 8. 11.

import java.util.*;
class Solution {
    public int solution(String dartResult) {
        int answer = 0;
        double[] result = new double[3]; //다트 기회는 3번 
        String[] c = dartResult.split(""); //각 문자별 구별 
        int num=0; 
        
        for(int i=0; i<c.length; i++ ){
            switch(c[i]){ //문자별로 제곱연산 
                case "S": result[num++]=Math.pow(Integer.parseInt(c[i-1]), 1);
                    if(i>1&&c[i-2].equals("1")&&c[i-1].equals("0")) result[num-1] = 10; //숫자 10 구별
                    break;
                case "D": result[num++]=Math.pow(Integer.parseInt(c[i-1]), 2);
                    if(i>1&&c[i-2].equals("1")&&c[i-1].equals("0")) result[num-1] = 100;
                    break;
                case "T": result[num++]=Math.pow(Integer.parseInt(c[i-1]), 3);
                    if(i>1&&c[i-2].equals("1")&&c[i-1].equals("0")) result[num-1] = 1000;
                    break;
                case "*": 
                    if(num==1){ // 곱하기 제한이 당첨 전 숫자도 포함 하지만 첫번째 당첨은 전이 없기에 따로 뺌
                        result[num-1] *=2;        
                    }else{ // 첫번째가 아니고부터는 전 숫자가 있기에 for문 돌림
                        for(int j=num-2; j<num; j++){
                            result[j] *= 2;
                        }
                    }
                    break;
                case "#": result[num-1] = result[num-1]*-1;  // #일때는 그 숫자를 음수로
                    break;
            }

        }
        answer = (int)(result[0]+result[1]+result[2]);
        return answer;
    }
}

/* 신기하게 전날에 계속 고민할 때는 알고리즘이 생각이 안났는데 
오늘 아무생각없이 다시 보니깐 딱 알고리즘이 떠올랐다.
열심히 계속 본다고 머리가 잘 굴러가지는 않는다는걸 깨달았다. */

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

자바(HashMap)  (0) 2023.02.04
Iterator vs Stream  (0) 2023.01.09
[Level 1] 자연수 뒤집어 배열로 만들기  (0) 2022.08.11
[Level 1] 시저 암호  (0) 2022.08.11
[Level 1] 로또의 최고 순위와 최저 순위  (0) 2022.08.11

댓글