๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Softeer

[Javascript(NodeJS)/Softeer] Lv3. ํ”Œ๋ ˆ์ดํŽ˜์–ด ์•”ํ˜ธ (HSAT 3ํšŒ ์ •๊ธฐ ์ฝ”๋”ฉ ์ธ์ฆํ‰๊ฐ€ ๊ธฐ์ถœ)

728x90

 

https://softeer.ai/practice/6255

 

Softeer - ํ˜„๋Œ€์ž๋™์ฐจ๊ทธ๋ฃน SW์ธ์žฌํ™•๋ณดํ”Œ๋žซํผ

 

softeer.ai


์†Œํ”„ํ‹ฐ์–ด ๋ ˆ๋ฒจ 3 ..!

์†Œํ”„ํ‹ฐ์–ด๋Š” ์ง„์งœ ์‰ฝ์ง€ ์•Š๋‹ค ใ…Ž.ใ…Ž ๊ทธ๋ž˜๋„ ์ด ๋ฌธ์ œ๋Š” ์„ค๋ช…์ด ์ˆœ์ฐจ์ ์ด๊ณ  ์ƒ์„ธํ•ด์„œ ์ข‹์•˜์Œ

1์‹œ๊ฐ„๋™์•ˆ ๋นก์ง‘์ค‘ํ–ˆ๋Š”๋ฐ ํ•œ๋ฒˆ์— ๋งŒ์  ๋ฐ›์•˜๋‹ค ๐Ÿ˜ต

 

์•„๋ฌด๋ž˜๋„ ์•„์ง js๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ณด๋‹ˆ ์Œฉ๊ตฌํ˜„์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง„๋“ฏํ•œ๋ฐ,

๋‹ค๋ฅธ ๋ถ„์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ ๋” ์งง๋”๋ผ

 

์ถœ์ฒ˜ - ์—ฐ์Šต๋ฌธ์ œ ํ†ก

 

charCodeAt ๋ฐฐ์›Œ๊ฐ‘๋‹ˆ๋‹ค

๊ทธ์ € ์กด๊ฒฝ์Šค๋Ÿฌ์šธ ๋”ฐ๋ฆ„.,,

 

๋‚˜์˜ ํ’€์ด

const fs = require('fs');
const input = fs.readFileSync(0,'utf-8').trim().split('\n');
let alphas = ["A","B","C",'D','E','F','G','H','I','K','L','M','N','O','P',
                 		'Q','R','S','T','U','V','W','X','Y','Z']; // J๋Š” ์ œ์™ธ
const msg = input[0].split('');
const key = input[1].split('');

const makeMap=(text)=>{
    let map = [];
    let tmparr = [];
    let txt_ = new Set(text); // ์ค‘๋ณต์ œ๊ฑฐ
    let txt = [...txt_] // ๋ฐฐ์—ด๋กœ ์žฌ๋ณ€ํ™˜
    txt.map((t)=>{
        let a = alphas.indexOf(t);
        if(a>=0){
            alphas.splice(a,1); // ๋ฉ”์‹œ์ง€์— ์กด์žฌํ•˜๋Š” ์•ŒํŒŒ๋ฒณ ์ œ๊ฑฐ
        }
    })
    for(let i=0; i<txt.length; ++i){ // ๋ฉ”์‹œ์ง€ ์•ŒํŒŒ๋ฒณ ์ฑ„์šฐ๊ธฐ
        tmparr.push(txt[i]);
        if(tmparr.length>=5) {
            map.push(tmparr);
            tmparr = [];
        }
    }
    for(let i=0; i<alphas.length; ++i){ // ๋ฉ”์‹œ์ง€์— ์—†๋Š” ์•ŒํŒŒ๋ฒณ ์ฑ„์šฐ๊ธฐ
        tmparr.push(alphas[i]);
        if(tmparr.length>=5) {
            map.push(tmparr);
            tmparr = [];
        }
    }
    
    return map;
}

const makePair=(text)=>{
    let txt = [];
    let tmp = "";
    while(1){
        if(text.length<=1) break;
        if(text[0]===text[1]) {
            if(text[0]==='X') text.splice(1,0,'Q');
            else text.splice(1,0,'X');
        }
        let a = text.shift();
        let b = text.shift();
        tmp = a+b;
        txt.push(tmp);
        tmp = "";
    }
    if(text.length === 1) {
        tmp = text[0]+'X';
        txt.push(tmp);
    }
    return txt;
}

const makePassword=(pairs, map)=>{
    let newMap = [];
    let answer = "";
    for(let i=0; i<5; ++i){
        let tmparr = [];
        for(let j=0; j<5; ++j){
            tmparr.push(map[j][i]);
        }
        newMap.push(tmparr);
    }
    // console.log(newMap);
    pairs.map((pair)=>{
        let newPair = "";
        // 1. pair[0], pair[1] ๊ฐ™์€ ํ–‰์ธ์ง€ ํ™•์ธ
        let isChanged = false;
        
        for(let i=0; i<5; ++i){
            let first = map[i].indexOf(pair[0]);
            let second = map[i].indexOf(pair[1]);
            if(first>=0 && second>=0){
                // console.log(pair[0],pair[1],`${i+1}ํ–‰`,first, second);
                if(first === 4) first = -1;
                if(second === 4) second = -1;
                newPair = map[i][first+1] + map[i][second+1];
                // console.log(newPair);
                answer += newPair;
                isChanged = true;
                break;
            }
        }
        // 2. ๊ฐ™์€ ์—ด์ธ์ง€ ํ™•์ธ
        if(!isChanged){
            for(let i=0; i<5; ++i){
                let first = newMap[i].indexOf(pair[0]);
                let second = newMap[i].indexOf(pair[1]);
                if(first>=0 && second>=0){
                    // console.log(pair[0],pair[1],`${i+1}์—ด`,first, second);
                    if(first === 4) first = -1;
                    if(second === 4) second = -1;
                    newPair = newMap[i][first+1] + newMap[i][second+1];
                    // console.log(newPair);
                    answer += newPair;
                    isChanged = true;
                    break;
                }
            }
        }
        // 3. ์ปฌ๋Ÿผ์ด ์„œ๋กœ ๊ตํ™˜๋œ ์œ„์น˜๋กœ
        if(!isChanged){
            let firstRow = 0; let firstCol = 0;
            let secondRow = 0; let secondCol = 0;
            for(let i=0; i<5; ++i){
                for(let j=0; j<5; ++j){
                    if(map[i][j] === pair[0]) {
                        firstRow = i;
                        firstCol = j;
                    }
                    if(map[i][j] === pair[1]) {
                        secondRow = i;
                        secondCol = j;
                    }
                }
            }
            newPair = map[firstRow][secondCol] + map[secondRow][firstCol];
            answer += newPair;
            isChanged = true;
            // console.log(newPair)
        }
    })
    return answer;
}

let map = makeMap(key);
let pairs = makePair(msg);
// console.log(pairs);
console.log(makePassword(pairs, map));

 

JS๋Š” ์ตํž์ˆ˜๋ก ๋ฌธ์ž์—ด ๋‹ค๋ฃจ๋Š” ๋ง›์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. (split, splice, slice, shift ...)

ํ•จ์ˆ˜๊ฐ€ ๋‹ค์–‘ํ•ด์„œ ์€๊ทผ ์žฌ๋ฏธ์žˆ๋‹ค!!

728x90