🧠 코딩 테스트를 위한 JavaScript 문법 정리
원래는 Python으로 코딩 테스트를 준비해왔지만, 이번 기업은 JavaScript만 사용 가능한 상황. 다른 기업들도 특정 언어만 허용하는 경우가 많기 때문에, 이번 기회에 JS로도 코테 문제를 풀 수 있도록 준비해보자.
📥 입력 처리
js
복사편집
const fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');
예시 입력
csharp
복사편집
string 5
input 값:
js
복사편집
['string', '5']
split(' '): 공백 기준 분리- 문자열 → 숫자 변환 필요 시
Number(input[1])등으로 처리
🔤 문자열 처리
✅ 문자열 반복
js
복사편집
"abc".repeat(3); // "abcabcabc"
✅ 문자열 슬라이싱
js
복사편집
const str = "HelloWorld";
str.slice(0, 5); // "Hello"
str.slice(5); // "World"
str.slice(2, 7); // "lloWo"
✅ 대소문자 처리
js
복사편집
let s = "Hello World";
s.toLowerCase(); // "hello world"
s.toUpperCase(); // "HELLO WORLD"
// 대소문자 반전
let swapped = "";
for (let ch of s) {
swapped += (ch === ch.toLowerCase()) ? ch.toUpperCase() : ch.toLowerCase();
}
// 결과: "hELLO wORLD"
🔁 반복문
✅ 기본 for문
js
복사편집
for (let i = 0; i < 5; i++) {
console.log(i); // 0 1 2 3 4
}
✅ forEach
js
복사편집
arr.forEach((value, index, array) => {
// value: 요소 값
// index: 요소 인덱스
// array: 원본 배열
});
✅ for-of
js
복사편집
let arr = ['a', 'b', 'c'];
for (let value of arr) {
console.log(value); // a b c
}
🔢 정렬
✅ 문자열 정렬
js
복사편집
let arr = ['banana', 'apple', 'cherry'];
arr.sort();
// 결과: ['apple', 'banana', 'cherry']
✅ 숫자 정렬
기본 sort()는 문자열 기준이라 숫자를 정렬하려면 비교 함수를 써야 함.
js
복사편집
let nums = [10, 2, 33, 25];
nums.sort((a, b) => a - b); // 오름차순
// 결과: [2, 10, 25, 33]
자바스크립트 자료구조
📦 배열 (Array)
js
복사편집
let arr = [1, 2, 3, 4, 5];
| 메서드 | 설명 | 예시 | 결과 |
| push() | 뒤에 요소 추가 | arr.push(6) | [1,2,3,4,5,6] |
| pop() | 뒤에서 요소 제거 | arr.pop() | [1,2,3,4], 반환값 5 |
| shift() | 앞에서 요소 제거 | arr.shift() | [2,3,4,5], 반환값 1 |
| unshift() | 앞에 요소 추가 | arr.unshift(0) | [0,1,2,3,4,5] |
| slice(start, end) | 잘라내기 (원본 보존) | arr.slice(1, 3) | [2,3] |
| splice(start, deleteCount, ...items) | 배열 중간 삭제/추가 (원본 변경) | arr.splice(2, 1, 9) | [1,2,9,4,5]즉, 인덱스 2의 값 1개를 지우고 그 자리에 9를 넣음 |
| sort((a,b)=>a-b) | 정렬 (숫자는 비교 함수 필수) | arr.sort((a,b)=>a-b) | [1,2,3,4,5] |
| reverse() | 배열 뒤집기 | arr.reverse() | [5,4,3,2,1] |
| map() | 요소 변형 | arr.map(x => x * 2) | [2,4,6,8,10] |
| filter() | 조건 필터링 | arr.filter(x => x % 2 === 0) | [2,4] |
| reduce() | 누적 합 등 | arr.reduce((a, b) => a + b, 0) | 15 ← 파이썬의 sum() |
📋 집합 (Set)
js
복사편집
let s = new Set([1, 2, 3]);
| 메서드 | 설명 | 예시 | 결과 |
| add(val) | 값 추가 | s.add(4) | Set {1,2,3,4} |
| delete(val) | 값 삭제 | s.delete(2) | true, Set: {1,3} |
| has(val) | 값 존재 여부 | s.has(3) | true |
| size | 요소 개수 | s.size | 3 |
| Array.from(set) | 배열로 변환 | Array.from(s) | [1,2,3] |
📑 맵 (Map) - 파이썬의 딕셔너리
js
복사편집
let m = new Map();
m.set('a', 1);
m.set('b', 2);
| 메서드 | 설명 | 예시 | 결과 |
| set(key, val) | 값 저장 | m.set('c', 3) | Map {'a' => 1, 'b' => 2, 'c' => 3} |
| get(key) | 값 얻기 | m.get('a') | 1 |
| has(key) | 키 존재 확인 | m.has('b') | true |
| delete(key) | 키 삭제 | m.delete('b') | true |
| size | 요소 개수 | m.size | 2 |
| Object.fromEntries(m) | 객체로 변환 | { a: 1, c: 3 } |
📚 객체 (Object) - 파이썬 dict 역할
Map과의 차이점은 객체는 반드시 키값이 문자열이다.
js
복사편집
let obj = { a: 1, b: 2 };
| 메서드 | 설명 | 예시 | 결과 |
| obj['a'] | 값 접근 | obj['a'] | 1 |
| obj['c'] = 3 | 값 추가 | {a:1, b:2, c:3} | |
| delete obj['b'] | 키 삭제 | {a:1} | |
| Object.keys(obj) | 키 배열 | ['a', 'b'] | |
| Object.values(obj) | 값 배열 | [1, 2] | |
| Object.entries(obj) | [key, val] 쌍 배열 | [ ['a', 1], ['b', 2] ] |
🪟 슬라이딩 윈도우
js
복사편집
let arr = [1, 2, 3, 4, 5];
let k = 3;
let maxSum = 0;
for (let i = 0; i <= arr.length - k; i++) {
let window = arr.slice(i, i + k);
let sum = window.reduce((a, b) => a + b, 0);
maxSum = Math.max(maxSum, sum);
}
console.log(maxSum); // 12
🔁 조합, 순열
조합과 순열은 기본 문법에 없으므로 함수로 구현해야 합니다.
js
복사편집
function combinations(arr, r) {
if (r === 0) return [[]];
if (arr.length < r) return [];
const [head, ...rest] = arr;
const withHead = combinations(rest, r - 1).map(c => [head, ...c]);
const withoutHead = combinations(rest, r);
return withHead.concat(withoutHead);
}
combinations([1,2,3], 2); // [[1,2],[1,3],[2,3]]
🧷 덱 (Deque)
JS에는 내장 Deque가 없지만 배열로 구현 가능.
js
복사편집
let deque = [];
deque.push(1); // 오른쪽 추가
deque.unshift(2); // 왼쪽 추가
deque.pop(); // 오른쪽 제거
deque.shift(); // 왼쪽 제거
'JavaScrpit' 카테고리의 다른 글
| JavaScrpit Event, 동기, 비동기 통신 (2) | 2024.12.02 |
|---|