평소에 웹 개발을 하며 자바스크립트는 자주 사용했지만 이번 코테에 자바스크립트를 쓰려고 하니 생소한 부분이 있어서 코테용 자바스크립트 문법을 정리해보려고 한다.
입출력
입력은 기본적으로 fs 모듈의 readFileSync를 사용한다.
그리고 입력 양 끝에 공백 혹은 newline이 있을 때를 대비해서 trim()을 붙이는게 좋다.
하지만 주로 파일을 읽을 때 사용하는 것이라서 알고리즘 문제 풀이를 위해서 적절한 타입으로 변환해야 한다.
1. 문자열 입력
const fs = require("fs");
const input = fs.readFileSync(0).toString().trim();
2. 숫자 입력
const fs = require("fs");
const input = Number(fs.readFileSync(0).toString().trim());
3. 여러 줄 입력
newline으로 split
const fs = require('fs');
const input = fs.readFileSync(0).toString().trim().split('\n')
3. 여러 줄의 숫자 입력
문자열을 split으로 분리하고 map으로 Number로 변환
const fs = require('fs');
const input = fs.readFileSync(0).toString().trim().split('\n').map((item)=>Number(item));
4. 구조 분해 할당
지금까지는 배열에 저장하였는데 이를 바로 변수로 받을 수도 있다.
const fs = require('fs');
const [ a, b ] = fs.readFileSync(0).toString().trim().split('\n').map((item)=>Number(item));
연산
1. 소숫점 반올림
실수의 소숫점을 고정할 수 있다.
만약 toFixed(2)라고 한다면 소숫점 세 번째 자리에서 반올림하여 소숫점을 두 자리로 고정한다.
const a = 1.236
console.log(a.toFixed(1))
console.log(a.toFixed(2))
출력
1.2
1.24
2. 합계
자바스크립트는 기본적으로 sum과 같은 합계를 구하는 내장 함수가 없다.
대신 reduce를 사용해서 합계를 구현할 수 있다.
arr= [1, 2 ,3];
const sum = arr.reduce((acc, num) => acc+num);
reduce를 사용해서 모든 요소를 곱하는 것도 가능하다.
arr= [1, 2 ,3];
const sum = arr.reduce((acc, num) => acc*num);
두 번째 인자로 초기값을 넣어줄 수도 있다.
3. 평균
역시 reduce를 사용해서 구할 수 있다.
arr= [1, 2 ,3];
const sum = arr.reduce((acc, num) => acc*num);
const average = sum/arr.length
배열
1. 2차원 배열 입력
const fs = require('fs')
const input = fs.readFileSync(0).toString().trim().split('\n')
const arr = input.map((temp)=>temp.split(' ').map(Number))
newline을 기준으로 split 하고 그 배열을 돌면서 다시 한 번 공백을 기준으로 split하면 된다.
2. 2차원 배열 생성
N x N 크기의 2차원 배열의 모든 값을 0으로 초기화하여 생성해보자.
let arr = Array(n).fill(0).map((item)=>Array(n).fill(0))
3. 2차원 배열 깊은 복사
map을 통해 원본 2차열 배열을 돌면서 전개 연산자를 통해 새로운 배열을 만들어주면 된다.
const temp = arr.map((item)=>[...item])
자료구조
1. Map
자바스크립트의 Map은 key-value 쌍을 저장할 수 있는 자료구조로 삽입, 조회, 삭제, 키 존재 여부를 파악할 때의 시간 복잡도가 O(1)이다.
1. 생성
const map = new Map()
2. 삽입
map.set("key", "value")
3. 조회
map.get("key")
4. 삭제
map.delete("key")
5. 키 존재 여부
map.has("key")
2. Set
자바스크립트의 Set은 중복된 값을 허용하지 않는 자료구조로 삽입, 조회, 삭제, 키 존재 여부를 파악할 때의 시간 복잡도가 O(1)이다.
1. 생성
const map = new Set()
2. 삽입
set.add("value")
3. 조회
set.has("value")
4. 삭제
set.delete("delete")
5. 키 존재 여부
map.has("key")
정렬
자바스크립트에서는 sort 메소드를 사용하여 배열을 정렬할 수 있다.
그런데 기본적으로 sort는 내부 요소들을 문자열로 변환하는 과정이 있기 때문에 정수 배열의 경우 원하는 결과를 얻지 못할 수 있다.
이 때 정렬 기준을 콜백 함수로 넣어주면 된다.
1. 오름차순
const arr = [1, 2, 3, 7, 54]
arr.sort((a, b)=>a-b)
2. 내림차순
const arr = [1, 2, 3, 7, 54]
arr.sort((a, b)=>b-a)
다만 문자열들의 배열을 사전 순으로 정렬해야 한다면 위와 같은 방식으로 할 수 없다.
문자열들을 사전 순으로 정렬할 때는 비교 연산자를 사용해야 한다.
1. 사전 순 오름차순
const arr = ['f', 'a', 'c', 'd', 'e']
arr.sort((a, b)=>{
if (a > b){
return 1;
}
else {
return -1;
}
}
)
2. 사전 순 내림차순
const arr = ['f', 'a', 'c', 'd', 'e']
arr.sort((a, b)=>{
if (a < b){
return 1;
}
else {
return -1;
}
}
)
아스키 코드 변환
문자 -> 아스키 코드 변환 (charCodeAt)
'A'.charCodeAt();
아스키 코드 -> 문자 변환 (fromCharCode)
String.fromCharCode(97)
문자열 순회
"abc"라는 문자열을 순회하면서 각 문자들을 출력해보자.
for, of 사용
const s = "abc";
for (let char of s){
console.log(char);
}
배열로 변환 후 배열 순회
const s = "abc";
[...s].forEach((char)=>{
console.log(char);
});
문자열 문자 찾기
문자가 처음으로 등장하는 인덱스
"abcdcba".indexOf('a');
문자가 마지막으로 등장하는 인덱스
"abcdcba".lastIndexOf('a');
'백준 알고리즘 > 기타' 카테고리의 다른 글
[백준 17386][파이썬] 선분 교차 1 (0) | 2023.04.25 |
---|---|
[백준 1927][파이썬] 최소 힙. 파이썬 heapq 모듈 사용법 (우선순위 큐) (0) | 2023.03.13 |
[백준 1629][파이썬] 곱셈 (0) | 2023.02.28 |
[백준 1541][파이썬] 잃어버린 괄호 (0) | 2023.02.27 |
[백준 10986][파이썬] 나머지 합 (0) | 2023.02.21 |
댓글