1.정적메서드/값의 경우 static 선언을 해줘야 한다.
2.abstract 키워드를 추가해 메서드를 추상화할 수 있지만
추상 클래스에서만 사용할 수 있다고 하기 때문에
클래스 앞에도 abstract를 추가해야 한다.
또한 추상 클래스는 공통 메소드 또는 속성을 공유하게 할 수 있다.
3.싱글톤 패턴은 private 키워드를 생성자 앞에 붙여 private 생성자로 바꾼 다음 정적 메소드 선언을 통해 값을 생성 또는 불러오기하게 할 수 있으며 이를 통해 해당 생성자에서는 단 하나의 객체만 생성하게 고정할 수 있다.
4.인터페이스는 type alias(별칭)과 유사한 기능을 하지만 type을 붙이지 않고 할당 또한 하지 않는다는 미세한 차이가 있다.
type Something = { // type alias
value1 : string;
value2 : number;
print(phrase: string): void;
}
interface Something { //interface
value1 : string;
value2 : number;
print(phrase: string): void;
}
사용자 정의 타입은 유니온 등 유연한 사용이 가능하지만
인터페이스는 객체 유형을 정의한 후 implements를 통해
여러개를 동시에 상속받듯 사용할 수 있어
다른 클래스간의 기능 공유를 위해 사용된다.
인터페이스는 특정 기능이 반드시 들어가야 하는 경우들에
하위 속성을 강제함으로서 편리하면서 강력한 역할을 한다.
5.프로세스의 주소 공간은 코드, 데이터, 스택, 힙으로 나누어져 있으며
코드에는 프로그램 소스 코드를
데이터에는 전역 변수를
스택에는 함수와 지역변수를 저장한다.
힙은 위와는 조금 다르게 런타임 시점에 크기가 결정되며 동적 데이터를 저장한다.
데이터의 처리 방식에 따라 저장 방식을 구분해 처리 속도 및 메모리 사용량을 줄이기 위한 방식이다.
여기서 heap overflow와 유명한 stack overflow에 대해 알 수 있는데
프로세스의 공간은 code, data, heap, stack 순으로 구성되어 있는데
stack을 너무 쌓아서 위 영역을 침범할 경우 stack overflow가 되며
heap을 채워 내려가다 아래 영역을 침범할 경우 heap overflow가 된다.
(1).백준 14244 트리 만들기는 n개의 정점과 m개의 리프노드숫자를 제공할 경우 0~n-1까지 진행되는 정점(노드는 0)들의 간선을 출력하는 문제였다.
문제가 특이했지만 예시를 보고 이해하기 쉬웠는데
아쉬운 점은 정답은 여러가지가 될 수 있지만 예제에서는 모든 리프를 1에 떄려박는 방식이라는 것이었다.
물론 그래서 문제는 더 쉽게 해결할 수 있었다.
조건이 3개 이상의 정점이고 오름차순이기 때문에
'0 1', '1 2'의 간선 두개는 무조건 들어가며
그 이후에 m개의 리프를 요구할 때 i보다 m이 큰 경우에만
1에 노드를 연결하면 되는 문제였다.
let [a,b] = `5 3`.split(' ').map(Number)
let result = ['0 1', '1 2']
for(let i = 2 ; i < a-1 ; i++){
if(i < b){
result.push(1 + ' ' + (i+1))
}
else{
result.push(i + ' ' + (i+1))
}
}
console.log(result.join('\n'))
(2).프로그래머스 명예의 전당(1)은 점수별로 세워 지정 순위 미만은 퇴출시키며 현재 남아있는 순위권 최저점수를 계속해서 기록하는 문제였다.
첫번째로 최소힙을 떠올렸지만 구현하기 귀찮았고
두번째는 이분탐색을 적용하는 방식을 떠올렸지만 그것도 아주 조금 귀찮았다.
범위를 보니 이분탐색이나 그냥 정렬이나 큰 차이도 나지 않을 것 같아 구현해보니 3ms로 여유있게 통과했다.
배열에 계속 값을 넣고 정렬한 다음 전당 한도가 초과될 경우 pop하는 방식으로 처리하고 초과가 아닐 경우 배열 마지막 값(최저)을 출력했다.
function solution(k, score) {
let answer = [];
let list = []
for(let i = 0 ; i < score.length ; i++){
list.push(score[i])
list.sort((a,b) => b-a)
if(list.length > k){
list.pop()
}
answer.push(list[list.length-1])
}
return answer;
}

'회고' 카테고리의 다른 글
| [취업준비일지] - 37 (0) | 2022.11.26 |
|---|---|
| [취업준비일지] - 36 (0) | 2022.11.25 |
| [취업준비일지] - 34 (0) | 2022.11.23 |
| [취업준비일지] - 33 (0) | 2022.11.22 |
| [취업준비일지] - 32 (0) | 2022.11.21 |
