개요문제 이름: 약수의 합 (12928) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12928플랫폼: 프로그래머스알고리즘 분류: 일반소요 시간: 20분 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 주어진 정수 n의 모든 약수를 찾아 그 합을 구하는 문제입니다. 약수란 어떤 수를 나누어 떨어지게 하는 수를 말합니다. 예를 들어, 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이 문제를 해결하기 위한 기본적인 접근 방식은 1부터 n까지의 모든 수를 순회하면서 n을 나누어 떨어지게 하는 수를 찾아 더하는 것입니다. 하지만 이 방법은 n이 커질수록 비효율적일 수 있습니다. 더 효율적인 방법은 n의 제곱근까지만 순회하는 것입니다..
개요문제 이름: 최댓값과 최솟값 (12939) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12939플랫폼: 프로그래머스알고리즘 분류: 일반소요 시간: 2분 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 주어진 문자열에서 최솟값과 최댓값을 찾아 특정 형식으로 반환하는 것이 목표입니다. 문제를 해결하기 위해 다음과 같은 접근 방식을 사용할 수 있습니다.문자열을 숫자 배열로 변환배열에서 최솟값과 최댓값 찾기결과를 지정된 형식으로 반환이 문제는 문자열 처리, 배열 조작, 그리고 최솟값과 최댓값을 찾는 알고리즘을 결합하여 해결할 수 있습니다. 주어진 제한 조건에 따라 문자열에는 둘 이상의 정수가 공백으로 구분되어 있으므로, 이를 고려하여..
변수의 생명 주기변수는 선언에 의해 생성되고, 할당을 통해 값을 갖는다. 그리고 언젠가 소멸한다. 즉, 변수에는 생명 주기(life cycle)가 존재한다. 만약 변수의 생명 주기가 없다면 한번 선언된 변수는 프로그램이 종료되지 않는 한 영원히 메모리 공간을 점유하게 된다. 변수는 자신이 선언된 위치에서 생성되고 소멸한다. 전역 변수의 생명 주기는 애플리케이션의 생명 주기와 같다. 하지만 함수 내부에서 선언된 지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸한다. 지역 변수의 생명 주기변수 선언은 선언문이 어디에 있든 상관없이 런타임 이전인 소스코드의 평가 과정에서 자바스크립트 엔진에 의해 가장 먼저 실행된다. 하지만 이는 전역 변수에 한정된 것이다. 함수 내부에서 선언한 지역 변수는 함수가 호..
스코프란?스코프(scope)는 자바스크립트를 포함한 모든 프로그래밍 언어의 기본적이며 중요한 개념이다. 스코프는 변수와 함수의 유효 범위를 의미한다. 다시 말해, 변수와 함수가 어디까지 참조되고 사용될 수 있는지를 나타내는 것이 스코프이다. 모든 식별자(변수 이름, 함수 이름, 클래스 이름 등)는 자신이 선언된 위치에 따라 다른 코드에서 식별자를 참조할 수 있는 유효 범위가 결정된다. 이 유효 범위를 스코프라고 한다. 즉, 스코프는 식별자가 유효한 범위를 말한다. 스코프 내에서 식별자는 유일해야 하지만, 다른 스코프에서는 같은 이름의 식별자를 사용할 수 있다. 즉, 스코프는 네임스페이스(namespace)의 역할을 한다. 네임스페이스란 개체를 구분할 수 있는 범위를 나타내는 말로, 일반적으로 하나의 이름..
개요문제 이름: 이중우선순위큐 (42628) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42628플랫폼: 프로그래머스알고리즘 분류: 힙(Heap)소요 시간: 30시간 문제 전문설명 제한사항 입출력 문제 풀이해설이 문제는 이중 우선순위 큐(Double-ended Priority Queue)를 구현하는 문제다. 이중 우선순위 큐는 일반적인 우선순위 큐와 달리, 최댓값과 최솟값을 모두 O(1) 시간 복잡도로 삭제할 수 있는 자료구조다. 이 문제에서는 최대 힙(Max Heap)과 최소 힙(Min Heap)을 활용하여 이중 우선순위 큐를 구현해야 한다. 최대 힙은 부모 노드의 값이 자식 노드의 값보다 크거나 같은 완전 이진 트리이고, 최소 ..
함수란?함수는 자바스크립트에서 가장 중요한 핵심 개념이다. 스코프, 실행 컨텍스트, 클로저, 생성자 함수에 의한 객체 생성, 메서드, this, 프로토타입, 모듈화 등 자바스크립트의 근간을 이루는 개념들이 모두 함수와 깊은 관련이 있다. 프로그래밍 언어의 함수는 일련의 과정을 문(statement)으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. 함수 내부로 입력을 전달받는 변수를 매개변수(parameter), 입력을 인수(argument), 출력을 반환값(return value)이라 한다. // 함수 정의function add(x, y) { return x + y;}// 함수 호출var result = add(2, 5);console.log(result); // 7함수의 정의와 ..
서론자바스크립트는 7가지 데이터 타입을 제공하며, 이는 크게 원시 타입과 객체 타입으로 구분할 수 있다. 원시 타입에는 숫자, 문자열, 불리언, null, undefined, 심벌이 있으며, 나머지는 객체 타입에 속한다. 이 두 타입은 세 가지 주요 측면에서 차이를 보인다. 변경 가능성: 원시 값은 변경 불가능한(immutable) 값이다. 반면, 객체는 변경 가능한(mutable) 값이다. 변수 할당: 원시 값을 변수에 할당하면 변수에는 실제 값이 저장된다. 객체를 변수에 할당하면 참조 값이 저장된다. 값의 전달: 원시 값을 갖는 변수를 다른 변수에 할당하면 값에 의한 전달(pass by value)이 일어난다. 객체를 가리키는 변수를 다른 변수에 할당하면 참조에 의한 전달(pass by referen..
개요문제 이름: 게임 맵 최단거리 (1844) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/1844플랫폼: 프로그래머스알고리즘 분류: 깊이/너비 우선 탐색(DFS/BFS)소요 시간: 24시간... 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 전형적인 최단 경로 찾기 문제로, 너비 우선 탐색(BFS: Breadth-First Search) 알고리즘을 사용하여 해결할 수 있습니다. BFS는 그래프나 트리 구조에서 가장 가까운 노드부터 탐색하는 방법으로, 최단 경로를 찾는 데 적합합니다. 이 문제에서 게임 맵은 2차원 그래프로 표현할 수 있습니다. 각 칸은 그래프의 노드이며, 상하좌우로 인접한 칸들 사이에는 엣지가 있다고 볼 수 있습..
개요문제 이름: 타겟 넘버 (43165) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43165플랫폼: 프로그래머스알고리즘 분류: 깊이/너비 우선 탐색(DFS/BFS)소요 시간: 5시간 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 주어진 숫자들을 더하거나 빼서 특정 타겟 넘버를 만드는 모든 방법의 수를 찾는 것입니다. 이는 전형적인 깊이 우선 탐색(DFS) 또는 재귀를 사용하는 문제입니다. 문제 접근 방식각 숫자에 대해 더하거나 빼는 두 가지 선택지가 있습니다.모든 숫자에 대해 이 선택을 수행하고, 마지막에 결과가 타겟 넘버와 일치하는지 확인합니다.일치하는 경우의 수를 세어 반환합니다. 문제 지시 사항주어진 숫자 배열의 각 요소..
개요문제 이름: 큰 수 만들기 (42883) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42883플랫폼: 프로그래머스알고리즘 분류: 탐욕법(Greedy)소요 시간: 30분 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 "큰 수 만들기" 문제로, 주어진 숫자에서 특정 개수의 숫자를 제거하여 가장 큰 수를 만드는 것이 목표입니다.이 문제를 해결하기 위해서는 그리디(Greedy) 알고리즘과 스택(Stack) 자료구조를 활용하는 것이 효과적입니다. 문제의 핵심은 다음과 같습니다.주어진 숫자열을 순회하면서, 각 숫자를 검사합니다.현재 숫자보다 작은 이전 숫자들을 제거합니다. (단, 제거 가능한 횟수 내에서)최종적으로 남은 숫자들 중 앞에..
개요문제 이름: 조이스틱 (42860) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42860플랫폼: 프로그래머스알고리즘 분류: 탐욕법(Greedy)소요 시간: 10시간 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 그리디(Greedy) 알고리즘과 최적화 문제를 결합한 형태입니다. 주어진 이름을 만들기 위해 조이스틱을 최소한으로 조작하는 방법을 찾아야 합니다. 문제를 해결하기 위해서는 두 가지 주요 부분을 고려해야 합니다.각 문자를 변경하기 위한 상하 이동 횟수문자 간 이동을 위한 좌우 이동 횟수 문제 접근 방식각 문자에 대해 'A'에서 해당 문자로 변경하는데 필요한 최소 이동 횟수를 계산합니다.좌우 이동의 최적 경로를 찾습니다...
개요문제 이름: 구명보트 (42885) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42885플랫폼: 프로그래머스알고리즘 분류: 탐욕법(Greedy)소요 시간: 5시간 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 구명보트를 최소한으로 사용하여 모든 사람을 구출하는 최적의 방법을 찾는 것입니다. 문제의 핵심은 다음과 같습니다.구명보트는 최대 2명까지 탈 수 있습니다.구명보트에는 무게 제한이 있습니다.최소한의 구명보트로 모든 사람을 구출해야 합니다.이 문제는 그리디(Greedy) 알고리즘을 사용하여 효율적으로 해결할 수 있습니다. 그리디 알고리즘은 각 단계에서 가장 최적인 선택을 하는 방식으로, 이 경우 가장 무거운 사람과 가장 가..
객체란?자바스크립트는 객체 기반의 프로그래밍 언어다. 자바스크립트를 구성하는 거의 모든 것이 객체이며, 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체에 속한다. 객체 타입의 특징복합적인 자료구조: 객체 타입은 다양한 타입의 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조다.변경 가능성: 원시 타입의 값은 변경 불가능한 값이지만, 객체 타입의 값은 변경 가능한 값이다. 객체의 구조var person = { name: 'Lee', // 프로퍼티 age: 20 // 프로퍼티};객체는 0개 이상의 프로퍼티로 구성된 집합이다. 프로퍼티는 키(key)와 값(value)으로 구성된다. var counter = { num: 0, ..
타입 변환과 단축 평가타입 변환이란?자바스크립트의 모든 값은 타입을 가진다. 값의 타입은 개발자의 의도에 따라 다른 타입으로 변환할 수 있다. var x = 10;// 명시적 타입 변환// 숫자를 문자열로 타입 캐스팅한다.var str = x.toString();console.log(typeof str, str); // string 10// x 변수의 값이 변경된 것은 아니다.console.log(typeof x, x); // number 10개발자가 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환(explicit coercion) 또는 타입 캐스팅(type casting)이라고 한다. var x = 10;// 암묵적 타입 변환// 문자열 연결 연산자는 숫자 타입 x의 값을 바탕으로 새로운 문자..
개요문제 이름: 모음 사전 (84512) 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/84512플랫폼: 프로그래머스알고리즘 분류: 완전탐색소요 시간: 2시간 30분 문제 전문설명제한사항입출력 문제 풀이해설이 문제는 모음으로 이루어진 길이 5 이하의 모든 단어가 수록된 사전에서, 주어진 단어의 순서를 찾는 문제입니다. 이 문제를 해결하기 위해서는 사전에서 단어의 순서를 파악하는 것이 중요합니다.문제 접근 방식은 다음과 같습니다.모음의 순서를 정의합니다. (예: A, E, I, O, U)주어진 단어의 각 글자를 모음 순서에 따라 변환합니다.변환된 값을 이용하여 사전에서의 순서를 계산합니다.이 문제는 수학적 규칙을 찾아내는 것이 핵심입니다..