문제 설명갈색 격자 수 brown과 노란색 격자 수 yellow가 주어질 때, 카펫의 가로와 세로 크기를 구하는 함수를 작성하세요.제한사항brown: 8 이상 5,000 이하인 자연수yellow: 1 이상 2,000,000 이하인 자연수가로 길이 ≥ 세로 길이해결 방법알고리즘: 완전 탐색 (Brute Force)구현 방법탐색 범위는 Math.floor(brown / 2) + 2를 기반으로 설정합니다.세로 길이(height)를 3부터 탐색 범위까지 반복하며, 가로 길이(width)를 계산합니다.조건을 만족하면 [width, height]를 반환합니다.시간 복잡도탐색: O(N)구현 코드function solution(brown, yellow) { const outline = Math.floor(brown ..
문제 설명n개의 정수로 이루어진 임의의 수열이 주어집니다. 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 합니다. 단, 수는 반드시 한 개 이상 선택해야 합니다.제한 조건정수의 개수 nnn: 1 ≤ n ≤ 100,000각 정수 ai: −1,000 ≤ ai ≤ 1,000해결 방법알고리즘 분류: 다이나믹 프로그래밍핵심 아이디어각 위치에서의 최대 연속합을 계산하기 위해 Kadane's Algorithm을 사용합니다.현재까지의 최대 연속합과 비교하여 최댓값을 유지합니다.알고리즘 단계현재까지의 최대 연속합 유지:currentMax: 이전 위치까지의 최대 연속합에 현재 값을 더한 값과 현재 값 중 더 큰 값.전체 최대값 갱신:maxSum: 각 단계의 currentMax와 기존 ..
1. 문제 설명문장의 단어들이 특정 규칙에 따라 섞여 있습니다. 각 단어는 첫 번째와 마지막 글자가 고정된 상태에서 나머지 글자의 순서만 섞일 수 있습니다. 주어진 문장의 단어를 원래 단어의 형태로 복원하는 것이 목표입니다.2. 제한 조건원본 단어의 개수 N과 문장의 단어 개수 M은 각각 최대 200,000개.각 단어의 길이는 1 이상 8 이하입니다.각 단어의 첫 글자와 마지막 글자를 제외한 나머지 글자의 배열만 다를 뿐, 동일한 단어는 주어지지 않습니다.3. 해결 방법알고리즘 분류: 구현, 문자열 처리고유 키 생성:각 단어를 고유 키로 변환하기 위해 첫 글자, 마지막 글자, 길이, 정렬된 내부 글자를 조합합니다.예: bacde → b|e|5|abcde.원본 단어 저장:입력받은 원본 단어를 키-값 쌍으로..
문제 설명선생님이 초콜릿을 냉장고에 숨겨두었지만, 학생들이 초콜릿을 몰래 먹고 있습니다. 이를 방지하기 위해, 남은 초콜릿의 개수를 특정 규칙에 따라 포스트잇에 기록하려고 합니다. 초콜릿은 **한라봉(H), 감귤(T), 백년초(C), 키위(K), 녹차(G)**의 5가지 종류로 구성되어 있으며, 남은 초콜릿의 총합과 종류별 남은 개수를 다음 규칙에 따라 기록합니다:첫 번째 줄:남은 초콜릿의 총 개수를 기록합니다.이전 총합의 일의 자리 값을 진법으로 사용하여 숫자를 변환합니다.일의 자리가 0 또는 1이면 10진법을 사용합니다.변환된 숫자 뒤에 7H를 붙입니다.두 번째 줄:남아있는 초콜릿 개수가 많은 순서대로 초콜릿 종류를 공백 없이 나열합니다.남은 개수가 같다면, 알파벳 순서로 정렬합니다.남은 초콜릿이 없으..
문제 설명회사에서 여러 부서가 지원을 요청하며, 총 예산을 초과하지 않는 범위에서 최대한 많은 부서의 요청을 승인하려고 합니다.각 부서의 지원 요청 금액이 담긴 배열 d와 총 예산 budget이 주어질 때, 예산 내에서 지원할 수 있는 최대 부서의 수를 구하는 문제입니다.제한 조건d의 길이: 1 이상 100 이하각 부서의 지원 요청 금액: 1 이상 100,000 이하총 예산 budget: 1 이상 10,000,000 이하해결 방법알고리즘: 그리디 (Greedy)문제의 핵심예산을 최대한 많은 부서에 나누어주려면, 작은 금액부터 순차적으로 처리해야 합니다.이를 위해, 부서 요청 금액을 오름차순 정렬합니다.구현 방식배열 d를 오름차순으로 정렬합니다.요청 금액을 하나씩 누적하여 합산합니다.합이 총 예산 budg..
문제 설명n명의 사람이 영어 끝말잇기를 진행하고 있습니다. 규칙은 다음과 같습니다:1번부터 순서대로 단어를 말합니다. 마지막 사람이 단어를 말하면 다시 1번으로 돌아옵니다.앞 사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다.이미 말한 단어는 사용할 수 없습니다.한 글자 단어는 사용할 수 없습니다.탈락 조건:앞사람이 말한 단어의 마지막 문자로 시작하지 않는 단어를 말한 경우.이전에 사용된 단어를 다시 말한 경우.탈락자가 생긴다면, 해당 사람의 번호와 몇 번째 차례에 탈락했는지를 [번호, 차례] 형태로 반환합니다. 탈락자가 없다면 [0, 0]을 반환합니다.제한 조건n: 2 ≤ n ≤ 10words.length: n ≤ words.length ≤ 100각 단어의 길이: 2 ≤ 단어의 길이 ≤ ..
문제 설명OO 연구소의 아이언 슈트는 다음과 같은 두 가지 이동 방식을 지원합니다:K 칸 점프: 건전지를 K만큼 사용합니다.순간 이동: 현재 위치의 거리 x 2에 해당하는 위치로 이동하며, 건전지 사용량은 소모되지 않습니다.구매자는 특정 거리 N만큼 떨어져 있는 목적지로 이동하려고 하며, 건전지 사용량을 최소화해야 합니다.이때 건전지 사용량의 최솟값을 구하는 함수를 작성하세요.제한 조건N: 1 이상 10억 이하의 자연수K: 1 이상의 자연수해결 방법알고리즘: 비트마스킹 (Bit Manipulation)문제의 본질순간 이동은 건전지를 소모하지 않으므로 최대한 많이 사용해야 합니다.점프는 1칸씩 수행하며 건전지를 소모합니다.효율적 접근N을 이진법으로 표현했을 때, 1의 개수가 최소 점프 횟수와 동일합니다.순..
문제 설명n번째 피보나치 수를 구하는 문제입니다. 피보나치 수열은 다음과 같이 정의됩니다:F(1) = 1, F(2) = 1F(n) = F(n-1) + F(n-2) (n ≥ 3)n번째 피보나치 수를 1,234,567로 나눈 나머지를 반환하는 함수를 작성하세요.제한 조건n은 2 이상 1,000,000 이하입니다.해결 방법알고리즘: 동적 계획법 (Dynamic Programming, DP)문자열 분리 및 변환피보나치 수열의 정의에 따라 이전 두 값만 알면 다음 값을 계산할 수 있습니다.따라서 배열을 사용하지 않고 두 개의 변수로만 값을 저장합니다.최소값과 최대값 탐색반복문을 통해 F(n)를 계산하며, 이전 두 값만 업데이트합니다.1,234,567로 나눈 나머지를 매 연산마다 구하여 큰 수 문제를 방지합니다.결..