[PROG] 17682 다트게임(toCharArray, valueOf)

호호빵·2022년 9월 24일
0

Algorithm

목록 보기
29/46

문제

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

풀이

java 풀이

class Solution {
    public int solution(String dartResult) {
        int[] arr = new int[3];             	// 각 라운드의 점수를 저장할 배열
        char[] c = dartResult.toCharArray();	// 문자열을 하나씩 char로 바꿔서 배열 저장
        int idx = -1;							// index 초기값 설정이 중요

        for (int i = 0; i < c.length; i++) {
            if (c[i] >= '0' && c[i] <= '9') {		// 숫자일때만 index 값이 증가해야함
                idx++;
                arr[idx] = Integer.parseInt(String.valueOf(c[i]));

                if (c[i] == '1' && c[i+1] == '0' && i+1 != c.length -1) {	  // 10점일 경우 두자리 잡아먹음
                    arr[idx] -= Integer.parseInt(String.valueOf(c[i]));
                    arr[idx] = 10;
                    i++;               				// 이걸 생각 못했었음!
                }
                
            } else if (c[i] == 'D') {
                arr[idx] *= arr[idx];
            } else if (c[i] == 'T') {
                arr[idx] *= arr[idx] * arr[idx];
            } else if (c[i] == '*') {
                arr[idx] *= 2;
                if (idx >= 1) {
                    arr[idx-1] *= 2;
                }
            } else if (c[i] == '#') {
                arr[idx] *= -1;
            }

        }

        return arr[0] + arr[1] + arr[2];
    }
}

python 풀이

def solution(dartResult):

    dartResult = dartResult.replace('10', 'k')
    arr = ['10' if i == 'k' else i for i in dartResult]
    answer = []

    i = -1
    sdt = ['S', 'D', 'T']

    for j in arr:
        if j in sdt:
            answer[i] = answer[i] ** (sdt.index(j) + 1)
        elif j == '*':
            answer[i] *= 2
            if i >= 1:
                answer[i-1] *= 2
        elif j == '#':
            answer[i] *= -1
        else:
            answer.append(int(j))
            i += 1

    return sum(answer)
  • 자바와 파이썬 모두로 풀어보았는데 문제풀이 방식이 아예 달라서 두 문제를 푸는 것 같았다. 당분간은 다시 파이썬으로 풀어야겠다.


toCharArray()

  • String.toCharArray()
    는 문자열을 한 글자씩 쪼개서 이를 char타입의 배열에 집어넣어주는 메소드
  String s1 = "Hello";
  char[] charArr = s1.toCharArray();
  
  // charArr = ['H', 'e', 'l', 'l', 'o']
  
// 추가로, char형 배열을 합쳐서 하나의 String(문자열)로 만들 수 있다.
  String s2 = new String(charArr);
  

valueOf()

  • 괄호안의 값을 문자열로 변환
  • Integer.valueOf("100", 16) -> 100을 16진수로 변환하여 Integer형으로 반환
String s = String.valueOf(7);
Integer i = Integer.valueOf(5);
Float f = Float.valueOf("38");
Integer d = Integer.valueOf("100", 16);

7
5
38.0
256

for문으로 배열 생성(python)



다트게임 자바 풀이
valueOf

profile
하루에 한 개념씩

0개의 댓글