TIL 220813

신승준·2022년 8월 28일
0

알고리즘

백준

  1. 10815 숫자 카드
const fs = require('fs');
// let input = fs.readFileSync('input.txt').toString().trim().split('\n');
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const n = Number(input[0]);
const arrayN = input[1].split(' ').map(element => Number(element));
const m = Number(input[2]);
const arrayM = input[3].split(' ').map(element => Number(element));
arrayN.sort((a, b) => a - b);

function binarySearch(arrayN, target) {
    let leftIndex = 0;
    let rightIndex = arrayN.length - 1;
    
    while (leftIndex <= rightIndex) {
        const mid = parseInt((leftIndex + rightIndex) / 2);
        
        if (arrayN[mid] === target) {
            return '1';
        } else if (arrayN[mid] > target) {
            rightIndex = mid - 1;
        } else {
            leftIndex = mid + 1;
        }
    }
    
    return '0';
}

function solution(n, arrayN, m, arrayM) {
    let result = '';
    
    for (let i = 0; i < m; i++) {
        result += binarySearch(arrayN, arrayM[i]) + ' ';
    }
    
    console.log(result.trim());
}

solution(n, arrayN, m, arrayM);
  1. 9935 문자열 폭발
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'input.txt'
const input = fs.readFileSync(filePath).toString().trim().split('\n');

const inputString = Array.from(input[0]);
const bomb = input[1];

function solution(inputString, bomb) {
    const stack = new Array();
    const result = new Array();
    
    for (let i of inputString) {
        result.push(i);
        
        if (bomb.indexOf(i) !== -1) {
            stack.push(i);
        } else {
            for (let i = 0; i < bomb.length; i++) {
                stack.pop();
            }
        }
        
        if (stack.length >= bomb.length) {
            let temp = '';
            
            for (let i = bomb.length - 1; i >= 0; i--) {
                temp += stack[stack.length - 1 - i];
            }
            
            if (temp === bomb) {
                for (let i = 0; i < bomb.length; i++) {
                    stack.pop();
                    result.pop();
                }
            }
        }
    }
    
    if (result.length === 0) {
        console.log('FRULA');
    } else {
        console.log(result.join('').trim());
    }
}

solution(inputString, bomb);

속도가 너무 느리다 왜 느리지? 빠르게 나온 다른 사람들의 답안을 참고해봐야겠다.

나는 1200ms가 나오고, 속도가 빠르게 나온 사람들의 속도는 350ms 근처였다.

  1. 2231 분해합
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
let input = fs.readFileSync(filePath).toString().trim();
input = Number(input);
// let result = Number.MAX_SAFE_INTEGER;

function check(currentNumber, target) {
    currentNumber = Array.from(String(currentNumber));
    let sum = Number(currentNumber.join(''));
    
    for (let i = 0; i < currentNumber.length; i++) {
        sum += Number(currentNumber[i]);
    }
    
    if (sum === target) {
        return true;
    } else {
        return false;
    }
}

function solution(input) {
    let result = 0;
    
    for (let i = 1; i < input; i++) {
        if (check(i, input) === true) {
            result = i;
            break;
        }
    }
    
    console.log(result);
}

solution(input);

그냥 1부터 for문 돌게 했다... 이렇게 해도 풀릴까? 싶었는데 풀렸다. 1,000,000까지가 범위인 걸 보고 그냥 완전 탐색으로 돌렸는데 이게 맞나 싶다. 똥내나게 푼 것 같은데 이것도 역시 다른 사람 풀이를 참고해봐야겠다.

프로그래머스

  1. 숫자 문자열과 영단어(Level 1) (JavaScript)
function solution(s) {
    s = s.replace(/zero/gi, '0');
    s = s.replace(/one/gi, '1');
    s = s.replace(/two/gi, '2');
    s = s.replace(/three/gi, '3');
    s = s.replace(/four/gi, '4');
    s = s.replace(/five/gi, '5');
    s = s.replace(/six/gi, '6');
    s = s.replace(/seven/gi, '7');
    s = s.replace(/eight/gi, '8');
    s = s.replace(/nine/gi, '9');
    
    return Number(s);
}
  1. 실패율(Level 1) (JavaScript)
    flat하면서 바로 답을 도출할 수 있는, 한 번에 할 수 있는 방법이 있을 것 같은데...

CS

하루를 마치고

정글에서 파이썬으로 알고리즘을 풀었다보니, 요즘 자바스크립트로 풀면서 주저되는 생각이 자주 든다. '이거 파이썬으로 풀면 더 빨리 끝날 것 같은데...', '코테가서 파이썬으로 푸는 게 좋을 것 같은데...'

하지만 현실적으로, 냉정하게 보면 나는 프론트엔드를 하고 싶으니 자바스크립트로 풀어야 한다. 승준아 흔들리지 말자! 자바스크립트도 나름 할만하다! 메소드 여러 개 배우고 나중에 개발할 때에도 얼마나 유용하겠는가! ㅋ

대부분의 사람들이 파이썬이나 C++로 풀다보니 소외감을 느끼는 것도 사실이다. 도저히 안풀려서 정답을 보면 대부분 자바스크립트(Node.js)로 푼 경우는 다른 언어보다 확실히 적다. 후... 그래도 swift 요런 것 보다는 낫겠지!!!

profile
메타몽 닮음 :) email: alohajune22@gmail.com

0개의 댓글