개요문제 이름: 1, 2, 3 더하기 (9095)문제 링크: https://www.acmicpc.net/problem/9095플랫폼: 백준알고리즘 분류: 다이나믹 프로그래밍소요 시간: 10분 문제 전문설명입출력 문제 풀이해설이 문제는 동적 계획법(Dynamic Programming)을 활용하여 해결할 수 있습니다. 동적 계획법은 큰 문제를 작은 부분 문제로 나누어 해결하고, 그 결과를 저장하여 재활용함으로써 효율적으로 문제를 해결하는 알고리즘입니다. 이 문제에서는 정수 n을 1, 2, 3의 합으로 나타내는 방법의 수를 구해야 합니다. 이를 위해 우선 작은 숫자부터 시작하여 점진적으로 큰 숫자에 대한 해답을 구하는 접근 방식을 취합니다.1을 만드는 방법: 1 (1가지)2를 만드는 방법: 1+1, 2 (2가..
개요웹 애플리케이션을 개발할 때 가장 중요한 것은 브라우저 환경을 제대로 이해하는 것이다. 특히 클라이언트 사이드 자바스크립트는 대부분 브라우저에서 HTML, CSS와 함께 동작하기 때문에, 브라우저의 렌더링 과정을 깊이 이해하면 더 효율적인 프로그래밍이 가능하다. 렌더링 과정을 이해하기 위해서는 먼저 두 가지 핵심 개념을 알아야 한다. 바로 '파싱'과 '렌더링'이다. 파싱(Parsing)의 상세 과정파싱은 단순한 텍스트 분석 이상의 복잡한 과정이다. 프로그래밍 언어로 작성된 텍스트 문서를 읽어 실행 가능한 형태로 변환하는 과정을 말한다. 이는 크게 두 단계로 나눌 수 있다.첫 번째는 어휘 분석(Lexical Analysis) 단계로, 문서의 문자열을 의미 있는 토큰으로 분해한다. 두 번째는 구문 분석(..
개요 문제 이름: 경로 찾기 (11403)문제 링크: https://www.acmicpc.net/problem/11403플랫폼: 백준알고리즘 분류: DFS소요 시간: 2시간 문제 전문설명입출력 문제 풀이해설이 문제는 주어진 방향 그래프에서 모든 정점 쌍 (i, j)에 대해 i에서 j로 가는 경로가 있는지 판별하는 문제입니다. 이를 위해 DFS(깊이 우선 탐색) 알고리즘을 사용하여 각 정점에서 시작하여 도달 가능한 모든 정점을 탐색하고, 그 결과를 인접 행렬 형태로 저장합니다. DFS는 그래프의 탐색 알고리즘 중 하나로, 시작 정점에서부터 한 방향으로 갈 수 있는 만큼 깊이 탐색하다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 다른 방향으로 탐색을 계속 반복하여 모든 정점을 방문하는 순..
배열 디스트럭처링 할당디스트럭처링 할당(Destructuring Assignment)은 '구조 분해 할당'이라고도 부르며, 배열이나 객체와 같은 구조화된 데이터를 해체하여 각각의 요소나 프로퍼티를 개별 변수에 할당하는 것을 의미한다. 이 기능은 ES6에서 새롭게 도입되었으며, 특히 배열이나 객체 리터럴에서 필요한 값들만 추출하여 변수로 할당하고자 할 때 매우 유용하게 사용할 수 있다. ES5에서 ES6로의 진화기존 ES5에서는 배열의 요소들을 각각의 변수에 할당하기 위해서 배열의 인덱스를 통해 하나씩 접근해야만 했다. 이는 코드가 길어지고 가독성이 떨어지는 결과를 초래했다.// ES5var arr = [1, 2, 3];var one = arr[0];var two = arr[1];var three = ar..
개요스프레드 문법(Spread Syntax)은 ES6에서 새롭게 도입된 문법이다. 이 문법은 마침표 세 개(...)를 사용하여 하나로 뭉쳐있는 여러 값들의 집합을 펼쳐서 개별적인 값들의 목록으로 변환한다. 여러 값을 하나로 뭉친 배열이나 객체와 같은 데이터를 전개해서 개별 값들로 분리할 때 유용하게 사용할 수 있다. 스프레드 문법의 사용 가능 대상스프레드 문법은 모든 데이터 타입에 사용할 수 있는 것이 아니다. for...of 문으로 순회할 수 있는 이터러블 객체에만 사용할 수 있다는 제약이 있다. 구체적으로 다음과 같은 데이터 타입들이 스프레드 문법의 대상이 될 수 있다.Array: 가장 대표적인 이터러블 객체로, 배열의 요소들을 개별 값으로 펼칠 수 있다.String: 문자열도 이터러블이므로 각 문자..
함수의 구분자바스크립트는 ES6 이전까지 함수를 다양한 목적으로 사용했다. 이는 언어의 유연성을 보여주는 특징이었지만, 동시에 여러 문제를 야기했다. 하나의 함수가 일반 함수, 생성자 함수, 메서드 등 여러 역할을 수행할 수 있었기 때문에 코드의 의도를 파악하기 어려웠고, 예상치 못한 동작을 일으킬 수 있었다. ES6 이전의 함수는 모두 callable이면서 동시에 constructor였다. 이는 함수를 일반적인 방식으로 호출할 수 있을 뿐만 아니라, new 연산자와 함께 사용하여 객체를 생성할 수도 있었다는 것을 의미한다. 이러한 특성은 다음과 같은 코드를 가능하게 했다.var foo = function() { return 1;};foo(); // 일반 함수로 호출new foo(); // 생성자 함수..
개요문제 이름: 토마토 (7569)문제 링크: https://www.acmicpc.net/problem/7569플랫폼: 백준알고리즘 분류: BFS소요 시간: 2시간 문제 전문설명입출력문제 풀이해설이 문제는 3차원 공간에서 토마토의 익는 시간을 구하는 문제입니다. BFS (Breadth-First Search) 알고리즘을 사용하여 해결할 수 있습니다. BFS는 너비 우선 탐색으로, 시작점에서 가까운 노드부터 차례대로 탐색하는 알고리즘입니다. 입력받은 토마토 상자 정보를 3차원 배열로 저장합니다.익은 토마토의 위치를 큐에 넣고, 방문 표시를 합니다.BFS를 수행하면서, 익은 토마토의 인접한 위치에 있는 익지 않은 토마토를 익게 만들고, 익은 토마토의 위치를 큐에 넣습니다.BFS가 종료되었을 때, 모든 토마토..
클래스는 프로토타입의 문법적 설탕인가?자바스크립트는 프로토타입 기반 객체지향 언어다. ES5까지는 클래스 없이 생성자 함수와 프로토타입을 통해 객체지향 프로그래밍을 구현했다.var Person = (function () { function Person(name) { this.name = name; } Person.prototype.sayHi = function () { console.log('Hi! My name is ' + this.name); }; return Person;}());var me = new Person('Lee');me.sayHi(); // Hi! My name is LeeES6에서 도입된 클래스는 기존 프로토타입 기반 패턴을 클래스 기반 패턴처럼 사용할 수 있게 한..
개요문제 이름: 숨바꼭질 (1697) 문제 링크: https://www.acmicpc.net/problem/1697플랫폼: 백준알고리즘 분류: BFS소요 시간: 1시간 문제 전문설명입출력문제 풀이해설이 문제는 BFS(Breadth-First Search, 너비 우선 탐색) 알고리즘을 사용하여 해결할 수 있습니다. BFS는 그래프나 트리에서 인접한 노드를 먼저 탐색하는 알고리즘으로, 시작 노드에서 가까운 노드들을 먼저 방문하고 멀리 떨어진 노드를 나중에 방문합니다. 문제에서 수빈이는 현재 위치에서 걷거나 순간이동을 할 수 있습니다. 걸을 때는 X-1 또는 X+1로 이동하고, 순간이동을 할 때는 2*X의 위치로 이동합니다. 이를 그래프로 표현하면, 각 노드는 수빈이의 현재 위치를 나타내고, 각 노드에서 인접..
개요문제 이름: 바이러스 (2606)문제 링크: https://www.acmicpc.net/problem/2606플랫폼: 백준알고리즘 분류: DFS소요 시간: 2시간 문제 전문설명입출력문제 풀이해설이 문제는 주어진 컴퓨터 네트워크에서 1번 컴퓨터가 웜 바이러스에 감염되었을 때, 1번 컴퓨터와 직접 또는 간접적으로 연결된 컴퓨터 중에서 웜 바이러스에 감염되는 컴퓨터의 총 개수를 구하여 출력해야 하는 문제입니다. DFS 알고리즘을 사용하여 그래프를 탐색하는 전형적인 예시라고 할 수 있겠습니다. 그래프를 생성하고, 시작점(1번 컴퓨터)부터 DFS 탐색을 수행하여 연결된 컴퓨터들을 방문하고, 방문한 컴퓨터의 수를 세어주는 과정으로 해결할 수 있습니다. 사실상 주어진 네트워크 상에서 1번 컴퓨터와 직접 또는 간접..
개요문제 이름: 전쟁 - 전투 (1303) 문제 링크: https://www.acmicpc.net/problem/1303플랫폼: 백준알고리즘 분류: 그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색소요 시간: 3시간 문제 전문설명입출력 문제 풀이해설이 문제는 전쟁터에서 각 병사의 위치와 소속팀이 주어졌을 때, 각 팀의 전투력을 계산하는 문제입니다. 전투력은 같은 팀의 병사들이 인접해 있을 때 그 그룹의 크기의 제곱으로 계산됩니다. 이 문제는 그래프 탐색 알고리즘 중 하나인 DFS(Depth-First Search, 깊이 우선 탐색)를 사용하여 해결할 수 있습니다. 문제 해결을 위해 다음과 같은 접근 방식을 사용할 수 있습니다.전쟁터를 2차원 배열로 표현하고, 각 병사의 위치와 소속팀을 입력받..
개요결론부터 말하자면 현재 알 수 없는 이유로, 갑작스럽게 깃허브 계정이 정지된 상태입니다.아래의 내용은 계정 정지를 풀어나가고자 기록해둔 과정이라고 보시면 되겠습니다. 2024-09-20, 1:00 시점평소처럼 깃허브 내에서 조직(Organization)을 생성하고, 멤버를 초대하려고 했습니다.분명 이전에는 잘 되었었는데, 이번에는 한 가지 문제가 발생했습니다. 다름이 아니고 메시지와 함께 팀원이 초대가 안 된 것이었습니다.You can't do that at this time. 난생 처음 보는 메시지였는데... 대체 어떻게 해야 할지를 모르겠더군요.왜냐하면 구글에 검색을 하더라도 별 다른 답변이 안 보였기 때문입니다. 아마 흔한 경고 메시지는 아닌 느낌이었습니다.그래서 꼬박 하루 동안 이리저리 메뉴를..
개요문제 이름: 호텔 대실 (155651) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/155651플랫폼: 프로그래머스알고리즘 분류: 그리디소요 시간: 4시간 20분 문제 전문설명제한사항입출력 문제 풀이해설호텔을 운영 중인 코니는 최소한의 객실만을 사용하여 예약 손님들을 받으려고 합니다. 한 번 사용한 객실은 퇴실 시간을 기준으로 10분간 청소를 하고 다음 손님들이 사용할 수 있습니다. 예약 시각이 문자열 형태로 담긴 2차원 배열 book_time이 매개변수로 주어질 때, 코니에게 필요한 최소 객실의 수를 반환하는 함수를 완성하는 것이 문제의 목표입니다. 문제 해결을 위한 접근 방식은 아래와 같습니다.시간 표현 변환: 주어진 시각 형..
개요문제 이름: 무인도 여행 (154540) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/154540플랫폼: 프로그래머스알고리즘 분류: 일반소요 시간: 5시간 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 2차원 격자 형태의 지도에서 연결된 무인도를 탐색하고, 각 무인도에서 최대로 머물 수 있는 일수를 계산하는 문제입니다. 문제를 해결하기 위해서는 그래프 탐색 알고리즘 중 하나인 깊이 우선 탐색(DFS)을 활용합니다. DFS는 그래프의 한 노드에서 시작하여 인접한 노드를 먼저 탐색하는 방식으로 진행됩니다. 즉, 한 방향으로 갈 수 있을 때까지 깊이 탐색하다가 더 이상 갈 수 없게 되면 이전 노드로 돌아와서 다른 방향으로 탐색을 ..
개요문제 이름: [3차] 방금그곡 (17683) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/17683플랫폼: 프로그래머스알고리즘 분류: 일반소요 시간: 7시간 문제 전문설명입출력 문제 풀이해설이 문제는 네오가 기억하고 있는 멜로디를 바탕으로 실제로 방송된 음악을 찾는 문제입니다. 문제 해결을 위해서는 주어진 음악 정보를 바탕으로 실제로 재생된 멜로디를 구하고, 네오가 기억하고 있는 멜로디가 그 안에 포함되어 있는지를 확인해야 합니다. 문제 해결을 위한 접근 방식은 다음과 같습니다.네오가 기억하고 있는 멜로디와 음악 정보의 멜로디에서 '#'이 붙은 음을 소문자로 변환합니다.이는 같은 음임에도 불구하고 '#'의 유무에 따라 다른 음으..
소스코드의 타입ECMAScript 사양은 소스코드를 4가지 타입으로 구분한다.전역 코드(global code): 전역에 존재하는 소스코드. 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않는다.함수 코드(function code): 함수 내부에 존재하는 소스코드. 함수 내부에 중첩된 함수, 클래스 등의 내부 코드는 포함되지 않는다.eval 코드(eval code): 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드.모듈 코드(module code): 모듈 내부에 존재하는 소스코드. 모듈 내부의 함수, 클래스 등의 내부 코드는 포함되지 않는다.소스코드(실행 가능한 코드)를 4가지 타입으로 구분하는 이유는 소스코드의 타입에 따라 실행 컨텍스트를 생성하는 과정과 관리 내용이 다르기..
개요문제 이름: 귤 고르기 (138476)문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/138476플랫폼: 프로그래머스알고리즘 분류: 일반소요 시간: 1시간 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 귤의 크기별 개수를 파악하여, 최소한의 종류로 k개의 귤을 고르는 문제입니다. 문제 해결을 위해 먼저 귤의 크기별 개수를 파악하고, 개수가 많은 순서대로 귤을 고르는 그리디 알고리즘을 적용할 수 있습니다. 문제 접근 방식은 다음과 같습니다.귤의 크기별 개수를 파악하기 위해 객체(sizeCount)를 생성합니다.주어진 배열(tangerine)을 순회하면서 각 크기의 귤이 몇 개 있는지 객체에 저장합니다.객체의 값(귤의 개수)을 배열..
this 키워드객체 지향 프로그래밍에서 객체는 상태(state)를 나타내는 프로퍼티와 동작(behavior)을 나타내는 메서드를 하나의 논리적인 단위로 묶은 복합적인 자료구조이다. 동작을 나타내는 메서드는 자신이 속한 객체의 상태, 즉 프로퍼티를 참조하고 변경할 수 있어야 한다. 이때 메서드가 자신이 속한 객체의 프로퍼티를 참조하려면 먼저 자신이 속한 객체를 가리키는 식별자를 참조할 수 있어야 한다. const circle = { // 프로퍼티: 객체 고유의 상태 데이터 radius: 5, // 메서드: 상태 데이터를 참조하고 조작하는 동작 getDiameter() { // 이 메서드가 자신이 속한 객체의 프로퍼티나 다른 메서드를 참조하려면 // 자신이 속한 객체인 circle을 참조..
자바스크립트 객체의 분류자바스크립트 객체는 다음과 같이 크게 3가지로 분류할 수 있다. 표준 빌트인 객체(standard built-in objects/native objects/global objects)ECMAScript 사양에 정의된 객체로, 애플리케이션 전역의 공통 기능을 제공한다.자바스크립트 실행 환경(브라우저나 Node.js)과 관계없이 언제나 사용할 수 있다.표준 빌트인 객체는 전역 객체의 프로퍼티로 제공되므로 별도의 선언 없이 전역 변수처럼 언제나 참조할 수 있다. 호스트 객체(host objects)ECMAScript 사양에 정의되어 있지는 않지만, 자바스크립트 실행 환경에서 추가로 제공하는 객체를 말한다.브라우저 환경에서 DOM, BOM, Canvas, XMLHttpRequest, fe..
개요문제 이름: 멀쩡한 사각형 (62048)문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/62048플랫폼: 프로그래머스알고리즘 분류: 일반소요 시간: 40분 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 격자 형태로 그어진 직사각형 종이에서 대각선으로 잘라낸 후 사용할 수 있는 정사각형의 개수를 구하는 문제입니다. 문제 해결을 위해서는 전체 사각형의 개수에서 대각선에 의해 잘린 사각형의 개수를 빼는 방식을 사용할 수 있습니다. 문제에서 주어진 조건은 다음과 같습니다.가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다.종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있습니다.모든 격자칸은 1cm x 1c..