1.인덱스 속성은 [props : type] : type 형태로 지정해줄 수 있으며
interface 등을 선언할 때 내부에 어떤 값이 들어갈지 확실하지 않을 경우
해당 타입에 들어가야 할 키의 타입과 값의 타입을 선언하는 방식이다.
키는 문자열로 처리되기 때문에 숫자 등을 사용한다고 해도 상관이 없지만
값은 문자열 처리가 아닌 그대로 사용되기 때문에 string type을 배정한 경우
number type의 값을 사용할 수 없다.
또한 boolean을 키에 사용할 수 없다.
2.타입 오버로드는 유니온 속성 등을 사용해서 작업을 진행할 경우
일차적으로 처리를 할 경우 타입가드를 통해 인식되지만
타입가드로 처리된 결과를 할당받은 변수의 타입을 알 수 없기 때문에
형 변환 처리를 해 데이터를 하나하나 처리하기 힘들 경우 사용된다.
function(a:string|number, b:string|number){} 형태의 경우
함수 위에 어떤 입력의 경우 어떤 타입이 나오는지에 대해 정의한다.
function(a:string, b:string): string;
function(a:number, b:number): number;
function(a:string|number, b:string|number){}
위 내용은 모두 최하단 하나의 함수의 타입에 관여한다.
3.선택적 체이닝은 어떤 데이터가 올지 확정되지 않은 경우 요소 다음에 '?'를 추가하는 방식으로 사용할 수 있다.
자바스크립트의 경우 if(a && a.b && a.b.c)형태로 접근하는 것을
선택적 체이닝을 통해 a?.b?.c 형태로 접근할 수 있다.
4.데이터를 처리할 때 let a = b || c로 처리할 경우 b가 false값(undefined, null, '', 0, false)인 경우 c로 대체되는데
null병합을 사용할 경우 let a = b ?? c로 사용할 수 있으며
b가 undefined 또는 null일 때만 c로 대체되고 나머지는 b로 표기된다.
5.제네릭은 <> 내부에 type을 채워 설정할 수 있으며 이를 통해 추론이 가능해진다.
또한 제네릭 함수의 경우 설정된 타입등을 보며 자동적으로 반환될 타입은 입력 타입들의 인터섹션이라고 인식한다.
제네릭 함수를 사용할 때 특정 타입임을 강조하고 싶다면
X extends object와 같은 방식으로 객체가 들어가야 함을 나타낼 수 있다.
이를 제네릭 제약 조건 설정이라고 한다.
6.System Call은 응용프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스로 직접 시스템 호출을 사용할 수 없는 프로그램이 api를 통해 호출에 접근하는 방식으로 기능에 따라 여러가지의 기능 및 명령어가 있다.
프로세스의 생성 및 제어
fork() - 생성
exit() - 종료
wait() - 대기
파일의 관리
open() - 생성
read() - 읽기
write() - 쓰기
close() - 닫기
정보관리
getpid() - 현제 프로세스 id 가져오기
alarm() - 알람설정
sleep() - 호출 중 프로세스 대기
(1).백준 2941 크로아티아 알파벳 문제는 크로아티아 알파벳을 감지해 총 몇개의 알파벳으로 이루어져 있는지를 묻는 문제 같다.
크로아티아 알파벳이라는게 따로 존재하는건지 일반 알파벳들도 포함된 것을 왜 몇 개의 크로아티아 알파벳으로 이루어졌는지 묻는지는 모르겠다.
첫 시도는 크로아티아 알파벳만 조회하려고 했으며
split, join 조합으로 해결하는건 너무 단순했기 때문에
문자열 조회 후 해당 글자 감지시 더하는 방식으로 가려고 했으나
일반 알파벳도 포함되어 있다는 사실을 모르고 해서 무한루프에 걸려버렸다.
let input = `dz=ak`.split('dz=').join('a').split('lj').join('a').split('nj').join('a').split('-').join('').split('=').join('')
let sum = 0
let alphabet = {"c=":1 , "c-":1, "dz=":1 , "d-":1, "lj":1, "nj":1, "s=":1, "z=":1}
for(let i = 0 ; i < input.length ; i++){
let now = input[i]
// while (alphabet[now] !== 1) {
// now += input[i + now.length]
// }
console.log(alphabet[input[i]+input[i+1]])
sum++
i += now.length-1
}
console.log(sum)
문제점을 살펴보니 일반 알파벳이 끼어들어 루프 탈출조건을 만족하지 않았다.
그렇다고 a, c, d같은 글자를 바로 인식해버리면 3글자까지 가기 전에 이미 처리되어버린다.
크로아티아 알파벳 규칙을 보니 =, - 부분은 문자의 갯수에 딱히 영향을 주지 않았고 dz=, lj, nj 3개만 길이에 영향을 주는 것을 확인한 다음
세가지를 1글자로 치환(여기서는 a)하고 =, -도 공백처리한 다음 길이를 반환해 갯수를 확인할 수 있었다.
let input = `dz=ak`.split('dz=').join('a').split('lj').join('a').split('nj').join('a').split('-').join('').split('=').join('')
console.log(input.length)'회고' 카테고리의 다른 글
| [취업준비일지] - 39 - 스터디 프로젝트 1일차 (0) | 2022.11.28 |
|---|---|
| [취업준비일지] - 38 (0) | 2022.11.27 |
| [취업준비일지] - 36 (0) | 2022.11.25 |
| [취업준비일지] - 35 (1) | 2022.11.24 |
| [취업준비일지] - 34 (0) | 2022.11.23 |
