Algorithm/Programmers

[JavaScript] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๋‹คํŠธ ๊ฒŒ์ž„

๊ฐœ๋ฐœ๊ฐœ๊ตด๐Ÿธ 2022. 9. 18. 17:40

[๋ฌธ์ œ]

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

[ํ’€์ด]

๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ์ •๊ทœ์‹์„ ํ™œ์šฉํ•ด S,D,T,*,#์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ž์™€, ์ˆซ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ 1๋ฒˆ 1S2D*3T๋ฅผ ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ˆซ์ž๋ฅผ [1, 2, 3]์œผ๋กœ ๋ถ„๋ฆฌ(num[]) => dartResult.split(/[S|D|T|*|#]/).filter((e) => e !== '').map(Number)
  • ์—ฐ์‚ฐ์ž๋ฅผ [S, D*, T]์œผ๋กœ ๋ถ„๋ฆฌ(opt[]) => dartResult.split(/[0-9]/).filter((e) => e !== '')

๋‹ค์Œ์œผ๋กœ 1, 2, 3์„ ๊ฐ๊ฐ ์—ฐ์‚ฐ์ž์™€ ๋งค์น˜ํ•˜์—ฌ ๊ณ„์‚ฐ์„ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ฐ๊ฐ ret๋ฐฐ์—ด์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

(*์ด ๋‚˜์™”์„ ๊ฒฝ์šฐ ์ด์ „ ์ˆซ์ž๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ret๋ฐฐ์—ด์— ๊ฐ๊ฐ ์—ฐ์‚ฐ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ)

  • S, D, T ๊ธฐ๋ณธ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜์—ฌ ret์— ๊ธฐ๋ณธ ์—ฐ์‚ฐ๊ฐ’์„ ์ €์žฅ
  • ๋งŒ์•ฝ ํ˜„์žฌ i๋ฒˆ์งธ ์—ฐ์‚ฐ์ค‘์ผ ๋•Œ, opt[i]์˜ ๊ธธ์ด๊ฐ€ 2๋ผ๋ฉด ์ถ”๊ฐ€์—ฐ์‚ฐ์„ ์ง„ํ–‰ 

๋”ฐ๋ผ์„œ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•œ ret ๋ฐฐ์—ด์€ [2, 8, 27]์ด๋ฏ€๋กœ 2+8+27 = 37์ด ๋ฉ๋‹ˆ๋‹ค.

 

[์ฝ”๋“œ]

function solution(dartResult) {
    var answer = 0;
    const num = dartResult.split(/[S|D|T|*|#]/).filter((e) => e !== '').map(Number);
    const opt = dartResult.split(/[0-9]/).filter((e) => e !== '');
    
    const ret = Array.from({length: 3}, () => 0);
    for(let i=0;i<3;i++) {
        // ๊ธฐ๋ณธ ์—ฐ์‚ฐ
        if(opt[i][0] === 'S') {
            ret[i] = num[i];
        } else if(opt[i][0] === 'D') {
            ret[i] = num[i]*num[i];
        } else if(opt[i][0] === 'T') {
            ret[i] = num[i]*num[i]*num[i];
        }
        
        // ์ถ”๊ฐ€ ์—ฐ์‚ฐ
        if(opt[i].length === 2) {
            // ๊ณฑ์…ˆ
            if(opt[i][1] === '*') {
                ret[i] *= 2;
                if(i > 0) {
                    ret[i-1] *= 2;
                }
            }
            
            // ๋งˆ์ด๋„ˆ์Šค
            if(opt[i][1] === '#') {
                ret[i] = ret[i]*-1;
            }
        }
    }
    for(let i=0;i<3;i++) {
        answer += ret[i];
    }
    return answer;
}