[프로그래머스 lev1/JS] 다트게임

woolee의 기록보관소·2022년 11월 8일
0

알고리즘 문제풀이

목록 보기
66/178

문제 출처

프로그래머스 lev1 - 다트게임

문제

나의 풀이

{a : b}랑 [[a,b]] 두 표현 중에서 정렬을 해야 한다면 후자가 훨씬 용이한 것 같다.

+= 연산일 때만 cnt를 계산하고, 나머지 *#0 의 경우는 cnt는 ++하지 않고 연산 결과만 덮어 씌우도록

function solution(dartResult) {
  let bns = [[1, 'S'], [2, 'D'], [3, 'T']];
  let answer2=[];
  let cnt=0;
  
  for (let i=1; i<dartResult.length; i++) {
    for (let j=0; j<bns.length; j++) {
      if (dartResult[i]===bns[j][1]) {
        answer2.push(dartResult[i-1]**bns[j][0]);
        cnt++;
      }
    }
    if (dartResult[i]==='*') {
      // console.log(cnt);
      if (cnt>=2) {
        answer2[cnt-2]=answer2[cnt-2]*2;
        answer2[cnt-1]=answer2[cnt-1]*2;
      }
      else if (cnt<=1) {
        answer2[cnt-1]=answer2[cnt-1]*2;
      }
    }
    else if (dartResult[i]==='#') {
      for (let j=0; j<bns.length; j++) {
        if (dartResult[i-1]===bns[j][1]) {
          answer2[cnt-1]=answer2[cnt-1]*(-1);
        }
      }
    }
    else if (dartResult[i]==='0' && dartResult[i-1]==='1') {
      for (let j=0; j<bns.length; j++) {
        if (dartResult[i+1]===bns[j][1]) {
          answer2.push(10**bns[j][0]);
        }
      }
    }
  }
  return answer2.reduce((a,b)=>a+b,0);
}

console.log(solution("1D#2S*3S"));
// console.log(solution("1S*2T*3S"));

다른 풀이

정규식 풀이

\d ⇒ 숫자(digit)
\D ⇒ 숫자 아닌 것(not digit)
d{1,} ⇒ 숫자 문자가 1번 이상 반복됨
^x ⇒ x문자로 시작됨

function solution(dartResult) {
    const bonus = { 'S': 1, 'D': 2, 'T': 3 },
          options = { '*': 2, '#': -1, undefined: 1 };

    let darts = dartResult.match(/\d.?\D/g);
		console.log(darts); // 숫자로 시작해서(\d), 뭔가 하나(?)를 포함해서 숫자가 아닌 것(.?D)으로 끝나는 애들

    for (let i = 0; i < darts.length; i++) {
        let split = darts[i].match(/(^\d{1,})(S|D|T)(\*|#)?/),
            score = Math.pow(split[1], bonus[split[2]]) * options[split[3]];

        if (split[3] === '*' && darts[i - 1]) darts[i - 1] *= options['*'];

        darts[i] = score;
    }

    return darts.reduce((a, b) => a + b);
}
profile
https://medium.com/@wooleejaan

0개의 댓글