티스토리 뷰

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/17682

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 설명

1) string을 한글자씩 파싱

2) 숫자일 경우 -> 10일 경우를 대비해 다음 i까지 확인

3) 스타상(*) 일경우 -> 바로 전의 점수도 같이 2배 해줌. (첫 번째 일경우엔 제외)

4) result 배열에 담아둔 값들을 다 더하면 답

 

이게 왜 Lv1문제일까 어려웡

 

3. 코드

class Solution {
  public int solution(String dartResult) {
      int answer = 0;
      
      char[] dart = dartResult.toCharArray();
      int[] result = new int[3];
      
      int sum = 0; // 각 다트 점수 합
      int dartCnt = 0; // 다트 수 1 2 3
      
      for(int i=0; i<dartResult.length(); i++) {
          if(Character.isDigit(dart[i])) { // 숫자일 경우
              if(i!=0) {
                  result[dartCnt++] = sum;
              }
              if((int)dart[i+1] == '0') { // 10일 경우
                  sum = 10;
                  i++; // 다음 단계 pass
                  continue;
              }
              else
                  sum = dart[i] - '0';
          }
          
          if(dart[i] == 'S') {
              ;
          }
          else if(dart[i] == 'D') {
              sum *= sum;
          }
          else if(dart[i] == 'T') {
              sum = (int)Math.pow(sum, 3); // Math.pow의 리턴형은 double
          }
          else if(dart[i] == '*') {
              sum *= 2;
              if(dartCnt != 0) { // 바로 앞에꺼도 2배
                  result[dartCnt-1] *= 2;
              }
          }
          else if(dart[i] == '#') {
              sum *= -1;
          }
          
          if(i==dartResult.length()-1 && dartCnt==2) // 마지막
              result[dartCnt] = sum;
      }
      // 다 더해!
      for(int i : result) {
          answer += i;
      }
      return answer;
  }
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday