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

2023. 1. 11. 21:00·알고리즘(Algorithm)
728x90
반응형

풀이

function solution(dartResult) {
  let check = dartResult.match(/\d{1,2}[SDT][*|#]?/g)
  let res=[]
  for (let i = 0; i < 3; i++) {
    let num=check[i].match(/\d{1,2}/g)
    let bonus=check[i].match(/S|D|T/g)
    let option=check[i].match(/[*|#]?/g)
    if(bonus[0]==='S') num=+num
    else if(bonus[0]==='D') num=Math.pow(+num,2)
    else if(bonus[0]==='T') num=Math.pow(+num,3)
    if(option.includes('*')){
      num*=2
      if(i!==0){
        res[i-1]=res[i-1]*2
      }
    }
    else if(option.includes('#')){
      num*=-1
    }
    res.push(num)
  }
  return res.reduce((a,b)=>a+b)
}

1. 정규식을 사용해 점수|보너스|옵션 형태로 변수에 저장

dartResult = 1S2D*3T
-> 1S | 2D* | 3T

정규표현식
/\d{1,2}[SDT][*|#]?/g
\d{1,2} -> \d는 숫자를 의미하고 {(1) min,(2) max} 정규표현식 수량, 즉 십의자리 수 까지 고려
[SDT] -> SDT에 해당하는 문자
[*|#]? -> * 또는 # , ?는 (최대 한번 나오거나 아예 없을 때)

 

String.prototype.match

 

문자열이 정규식과 일치하면, 일치하는 전체 문자열을 첫 번째 요소로 포함하는 Array를 반환한 다음 괄호 안에 캡처된 결과가 옵니다. 일치하는 것이 없으면 null이 반환됩니다.

 

정규식에 g 플래그가 포함되어 있으면, 일치는 객체가 아닌 일치하는 하위 문자열을 포함하는 Array를 반환합니다. 캡처된 그룹은 반환되지 않습니다. 일치하는 것이 없으면 null이 반환됩니다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/match

 

String.prototype.match() - JavaScript | MDN

match() 메서드는 문자열이 정규식과 매치되는 부분을 검색합니다.

developer.mozilla.org

?의 차이

? -> 0,1번 발생되는 패턴과 일치시킨다.

let option=check[i].match(/[*|#]?/g)

이 부분에서 option을 log에 찍어보면 배열 형태로 값이 나오는데
[ '', '', '' ]
[ '', '', '*', '' ]
[ '', '', '' ]

match(/[*|#]/g)
?를 빼고 찍어보면 아래처럼 값이 나온다.
null
[ '*' ]
null

 

의문점(?)

주어진 문자는 check배열에는 [ '1S', '2D*', '3T' ] 이런식으로 값이 담겨있고 각 인덱스의 길이는 [2,3,2]인데

option에서는 [3,4,3]으로 출력이 된다.

예상) 1-> '', S-> '',  *이나#이 없기에 '' 그래서 위에처럼 표시되는게 아닌가 싶다.

728x90
반응형
저작자표시 (새창열림)

'알고리즘(Algorithm)' 카테고리의 다른 글

프로그래머스 - 크레인 인형뽑기 게임 [JS]  (0) 2023.01.16
프로그래머스 - 체육복(Greedy) [JS]  (1) 2023.01.13
프로그래머스 - 비밀지도 [JS]  (1) 2023.01.10
프로그래머스 - 소수 만들기[JS]  (0) 2023.01.09
프로그래머스 - 소수 찾기[JS]  (1) 2023.01.08
'알고리즘(Algorithm)' 카테고리의 다른 글
  • 프로그래머스 - 크레인 인형뽑기 게임 [JS]
  • 프로그래머스 - 체육복(Greedy) [JS]
  • 프로그래머스 - 비밀지도 [JS]
  • 프로그래머스 - 소수 만들기[JS]
Hun-bot
Hun-bot
IT를 중심으로 다양한 것
  • Hun-bot
    로봇이 만드는 눈사람
    Hun-bot
  • 전체
    오늘
    어제
    • All Article (128)
      • Programmers (6)
        • TIP (1)
        • SQL (2)
        • LV1 (1)
        • LV2 (2)
        • LV3 (0)
      • Baekjoon (31)
        • Bronze (10)
        • Silver (19)
        • Gold (2)
        • Platinum (0)
        • Diamond (0)
      • Leetcode (0)
        • Easy (0)
        • Medium (0)
        • Hard (0)
        • SQL (0)
      • 알고리즘(Algorithm) (42)
      • JavaScript (40)
      • Linux (7)
      • JSP (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      알고리즘 #Algorithm
      Javascript
      JS #프로그래머스 #숫자의표현 #알고리즘
      알고리즘
      자바스크립트 #연습문제
      JS #JavaScript #프로그래머스 #알고리즘
      JavaScript #Set #Collection
      Algorithm
      오블완
      c++
      JSP #Vscode #톰켓 #Tomcat #Java #Web #jdk
      JS #정규표현식
      JS #클래스
      프로그래머스 #자바스크립트 #JS
      Python #알고리즘
      고득점 Kit
      async await #js #문법 #자바스크립트 #비동기
      JS #javascript #객체 #Object
      BaekJoon
      Programmers
      Vue #Vue.js #정리
      LeetCode #JS #Javascript #Algorithm
      티스토리챌린지
      JS #JavaScript #프로그래머스 #카카오
      자바스크립트
      리눅스 #입문
      SQL
      리눅스
      프로그래머스
      파이썬 #입력 #python #input
    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    Hun-bot
    프로그래머스 - 다트게임 [JS]
    상단으로

    티스토리툴바

    티스토리툴바