2563번 - 색종이 (2차원 배열) 입력 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리...
프로그래머스 알고리즘 문제 - 06
Level 1 정수 제곱근 판별 문제 링크 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. 풀이 Math.pow() base^exponen...
순열과 조합
순열과 조합에 대해 알아보자. 1부터 3까지 배열이 있을 때, 이 중에서 2개를 뽑는 방식을 예시로 순열과 조합을 알아보자. const number = [1, 2, 3]; const r = 2; 순열 (permutation) 서로 다른 n개의 원소에서 r개를 중복없이 순서에 상관있게 선택하는 혹은 나열하는 것을 말합니다. 이 순열의 ...
트리 Tree - 02
이진 트리 순회 이진 트리를 순회하는 방법에는 선순위, 중순위, 후순위 3가지 방법이 있습니다. 이는 루트와 왼쪽 서브 트리, 오른쪽 서브 트리 중에서 루트를 언제 방문하느냐로 구분합니다. 선순위 순회 PreOrder Traversal 루트 -> 왼쪽 서브 트리 -> 오른쪽 서브 트리 순서로 방문합니다. traversePre...
트리 Tree - 01
트리에 대해 알아보자. 트리 Tree 트리는 이름처럼 나무를 거꾸로 뒤집어 놓은 형태로 가장 위 Root부터 아래로 뻗어 내려가는 단방향 그래프입니다. 두 노드 사이의 하나의 간선만 연결되어 있는 형태이며, 하나의 노드에 여러 개의 노드가 연결될 수 있는 비선형 자료구조입니다. 트리의 가장 큰 특징은 루트노드를 제외한 모든 노드는 단 하나의...
완전 탐색 Brute Force
완전 탐색 Brute Force Brute : 무식한, Force : 힘 발생 가능한 모든 경우의 수를 전부 탐색하면서 조건에 맞는 답을 찾아내는 방법입니다. 모든 경우의 수를 확인하기때문에 100% 정답을 출력하지만 시간이 오래걸립니다. 종류 브루트 포스 Brute Force 반복문과 조건문을 사용하여 가능...
해시 테이블 Hash Table
해시 테이블에 대해 알아보자. 해시 테이블 Hash Table 해시테이블은 Key 값을 입력 받아 해시함수를 통해 변경한 Hash 값을 Value 값과 쌍으로 저장한 형태의 자료구조입니다. 해시 함수 Hash Function 입력받은 key를 고정된 길이의 해시로 변경합니다. 다양한 길이를 가진 키를 고정된 길이의 해시로 변경해...
재귀 함수 Recursion
재귀의 정의와 재귀 알고리즘의 기본 규칙을 알아보자. 재귀함수 Recursion 재귀함수는 자기 자신을 호출하는 함수를 말하며, 복잡한 문제를 분할 정복 방식으로 해결합니다. 스택 오버플로 (Stack OverFlow) 재귀함수를 잘못 구현할 경우 자기 자신을 무한 호출하여 스택 오버플로 (Stack OverFlow)를 초래합니다. ...
숫자 알고리즘
소수 테스트, 소인수 분해 알고리즘을 해보자. 소수 테스트 주어진 값이 소수인지 확인하는 알고리즘은 쉽게 작성 가능합니다. const isPrime(n) { if (n <= 1) { return false } for (let i = 2; i < n; i++) { if (n % i == 0) { ...
프로그래머스 알고리즘 문제 - 05
Level 0 컨트롤 제트 문제 링크 숫자와 “Z”가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 “Z”가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 “Z”로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요....