Skip to content

Latest commit

 

History

History
478 lines (322 loc) · 13.8 KB

note.md

File metadata and controls

478 lines (322 loc) · 13.8 KB

⚡️ 자바스크립트 코딩테스트 노트

목차

Javascript

  1. 입력받기

  2. 각 자리 수 구하는 식

  3. 반올림(round), 올림(ceil), 내림(floor)

  4. 문자열 배열을 숫자 배열로 바꾸기

  5. Reduce 함수 사용하기

  6. 배열에서 특정 값 개수 구하기

  7. Array.from()으로 0으로 초기화된 배열 생성하기

  8. 중복값 제거하기

  9. 배열에서 특정값 삭제하기

  10. 문자열

  11. 0부터 n까지 숫자범위 배열 생성하기

  12. 숫자 정렬

    • 오름차순, 내림차순
  13. 문자 정렬

    • 오름차순, 내림차순
  14. object에서 특정 값 찾기


Python

  1. 2차원 배열 만들기

Javascript

입력 받기

BOJ를 예로 들었습니다.

  • fs 모듈(한 줄 입력)
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split(' ');
  • fs 모듈(여러 줄 입력)
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().split('\n');
  • readline 모듈(한 줄 입력)
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

rl.on('line', function (line) {
  console.log(line);

  rl.close();
}).on('close', function () {
  // 문제 풀이
});

기본적으로 매개변수 line에 할당되는 것이 입력값이며, 문자열로 할당됩니다. 그리고 console.log(line);에 의해 입력 받은 값이 출력됩니다.

  • readline 모듈(여러 줄 입력)
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = [];

rl.on('line', function (line) {
  input.push(line);
}).on('close', function () {
  // 문제 풀이
});

각 자리 수 구하는 수식

  • 1의 자리에 있는 수 구하기: num % 10
  • 10의 자리에 있는 수 구하기: Math.floor(num / 10)
  • 1의 자리에 있는 수 10의 자리 수로 만들기 : (num % 10) * 10

반올림(round), 올림(ceil), 내림(floor)

  • 올림: Math.ceil(x)

    const ceil = Math.ceil(1.222); // 2
    const ceil_2 = Math.ceil(null); // 0
    const ceil_3 = Math.ceil(0); // 0
    const ceil_4 = Math.ceil(-1.777); // -1
    
    // 소수점 이하
    const ceil_5 = Math.ceil(1.222 * 10) / 10; // 1.3
    const ceil_6 = Math.ceil(1.222 * 100) / 100; // 1.23
    
    // 10단위, 100단위
    const ceil_7 = Math.ceil(1222 / 10) * 10; // 1230
    const ceil_8 = Math.ceil(1222 / 100) * 100; // 1300
  • 내림 : Math.floor(x)

    const floor = Math.floor(1.222); // 1
    const floor_2 = Math.floor(null); // 0
    const floor_3 = Math.floor(0); // 0
    const floor_4 = Math.floor(-1.777); // -2
    
    // 소수점이하
    const floor_5 = Math.floor(1.777 * 10) / 10; // 1.7
    const floor_6 = Math.floor(1.777 * 100) / 100; // 1.77
    
    // 10단위, 100단위
    const floor_7 = Math.floor(1777 / 10) * 10; // 1770
    const floor_8 = Math.floor(1777 / 100) * 100; // 1700
  • 반올림 : Math.round(x)

    const round = Math.round(1.222); // 1
    const round_2 = Math.round(null); // 0
    const round_3 = Math.round(0); // 0
    
    // 소수점이하
    const round_4 = Math.round(1.777 * 10) / 10; // 1.8
    
    // 10단위
    const round_5 = Math.round(1001 / 10) * 10; // 1000
    const round_6 = Math.round(1005 / 10) * 10; // 1010

문자열 배열을 숫자 배열로 바꾸기

보통 input.txt에서 받아온 데이터를 배열로 바꿔서 문제를 푸는데, split을 하면 패턴에 맞게 잘라진 값들이 숫자가 아닌 문자열로 들어가게된다. 원래부터 문자열 배열이었으면 문제 없지만 숫자가 문자열로 들어가면 골치가 아프다. 😤

이 때, split 함수뒤에 .map(Number) 만 써주면 자동으로 문자가 숫자로 바뀌어 배열로 들어가게 된다 👍🏻


Reduce 함수 사용하기

reduce() 메서드는 배열의 각 요소에 대해 reducer 함수를 실행한 뒤에 하나의 결과를 반환합니다.

reducer의 형태: (accumulator, currentValue) => (반환값)

  • 배열의 각 원소를 하나씩 확인하며, 각 원소는 currentValue에 해당합니다.
  • 반환값은 그 이후의 원소에 대하여 accumulator에 저장됩니다.
let data = [5, 2, 9, 8, 4];

// minValue 구하기 예제
let minValue = data.reduce((a, b) => Math.min(a, b));

console.log(minValue); // 2

// 원소의 합계 구하기 예제
let summary = data.reduce((a, b) => a + b);

console.log(summary); // 28

배열에서 특정 값 개수 구하기

  • filter()
const arr = ['a', 'b', 'c', 'a'];

// 배열에서 'a' 개수 구하기
let count = arr.filter((element) => 'a' === element).length;

console.log(count); // 2

배열에서 특정 조건에 부합하는 값들만을 모아서 새로운 배열로 리턴하는 함수. filter 함수는 callback 함수에서 true를 리턴하는 element들을 모아서 새로운 배열을 만들어서 리턴한다.


Array.from()으로 0으로 초기화된 배열 생성하기

// Array.from()으로 길이가 5, 값이 0인 배열 생성하기
const arr = Array.from({ length: 5 }, () => 0);
console.log(arr); // Array(5) [0, 0, 0, 0, 0]
console.log(arr[0]); // 0
console.log(arr.length); // 5

Array.from()의 첫번째 매개변수로 {length: 원하는 길이} 객체를, 두번째 매개변수로 원하는 값을 반환하는 콜백함수를 넘겨주면 된다.


중복값 제거하기

  • set()
const arrDup = ['라이언', '어피치', '프로도', '콘', '라이언', '프로도'];
const arrUnique = [...new Set(arrDup)];
console.log(arrUnique); // ['라이언', '어피치', '프로도', '콘']

자바스크립트의 셋(Set) 객체는 맵(Map) 객체에서 값이 없고 키만 있는 것으로 이해하면 된다. Set 객체 생성자는 배열을 인자로 받아서 중복이 없는 셋 객체를 반환하는 특징이 있고, 이 특징을 활용해서 중복이 없는 배열을 다시 만들 수 있다.

중복 있는 배열 -> 셋 -> 확산 연산자로 펼침 -> 배열로 생성 과정을 거쳐 중복 없는 배열이 만들어진다.

단 1줄의 코드로 배열의 중복을 없앨 수 있기 때문에 단순히 배열의 중복을 없애는 것이 목적이면 이 방법이 가장 효율적이다.


배열에서 특정값 삭제하기

배열 전체 값 삭제

let arr = ['a', 'b', 'c'];

// 배열의 첫번째 값 삭제
arr.shift();

console.log(arr); // ['b', 'c']
  • splice()
let arr = ['a', 'b', 'b', 'c'];

// 원소 'b' 삭제
for (let i = 0; i < arr.length; i++) {
  if (arr[i] === 'b') {
    arr.splice(i, 1);
    i--;
  }
}

반복문과 if문, splice() 함수를 이용하여 특정값을 삭제하는 코드이다. splice() 함수를 사용하면, 원본 배열의 원소가 삭제되고 배열의 길이가 변하기 때문에 splice() 함수를 사용해서 원소를 1개 삭제한 후에는, 배열의 index를 참조하는 i의 값을 하나 감소시킨 것(i--)에 주의해야함!

  • filter()
let arr = ['a', 'b', 'b', 'c'];

// 원소 'b' 삭제
let filtered = arr.filter((element) => element !== 'b');

console.log(arr); // ['a', 'b', 'b', 'c']
console.log(filtered); // ['a', 'c']

filter() 함수는 특정 조건에 부합하는 값만 모아서 새로운 배열을 만들어서 리턴한다. 위 코드는 배열 원소의 값이 'b'가 아닌 원소들을 가지고 새로운 배열을 만들었다.

배열에서 원하는 값 찾기

자바스크립트에서 배열에서 특정 값을 검색할 때, indexOf()와 includes()를 이용하여 쉽게 찾을 수 있다.

var a = [1, 2, 3, 4, 5, 1, 2, 3];

a.indexOf(3); //2
a.indexOf(6); //-1

indexOf()는 찾은 값의 첫번째 원소의 위치를 반환해주며, 없을 경우 -1을 리턴함.

var a = [1, 2, 3, 4, 5, 1, 2, 3];

a.includes(3); //true
a.includes(6); //false

includes()는 true / false 로 있다, 없다를 직관적으로 리턴해줌.

문자열

문자열을 배열로 변환하기

const input = ['ksekkset'];
const arr = Array.from(input);

console.log(arr); // ['k', 's', 'e', 'k', 'k', 's', 'e', 't']

Javascript에는 문자열을 한꺼번에 배열로 만들 때 편하게 처리해주는 from이라는 기능이 있음.

대문자, 소문자 변환

  • toUpperCase()

    let input = 'GooD';
    
    input = input.toUpperCase();
    console.log(input); // GOOD
  • toLowerCase()

    let input = 'GOOD';
    
    input = input.toLowerCase();
    console.log(input); // good

문자열 반대로 뒤집기

  • reverse()
// 전체 문자열 반대로 뒤집기
let name = 'kkimi';
let nameReverse = name.split('').reverse().join('');

console.log(`${name} => ${nameReverse}`);
// kkimi => imikk

// 중간 구분자를 가진 단어 리스트 반대로 뒤집기
let list = '구련, 임륭구, 최준웅';
let separate = list.split(' ,');

let listReverse = separate.reverse().join(',');

console.log(`${list} => ${listReverse}`);
// 구련, 임륭구, 최준웅 => 구련, 임륭구, 최준웅

특정 문자열 제거

특정 문자열 하나만 제거

replace()를 사용하면 특정 문자열의 첫번째로 발견된 것만 삭제된다.

let myStr = 'Hello! World!";
myStr = myStr.replace('!', '');

console.log(myStr); // Hello World!
특정 문자열 모두 제거

특정 문자열을 모두 찾아 제거하고 싶다면 정규표현식을 사용하면 된다.

let myStr = 'Hello! World!";
myStr = myStr.replace(/\!/g, '');

console.log(myStr); // Hello World

0부터 n까지 숫자범위 배열 생성하기

단순히 for문을 돌려서 배열을 만들 수도 있지만, 코드가 너무 길어진다. 짧은 코드로 생성할 수 있는 방법을 정리했다.

let range = [...Array(5)].map((v, i) => i);
let range2 = [...Array(5).keys()].map((i) => i);
let range3 = Array.from({ length: 5 }, (v, i) => i);

// 모두 [0,1,2,3,4] 출력

숫자 정렬

오름차순

const arr = [1, 55, 7, 45, 778];
const result = arr.sort((a, b) => a - b);

console.log(result); // [ 1, 7, 45, 55, 778 ]

내림차순

const arr = [1, 55, 7, 45, 778];
const result = arr.sort((a, b) => b - a);

console.log(result); // [ 778, 55, 45, 7, 1 ]

문자 정렬

오름차순

let arr = ['a', 'b', 'c', 'd'];
arr.sort((a, b) => (b > a ? -1 : 1));

내림차순

let arr = ['a', 'b', 'c', 'd'];
arr.sort((a, b) => (a > b ? -1 : 1));

2차원 배열을 1차원 배열로 전환

reduce

const arr = [
  ['a', 'b'],
  ['c', 'd'],
  ['e', 'f'],
];

const arr2 = arr.reduce(function (acc, cur) {
  return acc.concat(cur);
});

console.log(arr2); // [ 'a', 'b', 'c', 'd', 'e', 'f' ]

object에서 특정 값 찾기

find 활용하기

function sol(obj, value) {
  Object.keys(obj).find((key) => obj[key] === value);
}

Python

2차원 배열 만들기

# 리스트 컴프리헨션 사용하기
# 3 x 4 배열, 모든 값을 0으로 초기화

rows = 3
cols = 4
arr = [[0 for _ in range(cols)] for _ in range(rows)]