Giter Club home page Giter Club logo

algorithmwithjavascript's Introduction

Algorithm with JavaScript


Know How

  • How to Input with BOJ

const input = require("fs")
    .readFileSync("/dev/stdin")
    .toString()s
    .trim()
    .split("\n");

const [n, m, v] = input[0].split(" ").map(Number);
const mulitpleInput = input[1].split(" ").map(Number);
  • How to Test

// const input = require("fs")
//     .readFileSync("/dev/stdin")
//     .toString()
//     .trim()
//     .split("\n");
const input = `5 5 3
5 4
5 2
1 2
3 4
3 1`.split("\n");

const [n, m, v] = input[0].split(" ").map(Number);
  • How to Make Array with size

const oneDimension = Array(size).fill(false);

const twoDimension = Array.from(Array(ySize), () => Array(xSize).fill(false));
  • sort without compareFunction

    • compareFunction이 제공되지 않으면 요소를 문자열로 변환하고 유니 코드 코드 포인트 순서로 문자열을 비교하여 정렬된다.
const l = [1, 3, 2];

// it became string
l.sort();

// it became number
l.sort((a, b) => a - b);

var items = [
  { name: "Edward", value: 21 },
  { name: "Sharpe", value: 37 },
];

items.sort((a, b) => {
  if (a.value > b.value) {
    return 1;
  }
  if (a.value < b.value) {
    return -1;
  }
  // a must be equal to b
  return 0;
});
  • BigInt

    • 2(53) - 1보다 큰 정수를 표현할 수 있는 내장 객체
    • 정수 뒤에 n을 붙이거나 BigInt를 호출하여 생성 가능
const theBiggestInt = 9007199254740991n;

const alsoHuge = BigInt(9007199254740991);
  • For loop

// basic for
for (let i = 0; i < 5; i++) {}

let arr = [3, 5, 7];
arr.foo = "hello"; // it become [1, 2, 3, foo: "hello"]

// for ... in (속성 이름을 통해)
for (let i in arr) {
  console.log(i);
} // logs 0, 1, 2, "foo"

// for ... of (속성 값을 통해)
for (let i of arr) {
  console.log(i);
} // logs 3, 5, 7
  • Array to String

const elements = ["hi", "cat", "dog"];

// 요소를 나타내는 문자열
console.log(elements.toString()); // "hi,cat,dog"

// 모든 요소를 연결
console.log(elements.join()); // "hi,cat,dog"

console.log(elements.join("")); // "hicatdog"

console.log(elements.join("-")); // "hi-cat-dog"
  • Insert, Delete by Index

const arr = [1, 3, 4, 5];
// splice(index, deleteCount, items...)
arr.splice(1, 0, 2);
console.log(arr); // [1, 2, 3, 4, 5]

arr.splice(3, 1);
console.log(arr); // [1, 2, 3, 5]
  • Array containing 0..N

Array.from(Array(5).keys());
// [0, 1, 2, 3, 4]

[...Array(5).keys()];
// [0, 1, 2, 3, 4]

Log

21.2.20

  • BOJ 18883

    정수 n, m을 입력받은 후 n개의 줄을 출력한다. 각 줄에는 1부터 n*m까지 출력하며 각 줄에는 m개의 수가 있어야한다. 매우 간단한 문제지만 출력 부분 각 줄마다 좌우 공백이 없어야하는 조건 때문에 여러번 WA 결과를 받게 되었다. 결국 각 줄을 담당하는 문자열과 전체 정답을 담당하는 문자열형 배열을 만들어 trim한 값을 추가, 출력시에도 trim하여 CA를 받게 되었다. 두 번째 풀이는 각 줄 마다 출력하여 풀었다. console.log도 파이썬의 print와 마찬가지로 자동적으로 개행을 포함하는 것을 알았다.

  • BOJ 10867

    n개의 정수로 이루어진 수열을 입력받은 후 중복된 수를 제외하고 오름차순으로 정렬하여 출력하는 문제. Set을 이용하여 중복되는 수들을 지운 후 Array.from을 이용하여 다시 Array로 만든 후 compareFunction을 이용하여 오름차순으로 출력하여 풀었다.

  • BOJ 9656

    n개의 돌을 1개 혹은 3개 가져가는 게임을 두 명이 한다. 모든 수를 완벽하게 할 시 이기는 사람의 이름을 출력하는 문제. 파이썬을 이용하여 풀었던 돌 게임 문제와 승패규칙만이 다른 문제. n이 홀수 짝수인지에 따라 정답이 달라져 나머지 값을 비교하여 풀었다.

  • BOJ 14495

    점화식이 문제에 써있는 단순 dp 구현 문제. Array의 크기를 먼저 생성후 하는 방법, Push하는 방법으로 풀어봤으나 모두 WA 결과를 받게되었다. 다른 사람의 풀이를 보니 n이 커질 시 BigInt형으로 연산을 해야 풀리는 문제였다.

  • BOJ 1463

    n을 3으로 나누고, 2로 나누고, 1로 뺄 수 있을 때 1로 만들 수 있는 최소 연산의 수를 출력하는 문제. 첫 번째 풀이는 i / t 값을 Number로 바꾼 후 연산하였으나 타입 에러를 받게 되었다. 두 번째 풀이는 평범하게 나누기 연산을 사용하여 풀었더니 CA 결과를 받았다.

21.3.30

  • BOJ 10546

    프로그래머스 완주하지 못한 선수와 같은 문제. 오브젝트 자료형을 이용하여 참가한 선수의 이름을 기준으로 정수형 값으로 저장한 후, 완주한 사람에 대해서 -1 하였다. 그 후 모든 오브젝트 요소에 대해서 값이 1인 요소를 출력하여 풀었다.

  • BOJ 5397

    n개의 문자열이 주어진다. 모든 문자열에 대해서 "<", ">"가 입력될 시 커서를 움직이며, "-"가 입력될 시 커서에 해당하는 문자를 지우는 연산을 할 때, 문자열이 완성된 모습을 출력하는 문제. 첫 번째 풀이는 정수형 변수 index와 splice를 이용하여 stack에 값을 추가, 삭제하여 풀었으나 시간초과 결과를 받았다. 두 번째 풀이는 스택 배열을 두개 사용하여 커서 이동 시 pop과 push를 이용, 연산 종료 후 오른쪽 스택을 뒤집어서 join하여 풀었다.

21.4.3

  • BOJ 1966

    우선순위가 있는 프린터 문제. 파이썬은 deque를 사용해 popleft를 사용하여 풀었지만 JS는 shift를 사용하면 되어 추가적인 import없이 풀었다.

21.8.16

  • 프로그래머스 자릿수 더하기

    정수를 입력받은 후, 해당 정수의 자릿수를 모두 더해 반환하는 문제. 정수를 문자열, 배열화한 후 reduce를 이용하여 모든 자릿수를 더하여 풀었다.

21.8.17

  • 프로그래머스 짝수와 홀수

    정수를 입력받은 후, 해당 정수가 짝, 홀수인지 반환하는 문제. 화살표 함수로 바꾼 후, 삼항 연산자와 0이 false인 것을 이용하여 간단히 풀었다.

21.8.18

21.8.19

  • 프로그래머스 핸드폰 번호 가리기

    문자열이 주어진 후, 마지막 4자리 수를 제외하고 *로 바꾼 문자열을 반환하는 문제. 문자열을 spread한 후, map을 이용해 길이와 비교하여 조건에 맞는 배열을 구성하였다. 배열을 join한 값을 반환하여 풀었다.

21.8.20

  • 프로그래머스 정수 내림차순으로 배치하기

    정수가 주어진 후, 해당 자릿수의 숫자들을 내림차순으로 배치하여 정수를 반환하는 문제. 주어진 정수를 배열화한 후, 내림차순으로 정렬, join한 값을 parseInt한 값을 반환하여 풀었다.

21.8.21

21.8.22

  • 프로그래머스 나누어 떨어지는 숫자 배열

    정수로 이루어진 배열과, 정수가 주어진다. 해당 배열에서 주어진 정수로 나누어떨어지는 수들을 오름차순 정렬하여 반환하는 문제. filter 메소드를 이용하여 나누어 떨어진 수로 이루어진 배열을 생성 후, 해당 배열의 크기를 기준으로 정렬한 배열, -1만 존재한 배열을 나누어 반환하여 풀었다.

21.8.23

21.8.24

  • 프로그래머스 모의고사

    최대 10,000개의 문제의 정답들로 이루어진 배열이 주어진다. 1번, 2번, 3번 사람이 일정 규칙을 갖고 문제를 풀 때, 제일 많이 맞춘 사람의 번호를 배열에 담아 반환하는 문제. 규칙을 배열에 담아둔 후, 문제의 인덱스 값과 비교한 나머지를 이용하여 맞았는 지 판별, 맞은 횟수를 저장하였다. 맞은 횟수 중 제일 큰 수와 비교하여 맞은 사람들을 배열에 담아 반환하여 풀었다. 자바스크립트를 이용해 완벽탐색 문제는 처음인 것 같은데, forEach, map, reduce, filter와 같은 메소드가 참 좋은 것 같다.

21.8.25

  • 프로그래머스 제일 작은 수 제거하기

    정수로 이루어진 배열이 주어진 후, 해당 배열에서 제일 작은 수를 제거한 배열을 반환하는 문제. 이 때 제거된 배열의 길이가 0일 시 -1로 이루어진 배열을 반환하는 조건이 있다. filter, Math.min 메소드를 이용하여 풀었다.

21.8.26

  • 프로그래머스 부족한 금액 계산하기

    놀이기구의 가격, 보유한 금액, 계산이 될 횟수가 주어지고 가격은 횟수만큼 올라갈 때, 놀이기구를 몇 번 탑승할 수 있는지 계산하는 문제. 사칙연산과 조건문을 이용하여 풀었다.

21.8.27

  • 프로그래머스 수박수박수박

    정수 n이 주어졌을 때 "수", "박"을 순서와 n에 맞게 반환하는 문제. repeat을 이용하여 긴 문자열을 만든 후 slice를 이용해 처음부터 n까지 잘라서 반환하여 풀었다.

21.8.28

  • 프로그래머스 직업군 추천하기

    각 직업군 언어 점수, 개발자가 사용하는 언어와 언어 선호도가 주어질 때, 그에 맞는 직업군을 추천해주는 문제. 문자열로 주어지는 각 직업군 언어 점수를 오브젝트로 Parsing한 후, 각 언어에 대해 점수를 계산, 저장하였다. 저장하는 과정에서 최댓값을 저장하여 배열에 저장하였다. 동일한 값은 알파벳순으로 빠른 값을 반환하는 조건이 있어 정렬한 값 중에서 0번 째 인덱스 값을 반환하여 풀었다. 각 직업군 언어에서 개발자가 사용하는 언어가 없을 때는 0으로 계산하는 조건이 있어 Nullish coalescing을 사용하였으나 프로그래머스 상에서 호환이 안되어 삼항연산자로 대체하여 풀었다.

21.8.29

21.8.30

  • 프로그래머스 같은 숫자는 싫어

    배열에서 연속된 숫자 중 중복되는 수를 제외한 배열을 반환하는 문제. 첫 풀이는 주어진 배열을 기준으로 반복을 수행하며, 새로운 배열의 마지막 값과 비교하여 풀었다. 두 번째 풀이는 filter를 이용하여 주어진 배열의 idx-1 값과 비교하여 풀었다.

21.8.31

  • 프로그래머스 가운데 글자 가져오기

    문자열이 주어진 후, 해당 문자열의 길이가 짝수이면 가운데 2글자를, 홀수이면 가운데 글자를 반환하는 문제. length를 기준으로 slice하여 풀었다.

21.9.1

21.9.2

  • 프로그래머스 약수의 합

    정수 n이 주어질 때, n의 모든 약수의 합을 반환하는 문제. 재귀적으로 i를 하나씩 키워 계산하는 방법으로 풀었다.

21.9.3

  • 프로그래머스 문자열내 p와y의 개수

    문자열이 주어질 때, 'p', 'P'의 수와 'y', 'Y'의 수가 같을 때 true를, 같지 않을 때 false를 반환하는 문제. 배열화하여 reducer를 통해 p일 때 +1, y일 때 -1을 계산한 값을 반대를 반환하여 풀었다.

21.9.4

  • 프로그래머스 소수 찾기

    정수 n이 주어진 후, 1부터 n까지 소수의 개수를 반환하는 문제. 에라토스테네스 체 방식을 이용하여 소수를 판별, 소수일 시 primeArr에 추가한 후 length 값을 반환하여 풀었다.

21.9.5

21.9.6

  • 프로그래머스 2016년

    월, 일이 주어졌을 때 2016년의 해당 날짜는 무슨 요일인지 반환하는 문제. 요일과 각 월별 일수를 이용하여 진행된 일수를 이용해 풀었다.

21.9.7

  • 프로그래머스 문자열 다루기 기본

    숫자 혹은 문자로 이루어진 문자열이 주어진다. 이 수가 길이가 4 혹은 6이며 숫자로만 이루졌을 때 true를, 아닐 시 false를 반환하는 문제. 첫 풀이는 isNan을 활용하여 풀었으나 프로그래머스 상에서는 통과하지만 로컬에서 테스트했을 때는 지수인 경우에 통과하지 못했다. 두 번째 풀이는 == 연산자를 이용하여 풀었다.

21.9.8

  • 프로그래머스 약수의 개수와 덧셈

    주어진 정수 두개의 사이 숫자들의 약수가 홀수인 경우 빼고, 짝수인 경우 더한 값을 반환하는 문제. 첫 풀이는 약수를 담은 배열을 이용하여 풀었다. 두 번째 풀이는 제곱근이 정수일 때, 약수의 개수가 홀수인 것을 이용해여 풀었으며, 세 번째 풀이는 이를 이용하여 숏코딩하였다.

21.9.9

  • 프로그래머스 3진법 뒤집기

    정수를 입력받은 후, 3진수로 바꾸고 뒤집은 다음, 다시 10진수 정수로 반환하는 문제. n.toString(3)을 이용하여 3진법으로 변환, Number.parseInt(3진수, 3)의 문법을 이용하여 풀었다.

21.9.10

  • 프로그래머스 체육복

    n명의 학생, 체육복을 잃어버린 학생들의 번호 lost, 여분의 체육복을 가진 학생들의 번호 reserve가 주어지며 자신의 앞뒤 번호에게만 체육복을 빌려줄 수 있을 때, 가장 많은 학생들이 체육복을 입을 때의 학생 수를 반환하는 문제. 배열에 학생별 체육복의 수를 저장한 뒤, 2개의 체육복을 가진 학생일 때 앞, 뒤 순서로 빌려주어 풀었다. 간단한 그리디 문제.

21.11.10

  • 프로그래머스 가장 큰 수

    문자열로 변환 후, 더한 값을 기준으로 정렬하여 풀었다.

  • 프로그래머스 기능개발

    배열의 첫 번째 기능이 완성되는 것을 기준으로 날짜 값을 증감 후, 조건이 달성될 시 shift를 이용하여 계속 첫 번째 값과 증감된 날짜를 기준으로 풀었다.

21.11.14

  • 프로그래머스 타겟 넘버

    n개의 정수로 이루어진 배열과 한 개의 정수가 주어질 때, 배열에 구성된 숫자들은 더하기 혹은 빼기로 모두 조합하였을 때 주어진 한 개의 정수가 되는 경우의 수를 반환하는 문제. 재귀적으로 탐색, 탐색이 종료됐을 시 조건에 부합하면 증감하여 풀었다.

21.12.03

  • 프로그래머스 멀쩡한 사각형

    w, h의 가로 세로길이의 직사각형이 있을 때 대각선으로 자른 후, 멀쩡한 사각형의 개수를 반환하는 문제. 대각선으로 그었을 때 잘라지는 사각형의 수를 구하는 공식인 w + h - gcd(w, h)를 이용하여 풀었다.

21.12.04

  • 프로그래머스 레벨2 소수 찾기

    "17"과 같은 문자열 정수가 주어진 후 해당 수를 조합하여 나온 수 중에서 소수가 몇 개인지 반환하는 문제. 해당 수를 조합해서 나올 수 있는 수를 계산하기 위해 백트래킹 알고리즘을 이용하였고, 조합해서 나온 수 중 가장 큰 수까지 에라토스테네스의 체 방법을 이용해 소수판별 배열을 만들어 계산하여 풀었다.

21.12.13

  • 프로그래머스 두 개 뽑아서 더하기

    정수로 이루어진 배열에서 두 개를 뽑아서 더했을 때 나올 수 있는 수를 정렬하여 반환하는 문제. 중복 제거를 위해 Set 자료형을 이용하여 풀었다.

22.1.15

  • 프로그래머스 위장

    [옷 이름, 옷 카테고리]로 이루어진 배열이 주어지며 최소한 한 개의 옷을 입어야할 때 입을 수 있는 다른 옷의 조합의 수를 반환하는 문제. Object를 이용해 해당 카테고리에 존재하는 수를 계산한 후 약수의 수를 계산하여 풀었다.

22.1.18

  • 프로그래머스 구명보트

    사람들의 몸무게와 구명보트에 탈 수 있는 제한 무게가 주어진 후 최대 두명이서 탈 수 있을 때 최소한의 구명보트 수를 구하는 문제. 첫 번째 접근은 최대 두명인 조건을 읽지 못해 무게 제한만을 고려하여 풀었으나, 이내 확인하고 정렬하여 최대 무게와 최소 무게의 사람을 비교하여 탈 수 있을 때 다음 사람으로 이동, 탈 수 없을 때 최대 무게인 사람만 수정하여 풀었다.

22.1.19

  • 프로그래머스 네트워크

    컴퓨터의 수와 컴퓨터들이 연결되어 있는 지 여부를 나타내는 배열이 주어질 때 연결된 그룹 (네트워크)기 몇 개인지 반환하는 문제. 방문했던 컴퓨터들을 확인하기 위한 isVisit 배열을 만들어 관리하였으며, 전체 네트워크의 수를 확인해야하기 때문에 n까지 반복문을 돌고 방문하지 않은 컴퓨터들에 대해 bfs 연산을 통해 방문처리를 하여 풀었다.

22.2.15

  • 프로그래머스 완주하지 못한 선수

    참가 선수 배열과 완주한 선수 배열이 주어졌을 때 완주하지 못한 선수 문자열을 반환하는 문제. 첫 번째 풀이는 한 사람만이 완주하지 못한 조건을 이용해 정렬하여 같은 인덱스 값으로 비교하였을 때 다른 것을 정답으로써 풀었으나 파이썬과는 달리 효율성 테스트에서 통과하지 못하였다. 다음 풀이는 오브젝트를 이용해 완주하지 못한 선수를 확인하여 풀었다.

22.2.17

  • 프로그래머스 여행경로

    항공권 정보가 담긴 2차원 배열을 이용해 모든 공항을 방문하면서 알파벳 순서가 앞서는 경로를 출력하는 문제. 재귀적으로 현재 위치, 남은 티켓들, 현재까지 온 경로들을 이용해 출발할 수 있는 경로들로부터 호출하여 풀었다.

22.5.12

  • 프로그래머스 9251

    두 단어의 LCS를 구하는 문제. DP를 이용하여 풀었다. 자세한 풀이는 파이썬 풀이 참고

algorithmwithjavascript's People

Contributors

hyesungoh avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.