회고

[취업준비일지] - 24

Happy Programmer 2022. 11. 13. 23:57

1.if else 리팩토링을 위해 범위를 좁히는 도중 미만, 초과값들의 범위가 벗어나는 경우는 Math.min, Math.max를 합쳐 최저, 최대값을 고정시킬 수 있다. 
해당 값들을 객체 또는 배열로 대응시킨 다음 사용할 수 있다.

if else => switch => 객체 => 배열 순서로 개선되는 과정을 볼 수 있다.


2.class는 아래와 같은 형태로 만들 수 있는데 constructor에 들어가는 값들에 영향을 받는다.

class Department {
   name
   
   constructor(x){
     this.name = x
   }
}

 

const accounting = new Department("Accounting")
=> accounting = {name = "Accounting"}

또한 메서드를 추가하고 싶으면 constructor 하단에
methodName(){} 형태의 함수를 만든 다음
아까 만든 클래스 accounting에 .methodName()을 통해 
해당 클래스에 메서드를 적용시킬 수 있다.

클래스의 this에 타입을 지정하고 싶다면
this: Department(클래스명) 방식으로 메서드의 매개변수에 넣어줄 수 있다.

메서드를 사용하지 않고 내부 값을 통제하는 것을 막기 위해서
private를 보호하고 싶은 데이터 앞에 붙여줄 수 있다.
메서드가 아닌 값의 접근을 막아줘 데이터를 통제하기 용이하다.


3.XML은 eXtensible Markup Language의 약자로 
이름에서 볼 수 있듯 목적에 따라 확장 가능한 마크업 언어다.

HTML과 같이 태그를 사용한 트리 구조로 되어있으며
독자적으로 확장된 태그가 있어 HTML보다 해석이 용이하다.


4.Json은 JavaScript Object Notation의 약자로 
JS의 오브젝트 표기법을 바탕으로 데이터를 다루는 기술 언어로
JSON은 단순하고 가볍게 사용 가능하다는 장점이 있다. 


5.HTTP는 구조가 단순한 프로토콜이었기 때문에 
사용할 떄 여러 장점이 있지만 보안면에서는 취약했다.

리퀘스트를 클라이언트에서 변조할 수 있기 때문에
리퀘스트에 공격 코드를 넘기거나 
리퀘스트에 담긴 정보등을 탈취당할 수 있었다.

웹앱을 공격하는 패턴은 능동/수동으로 분류되는데
능동적 공격은 공격자가 직접 액세스해 코드를 보내는 방식으로
대표적으로 SQL 인젝션과 OS 커맨드 인젝션 등이 있다.

또한 수동적 공격에는 속임수를 사용해 
사용자가 직접 악성 코드를 실행하게 만드는 방식을 사용한다.
대표적으로 크로스 사이트 스크립팅(XSS), 크로스 사이트 리퀘스트 포저리(CSRF) 등이 있다.

또한 수동적 공격을 통해 인트라넷에 연동된 인터넷에서
인트라넷 접속 권한이 있는 컴퓨터의 정보를 탈취할 수 있다.


6.연결리스트는 자바스크립트와는 다르게 특정 언어들은 배열의 크기를 고정해 사용해야 한다.
그런 문제를 가지고 있어 데이터의 삽입, 삭제에 비용이 많이 든다는 단점이 있어 시작점부터 하나씩 연결해 다음 위치로 넘어가는 방식으로 데이터를 관리한다.

이런 방식을 사용할 경우 앞, 뒤의 데이터를 추가/삭제할 때 시간복잡도로 O(N)만 소모할 수 있지만 임의 접근이 불가능해 이진탐색등이 불가능하고 포인터의 메모리 공간을 차지하며 길이 등을 따로 관리하지 않는 이상 길이 조회를 위해서는 전체를 조회해야 한다는 등의 단점이 있다.

또한 자바스크립트의 경우 push, pop은 시간복잡도 O(1)로 처리할 수 있기 때문에 스택을 구현할 경우 굳이 연결리스트를 만들 필요조차 없다.
(큐는 O(N)이므로 데이터의 규모에 따라 필요하다)





(1).백준 3034 앵그리 창영은 문제 수준이 많이 떨어지는데
쓸대없는 사족을 한참 떠든 다음 
결국은 성냥이 들어갈 수 있는 최대 길이를 구하라는 문제였다.
힌트랍시고 앵그리버드 노래 동영상을 넣어둔 부분이 제일 한심했다.

가로의 제곱+세로의 제곱을 

let input = `5 3 4
3
4
5
6
7`.split('\n')

let [n,a,b] = input[0].split(' ').map(Number)
let result = []

for(let i = 1 ; i <= n ; i++){
    if(a**2 + b**2 >= Number(input[i])**2){
        result.push("DA")
    }
    else{
        result.push("NE")
    }
}

console.log(result.join('\n'))