๐Ÿ“• Algorithm/Solved

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์กฐ์ด์Šคํ‹ฑ (Javascript)

ํ•œ์ฝ”๋”ฉ 2021. 1. 19. 09:37
728x90
728x90

๋ฌธ์ œ ์„ค๋ช…

์กฐ์ด์Šคํ‹ฑ์œผ๋กœ ์•ŒํŒŒ๋ฒณ ์ด๋ฆ„์„ ์™„์„ฑํ•˜์„ธ์š”. ๋งจ ์ฒ˜์Œ์—” A๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
ex) ์™„์„ฑํ•ด์•ผ ํ•˜๋Š” ์ด๋ฆ„์ด ์„ธ ๊ธ€์ž๋ฉด AAA, ๋„ค ๊ธ€์ž๋ฉด AAAA

์กฐ์ด์Šคํ‹ฑ์„ ๊ฐ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โ–ฒ - ๋‹ค์Œ ์•ŒํŒŒ๋ฒณ โ–ผ - ์ด์ „ ์•ŒํŒŒ๋ฒณ (A์—์„œ ์•„๋ž˜์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด Z๋กœ) โ—€ - ์ปค์„œ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ (์ฒซ ๋ฒˆ์งธ ์œ„์น˜์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— ์ปค์„œ) โ–ถ - ์ปค์„œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ JAZ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์—์„œ ์กฐ์ด์Šคํ‹ฑ์„ ์œ„๋กœ 9๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ J๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค. - ์กฐ์ด์Šคํ‹ฑ์„ ์™ผ์ชฝ์œผ๋กœ 1๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ ์ปค์„œ๋ฅผ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ์œ„์น˜๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค. - ๋งˆ์ง€๋ง‰ ์œ„์น˜์—์„œ ์กฐ์ด์Šคํ‹ฑ์„ ์•„๋ž˜๋กœ 1๋ฒˆ ์กฐ์ž‘ํ•˜์—ฌ Z๋ฅผ ์™„์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 11๋ฒˆ ์ด๋™์‹œ์ผœ "JAZ"๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ , ์ด๋•Œ๊ฐ€ ์ตœ์†Œ ์ด๋™์ž…๋‹ˆ๋‹ค.

๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์ด๋ฆ„ name์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์ด๋ฆ„์— ๋Œ€ํ•ด ์กฐ์ด์Šคํ‹ฑ ์กฐ์ž‘ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • name์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • name์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 20 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

JEROEN 56
JAN 23

 

function solution(name){
    
    const arr = [0];

    const answer = [...name].reduce( (answer, s, i) => {
    
        // ๋ฌธ์ž์—ด name์˜ ๋ฌธ์ž๊ฐ€ A์ด๋ฉด์„œ, ๊ทธ ์ „ ๋ฌธ์ž๊ฐ€ A๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ
        // ์ฆ‰, ์ฒ˜์Œ์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š” A๋ผ๋ฉด
        if(s === "A"){
            
            // ์ž„์‹œ ๋ฐฐ์—ด arr์— name์˜ i๋ฒˆ์งธ๋ถ€ํ„ฐ ๊ณ„์‚ฐํ•˜๋Š” continuous ํ•จ์ˆ˜ ์‚ฌ์šฉ
            // ์—ฐ์†๋œ A์˜ ๊ฐœ์ˆ˜์—์„œ A๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๋“ฑ์žฅํ•˜๋Š” ๋ถ€๋ถ„์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐจ ์—ฐ์‚ฐ
            if(name[i-1] != "A")
                arr.push(continue(name.substring(i)) - (i - 1));
            
            // ํ•œ ๋ฌธ์ž๋ฅผ ์—ฐ์‚ฐ ํ›„ ์šฐ์ธก ์ด๋™์œผ๋กœ ์ธํ•œ + 1
            return answer + 1;
            
        }
        
        // ํ˜„์žฌ ์ด ํ•ฉ์ˆ˜ + ์•ŒํŒŒ๋ฒณ ๋ณ€ํ™˜(์ขŒ์šฐ ์ด๋™ํ•œ ์ˆ˜) +์šฐ์ธก ์ด๋™ํ•œ ์ˆ˜ 
        return answer + calc_diff(name, i) + 1;
    }, 0);
    
    return answer - Math.max(...arr) - 1;
}

function calc_diff(name, i){
    // charCodeAt์„ ์‚ฌ์šฉํ•˜์—ฌ '๋ฌธ์ž'๋ฅผ ์ •์ˆ˜๋กœ ์•„์Šคํ‚ค์ฝ”๋“œ ๋ฒˆํ˜ธ๋กœ ๋ณ€ํ™˜ 
    let diff = name.charCodeAt(i) - 65;
        
    if(diff > 13)
        diff = 26 - diff;
    
    return diff;
}

// A๊ฐ€ ๋ช‡๋ฒˆ ๋ฐ˜๋ณต ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธ
// "AAA" -> 3
function continue(name){
    let repeat = 0;
    
    // ๋ฌธ์ž A๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ A ๊ฐœ์ˆ˜ ์นด์šดํŠธ ํ›„ ๋ฐ˜ํ™˜
    for(let i = 0; i < name.length; i++){
        if(name[i] != "A")
            break;
        repeat++;
    }
    return repeat;
}

 

๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ฒƒ

  1. ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ ์ด๋™ ์ˆ˜๋Š” ๋ช‡์ธ๊ฐ€?
  2. ๋ฌธ์ž์—ด ๋งจ ์•ž์—์„œ '์ขŒ' ์ด๋™์„ ํ†ตํ•ด ๋ฌธ์ž์—ด ๋งจ ๋’ค๋กœ ๊ฐ€์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ธ์ œ์ธ๊ฐ€?

 

์ฒซ๋ฒˆ์งธ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์•„์Šคํ‚ค์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•ด์ฃผ๋ฉด ๋

function calc_diff(name, i){
    // charCodeAt์„ ์‚ฌ์šฉํ•˜์—ฌ '๋ฌธ์ž'๋ฅผ ์ •์ˆ˜๋กœ ์•„์Šคํ‚ค์ฝ”๋“œ ๋ฒˆํ˜ธ๋กœ ๋ณ€ํ™˜ 
    let diff = name.charCodeAt(i) - 65;
        
    if(diff > 13)
        diff = 26 - diff;
    
    return diff;
}

 

๋‘๋ฒˆ์งธ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์–ธ์ œ ์ขŒ๋กœ ์ด๋™ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

์ขŒ -> ์šฐ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ด๋‹ค. 

ํ•˜์ง€๋งŒ, ์ด๋ฏธ ์ž…๋ ฅ๋˜์–ด์žˆ๋Š” A๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ตณ์ด ์•ŒํŒŒ๋ฒณ์„ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด, "JAAAAN"๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์—์„œ J์™€ N์€ ์ƒํ•˜ ์ด๋™์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ปค์„œ๋ฅผ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.

์ด ๊ฒฝ์šฐ์—๋Š” J๋ฅผ ์ž…๋ ฅํ•˜๊ณ  A๋ฅผ ๋„˜๊ธฐ๊ธฐ ์œ„ํ•ด ์šฐ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”

J๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ขŒ๋กœ ์ด๋™ํ•˜์—ฌ ๋ฐ”๋กœ ๋งจ ๋’ค๋กœ ์ด๋™ํ•˜์—ฌ N์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅด๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์œ„์™€ ๊ฐ™์ด ๋’ค๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ธ์ œ ํ•„์š”ํ• ๊นŒ?

"JAAAAN"๊ณผ ๊ฐ™์ด A๊ฐ€ ์—ฐ์†๋œ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค๋ฉด ์šฐ๋กœ ์ด๋™์ด ํž˜๋“ค์–ด์ง„๋‹ค.

์ฆ‰, ์—ฐ์†๋œ A๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋’ค๋กœ ์ด๋™์• ํ– ํ•œ๋‹ค. 

 

๋’ค๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ, ์—ฐ์†๋œ A๋ฅผ ๋งŒ๋‚˜๊ธฐ ์ „๊นŒ์ง€์˜ ๋ฌธ์ž์˜ ๊ฐฏ์ˆ˜๋„ ์ค‘์š”ํ•˜๋‹ค. 

๋”ฐ๋ผ์„œ ๋’ค๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝํ•  ๋•Œ ํ•„์š”ํ•˜๋‹ค.

 

์•„๋ž˜๋Š” ์—ฐ์†๋œ A์˜ ๊ธธ์ด๋ฅผ ์žฌ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

// A๊ฐ€ ๋ช‡๋ฒˆ ๋ฐ˜๋ณต ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธ
// "AAA" -> 3
function continue(name){
    let repeat = 0;
    
    // ๋ฌธ์ž A๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ๋•Œ๊นŒ์ง€ A ๊ฐœ์ˆ˜ ์นด์šดํŠธ ํ›„ ๋ฐ˜ํ™˜
    for(let i = 0; i < name.length; i++){
        if(name[i] != "A")
            break;
        repeat++;
    }
    return repeat;
}

 

์—ฐ์†๋œ A์˜ ๊ธธ์ด > ์ฒซ A ์ „๊นŒ์ง€์˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด

 

์œ„์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์•˜์„ ๋•Œ, ์—ฐ์†๋œ A์˜ ๊ธธ์ด๋Š” 3์ด๊ณ , ์ฒซ A ์ „๊นŒ์ง€์˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” J ํ•˜๋‚˜์ด๋ฏ€๋กœ 1์ด๋‹ค.

3 > 1์ด ์„ฑ๋ฆฝ์ด ๋œ๋‹ค. 

 

 

728x90
๋ฐ˜์‘ํ˜•