분류 전체보기 81

객체

정의 몇 가지 특수한 기능을 가진 연관 배열(associative array) 특징 프로퍼티(키 - 값 쌍)를 저장함 프로퍼티 키는 문자열이나 심볼이어야 하며, 보통은 문자열 값은 어떤 자료형도 가능함 프로퍼티에 접근하는 방법 점 표기법: obj.property 대괄호 표기법: obj["property"] 대괄호 표기법을 사용하면 obj[varWithKey] 같이 변수에서 키를 가져올 수 있음 객체엔 다음과 같은 추가 연산자를 사용할 수 있음 프로퍼티를 삭제하고 싶을 때: delete obj.prop 해당 키를 가진 프로퍼티가 객체 내에 있는지 확인하고 싶을 때: "key" in obj 프로퍼티를 나열할 때: for (let key in obj) 일반 객체 이외에도 다양한 종류의 객체가 있음 Array:..

JavaScript 2023.11.21

테스트 자동화, 폴리필

테스트 자동화 BDD(Behavior Driven Development) BDD에서는 스펙을 먼저 작성하고 난 후에 구현을 시작함 구현이 종료된 시점에는 스펙과 코드 둘 다 확보할 수 있음 개발 순서 명세서 초안 작성(기본적인 테스트 포함) 명세서 코안을 보고 코드 작성 코드가 작동하는지 확인하기 위해 테스트 프레임워크를 사용해 명세서 실행(Mocha 사용). 테스트를 모두 통과해 에러가 출력되지 않을 때까지 코드 수정 모든 테스트를 통과하는 코드 초안 완성 명세서에서 고려하지 않았던 유스케이스 추가 세번째 단계로 돌아가 테스트를 모두 통과할 때까지 코드를 수정 기능이 완성될 때까지 3~6단계 반복 스펙의 용도 테스트: 함수가 의도하는 동작을 제대로 수행하고 있는지 보장함 문서: 함수가 어떤 동작을 수행..

JavaScript 2023.11.13

기본 문법 요약 정리

코드 구조 여러 개의 구문은 세미콜론을 기준으로 구분할 수 있음 세미콜론 자동 삽입: 줄 바꿈도 여러 개의 구문을 구분하는 데 사용되므로 아래 코드는 정상적으로 작동함 alert('Hello') alert('World') 세미콜론 자동 삽입이 동작하지 않을 때도 있음 alert('이 메시지가 출력된 후에 에러가 발생한다.') [1, 2].forEach(alert) 따라서, 문장의 끝에 세미콜론을 붙이는 것을 권장 코드 블록이나 코드 블록과 함께 구성되는 문법(ex. 반복문) 끝엔 세미콜론을 붙이지 않아도 됨 functon f() { // 함수 선언문 끝엔 세미콜론 필요 없음 }} for(let i = 0; i < arr.length; i++) { // 반복문 끝에도 세미콜론 필요 없음 }} 엄격 모드 자..

JavaScript 2023.11.09

[구름톤 챌린지] 4주차_중첩 점

필요한 개념 동적 프로그래밍 문제 분석 한 변의 길이가 N인 정사각형을 격자 모양으로 바꾼 뒤, M개의 직선을 규칙에 따라서 그린다. 이때 직선들끼리 교차하는 교점의 개수를 세는 문제이다. 완전 탐색을 활용한다면, (y, x) 에서 시작하는 직선을 그리려고 할 때, 그려진 직선을 모두 알아야 한다. (y, x)에서 상/하로 그려질 직선은 좌/우로 그려진 직선의 개수만큼 점이 생기고, 좌/우로 그려질 직선은 상/하로 그려진 직선의 개수만큼 점이 발생한다. 그렇다면 주어지는 직선의 개수가 100,000 이기 때문에, 시간이 아주 오래걸릴 수 있다. 그래서 이 문제는 이전 계산을 기록하면서 현재의 계산을 간소화하는 방법이 필요한 동적 프로그래밍 문제이다. 규칙 이해하기 (y, x) 칸에서 위/아래 방향으로 그..

JavaScript 2023.09.08

[구름톤 챌린지] 4주차_통신망 분석

필요한 개념 그래프 BFS / DFS 문제 분석 그래프 탐색을 통해 다양한 정보를 얻어서 처리해야 하는 문제이다. 문제의 요구 조건을 만족하는 컴포넌트를 찾기 위해서는 다음 세가지를 찾아야 한다. 컴포넌트에 속한 컴퓨터의 수 컴포넌트에 속한 통신 회선의 수 컴포넌트에서 가장 작은 컴퓨터의 번호 세 정보를 잘 이용해 조건에 맞는 컴포넌트를 출력하면 된다. 컴포넌트 그래프 이론에서 컴포넌트는 보통 연결된 부분 그래프를 의미한다. 그 중에서 연결 컴포넌트의 개념이 있다. 그래프는 여러 개의 연결 컴포넌트로 나누어질 수 있으며, 하나의 연결 컴포넌트는 그 그래프 내의 모든 정점들이 경로를 통해 서로 연결될 수 있는 정점의 집합이다. 그래프의 각 연결 컴포넌트는 다른 연결 컴포넌트의 정점과는 직접적인 경로가 없다..

JavaScript 2023.09.06

[구름톤 챌린지] 3주차_작은 노드

필요한 개념 그래프 문제 분석 명시적인 형태의 그래프 문제이다. 그래프의 개념에 대해 이해하고 이를 어떻게 코드로 표현할 수 있는지 알아야 한다. 그래프 그래프는 어떤 정보 간의 연결 관계를 나타내는데 특화된 자료구조이다. 그래프의 개념 자체는 단순하다. 그래프를 구성하는 필수적인 요소 두 가지는 정점이 있고, 정점 사이를 잇는 간선이 있다. 보통은 정점과 간선에 각종 조건들이 추가되어 다양한 상황을 추상화한다. 예시로는 특정 간선이 양방향이 아닌 단방향으로만 이동이 가능하도록 하거나, 정점을 방문하거나 간선을 이용할 때 비용을 추가하는 등의 경우가 있다. 컴퓨터의 네트워크나 도로망을 생각해보면 그래프가 어떤 느낌의 상황을 나타낼 수 있는지 알 수 있다. 그래프의 표현 그래프를 코드로 표현하는 핵심은 어..

JavaScript 2023.09.01

[구름톤 챌린지] 3주차_발전기

필요한 개념 Stack (스택) Queue (큐) BFS (너비 우선 탐색) 문제 분석 주어진 행렬에서 요구하는 값을 찾는 문제로, 행렬에서 효율적인 이동을 하면서 값을 빠르게 찾아내는 것이 중요하다. 그러기 위해서는 완전 탐색이 아닌, 다른 탐색 방법이 필요하다. 행렬은 0과 1로 이루어지며, 1이면 집이 있는 칸이다. 어떤 집에 발전기를 설치해 전력을 공급할 수 있다. 어떤 집에 상하좌우로 인접한 집 중 하나가 전력을 공급받고 있으면, 그 집도 전력을 공급받는다. 설치해야 하는 발전기의 최소 개수를 구해야 한다. 이 문제를 해결하기 위해서는 어떤 집에 발전기를 설치했을 때 전기를 공급받을 수 있는 집을 알아야 한다. 공급 받은 집에는 발전기를 설치하지 않아도 되기 때문이다. 즉, 인접한 집의 집합의 ..

JavaScript 2023.08.30

[구름톤 챌린지] 2주차_폭탄 구현하기

필요한 개념 시뮬레이션 list 메소드 문제 분석 문제를 풀기 위해서는 2차원 배열에서의 탐색이 필요하다. 이후에는 주어지는 폭탄 데이터를 입력 받아 문제의 요구 사항대로 구현하면 된다. 모든 폭탄이 떨어진 이후에, 배열에서 가장 큰 값을 찾아야 한다. 반복문으로 찾을 수 있지만, 배열의 단계를 낮춰주는 메소드를 사용해서 해결할 수 있다. 폭탄이 떨어지면, 떨어진 위치를 기준으로 십자가 영역의 폭탄 값이 조건에 따라서 증가 # 는 폭탄 값의 영향을 받지 않음 0 이면 폭탄 값이 1만큼 증가 @ 라면 폭탄 값이 2만큼 증가 모든 폭탄이 떨어진 이후에 폭탄 앖이 가장 높은 값을 출력 데이터의 입력 // 입력 4 4 0 0 @ 0 0 0 0 0 0 # 0 0 0 0 0 @ 2 2 2 3 1 4 1 4 이 문제..

JavaScript 2023.08.25

[구름톤 챌린지] 2주차_문자열 나누기

필요한 개념 완전 탐색 문제 분석 길이가 N인 문자열 S를 3개의 문자열로 나눈 후, 주어진 조건에 따라 점수를 계산하는 문제이다. 점수는 문자열의 모든 부분 문자열의 순서에 따라서 결정된다. 나눌 수 있는 모든 경우의 수 중에서 최대 점수를 얻을 수 있는 문자열을 찾는 문제이다. 더불어 문자열의 길이의 최대 100 정도로 짧기 때문에 가능한 모든 부분 문자열을 확인하는 완전 탐색으로 문제를 해결할 수 있다. 문제 해결을 위해서 아래 순서대로 진행한다. 가능한 부분 문자열을 찾고, 정렬하여 점수 판을 만든다. 완전 탐색으로 문자열을 자를 수 있는 모든 경우의 수를 찾는다. 점수 판을 이용해서, 모든 경우의 수 중에서 최대 점수를 찾는다. 조합 조합은 순서를 고려하지 않고, 집합에서 일부 원소를 선택하는 ..

JavaScript 2023.08.22

[구름톤 챌린지] 1주차_완벽한 햄버거 만들기

필요한 개념 정렬 loop vs reduce 문제 분석 햄버거를 구성하는 N개의 재료가 순서대로 주어졌을 때, 조건대로 정렬되어 있는지 확인하는 문제이다. 이때 정렬의 조건은 가장 높은 정수를 기준으로, 왼쪽이나 오른쪽으로 갈 수록 정수의 값이 같거나 감소되어야 한다. 문제를 해결하기 위해서는 주어진 값 중 가장 큰 값의 위치를 찾아야 한다. 그 다음에는 큰 값의 위치를 기준으로 앞의 값들은 오름차순으로 배열되어 있는지, 뒤의 값들은 내림차순으로 배열되어 있는지 확인하면 된다. 이 값이 문제가 없다면 완벽한 햄버거이고, 아니라면 완벽한 햄버거가 아니다. 데이터 입력 받기 const readline = require('readline'); const rl = readline.createInterface({..

JavaScript 2023.08.18