[1차] 다트 게임

Sheryl Yun·2023년 9월 2일
0

처음 풀이

어렵지 않아 보인 문제였는데 생각보다 잘 안 풀려서 여기를 참고했다.

function solution(dartResult) {
    let score = [];
    let temp = 0; // 숫자를 담을 변수
    
    for (let i = 0; i < dartResult.length; i++) {
        if (!isNaN(dartResult[i])) {
            if (dartResult[i] === '1' && dartResult[i + 1] === '0') {
                temp = 10;
                i++;
            } else {
                temp = Number(dartResult[i]);
            }
        } 
        else if (dartResult[i] === 'S') score.push(temp);
        else if (dartResult[i] === 'D') score.push(Math.pow(temp, 2));
        else if (dartResult[i] === 'T') score.push(Math.pow(temp, 3));
        else if (dartResult[i] === '#') score[score.length - 1] *= -1;
        else if (dartResult[i] === '*') {
            score[score.length - 1] *= 2;
            score[score.length - 2] *= 2;
        }
    }
    
    return score.reduce((a, b) => a + b, 0);
}

기존 코드에서 내가 바꿔준 부분은 2가지이다.

  • 숫자인지 여부를 판별하는 부분을 dartResult[i] >= 0 && dartResult[i] <= 9 대신 isNaN 메서드 사용하기
  • 마지막 score 값을 전부 더해주는 부분을 reduce로 처리하기
    • answer 변수 불필요해짐

dartResult의 for문도 dartResult[i] 부분이 반복되어 map 같은 고차 함수로 줄이려고 해봤지만 map을 사용하면 i + 1이 들어가는 dartResult[i] === '1' && dartResult[i + 1] === '0' 부분이 작동하지 않길래 그냥 뒀다.

카카오 블라인드 테스트 문제였다
feat. 아이유 사진

profile
영어강사, 프론트엔드 개발자를 거쳐 데이터 분석가를 준비하고 있습니다 ─ 데이터분석 블로그: https://cherylog.tistory.com/

0개의 댓글