[JS] 알고리즘 문제 풀이 용 자바스크립트 문법 (업데이트 중)

2024. 6. 1. 15:23·백준 알고리즘/기타
728x90

평소에 웹 개발을 하며 자바스크립트는 자주 사용했지만 이번 코테에 자바스크립트를 쓰려고 하니 생소한 부분이 있어서 코테용 자바스크립트 문법을 정리해보려고 한다.

 

입출력

입력은 기본적으로 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');
728x90

'백준 알고리즘 > 기타' 카테고리의 다른 글

[백준 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
'백준 알고리즘/기타' 카테고리의 다른 글
  • [백준 17386][파이썬] 선분 교차 1
  • [백준 1927][파이썬] 최소 힙. 파이썬 heapq 모듈 사용법 (우선순위 큐)
  • [백준 1629][파이썬] 곱셈
  • [백준 1541][파이썬] 잃어버린 괄호
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    bfs
    AWS Lambda
    nn.RNN
    ChatPromptTemplate
    openvidu 배포
    ci/cd
    RNN
    스프링 OAuth2
    code tree
    파이썬
    embedding
    스택
    Merge
    다익스트라
    parametric search
    influxDB CLI
    binary search
    codetree
    Vector Store
    푸쉬 알람
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[JS] 알고리즘 문제 풀이 용 자바스크립트 문법 (업데이트 중)
상단으로

티스토리툴바