1.객체의 키 추가는 꽤나 큰 시간복잡도를 가지기 때문에 객체의 사용 시 주의해야 한다.



2.SQL 인젝션은 SQL을 조작해 구문을 파괴하여 인증 회피, 프로그램 실행, 열람, 변조 등의 작업을 하는 것등을 말한다.

쿼리문에 (' --) 등을 추가해 내부에서 --(주석)처리가 되게 만드는 방식으로 조건을 무시하고 모든 데이터를 조회하는 등으로 사용되기도 한다.


3.OS 커맨드 인젝션은 SQL과 유사하지만 OS커맨드의 구문을 파괴하는 방식으로 실행된다.


4.HTTP 헤더 인젝션 또한 헤더의 구문을 파괴하는 방식을 사용하며
쿠키, 리다이렉트, 바디등이 영향을 받을 수 있다.


5.HTTP 리스폰스 분할 공격은 HTTP 헤더 인젝션을 응용한 공격으로 개행문자를 두개 연속해 보내 헤더와 바디를 나누는 빈 행을 만들어 기존 바디는 주석으로 변하고 헤더와 주석 사이에 가짜 바디를 넣어 보내는 방식이다.

이를 통해 유저에게 원하는 내용을 보게 만들어
개인정보등을 기입하게 할 수 있다.


6.스택은 LIFO로 후입선출법의 형태를 가지고 있다.
자바스크립트에서는 배열의 크기를 지정할 필요가 없기 때문에
isEmpty나 isFull을 사용할 필요가 없지만 타 언어에서는 사용하는 것 같고
크기확장 또한 추가적으로 진행해야 한다.
또는 연결리스트로 구현도 가능하다.


7.큐는 스택과 반대로 FIFO의 선입선출법 형태를 가지고 있는데
일반적 예시로는 톨게이트, 줄서기 등이 있다.





(1).백준 1837번 암호제작 문제는 정답률 26%인 문제였는데 생각보다 조금 까다로웠다.
암호는 4~10의 100승으로 BigInt를 반드시 사용해야 했지만 처음에는 사용하지 않고 진행했다.
(10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
,000,000,000,000,000,000,000,000,000,000)

최대 10의100승인 암호는 두 소수의 곱으로 이루어져 있는데
작은 소수가 주어진 k값보다 작을 경우 `BAD ${소수}`로 출력되고
k보다 작은 소수로 나눠지지 않을 경우 GOOD을 출력하는 문제였다.

처음에는 BigInt를 생각하지 않고 
에라토스테네스의 체만 생각해 문제를 해결했지만 
당연히 바로 실패할 수 밖에 없었다.(Number 범위 초과)
처음 제출한 내용은 예제들은 진행됐지만
안타깝게 실패하고 바로 BigInt를 떠올릴 수 있었고

let [num, k] = '77 12'.split(' ').map(Number)
let arr = new Array(k).fill(1)
let result = "GOOD"
for(let i = 2 ; i <= k ; i++){
    if(arr[i]){
        if(num%i === 0){
            result = `BAD ${i}`
            break
        }
        let n = 2
        while(i*n <= k){
            arr[i*n] = 0
            n++
        }
    }
}

console.log(result)


이미 있는 코드에 BigInt를 씌우려고 하니 에러가 나는 문제는 있었지만
잘 확인한 다음 암호만 BigInt로 대체해 해결했다.

let input = '77 12'.split(' ')
let num = BigInt(input[0])
let k = Number(input[1])

let arr = new Array(k).fill(1)
let result = "GOOD"
for(let i = 2 ; i <= k ; i ++){
    let bigI = BigInt(i)
    if(arr[i]){
        if(num%bigI === 0n){
            result = `BAD ${i}`
            break
        }
        let n = 2
        while(i*n <= k){
            arr[i*n] = 0
            n++
        }
    }
}
console.log(result)

 

'회고' 카테고리의 다른 글

[취업준비일지] - 28  (0) 2022.11.17
[취업준비일지] - 27  (1) 2022.11.16
[취업준비일지] - 25  (0) 2022.11.14
[취업준비일지] - 24  (0) 2022.11.13
[취업준비일지] - 23  (0) 2022.11.12

+ Recent posts