이 문제는 주어진 정수 N을 이용해 트리를 구성하고, 모든 순서쌍 (x, y)에 대해 degree(x) × degree(y)의 합이 최대가 되도록 만드는 것입니다. 단, x와 y는 서로 달라야 합니다.예제입력: N=5출력: 50설명: 1 \ 2 \ 3 \ 4 \ 5위 트리에서 각 노드의 차수(degree)는 다음과 같습니다.1번 노드의 차수 = 12번 노드의 차수 = 23번 노드의 차수 = 24번 노드의 차
문제 개요 N개의 양의 정수로 구성된 배열 Arr[]가 주어졌을 때, 정확히 K개의 부분 배열(연속된 구간)을 삭제하여 남은 원소들이 모두 소수가 되도록 만들고, 그 상태에서 남은 배열의 크기를 최대화하는 것이 이 문제의 목표입니다. 입력 예시 1 Arr[]={4, 3, 3, 4, 3, 4, 3}, K=2 출력 3 설명 − K=2이므로 정확히 2개의 부분 배열만 삭제할 수 있습니다. Arr[0]과 Arr[3…5]를 삭제하면 Arr[]={3, 3, 3}이 남게 되며, 모든 원소가 소수이면서 가능한 최대 크기를
이 문제의 목표는 N개의 요소를 가진 배열에서 연속된 자동형 수(Automorphic Number)의 최대 개수를 구하는 것입니다.자동형 수란?자동형 수란 그 수를 제곱했을 때, 제곱 결과의 끝자리 숫자가 원래 수와 동일하게 끝나는 수를 말합니다. 예를 들어 5는 5 × 5 = 25이고, 25가 5로 끝나기 때문에 자동형 수입니다.문제 이해하기예제를 통해 문제를 살펴보겠습니다.입력 − arr[] = {5, 3, 625, 6, 8, 1}출력 − 2설명 − 위 배열에 존재하는 자동형 수는 5, 625, 6, 1입니다. 하지만 연속적으로
이 문제에서는 하나의 숫자 n이 주어지며, 이 값은 수열 2⁰, 2¹, 2², …, 2ⁿ의 마지막 항을 결정합니다. 우리의 목표는 2⁰ + 2¹ + 2² + … + 2ⁿ 수열의 전체 합을 구하는 프로그램을 작성하는 것입니다.예제로 문제 이해하기입력n = 6출력127설명sum = 2⁰ + 2¹ + 2² + 2³ + 2⁴ + 2⁵ + 2⁶sum = 1 + 2 + 4 + 8 + 16 + 32 + 64 = 127방법 1: 반복문을 이용한 풀이가장 직관적인 방법은 반복문(loop)을 사용하는 것입니다. 0부터 n까지 각 값 i에 대해 2ⁱ를
문제 개요이 글에서는 M개의 면을 가진 주사위를 N번 던졌을 때, 기대할 수 있는 최대 점수, 즉 최댓값의 기댓값을 계산하는 방법을 다룹니다.주사위의 첫 번째 면에는 1개의 점, 두 번째 면에는 2개의 점이 있으며, 이런 식으로 M번째 면에는 M개의 점이 있습니다. 각 면이 나올 확률은 모두 동일하게 1/M입니다.예제로 이해하기입력 − M=2, N=3출력 − 1.875설명 − 주사위는 2개의 면 {1, 2}를 가집니다.주사위를 3번 던지면 표본 공간의 크기는 MN = 23 = 8이 됩니다.{(1, 1, 1), (1, 1, 2), (
문제 개요A유형 항목 N개와 B유형 항목 M개가 주어졌을 때, 만들 수 있는 크기 3짜리 그룹의 최대 개수를 구하는 것이 이번 문제의 목표입니다.단, 하나의 그룹에는 두 유형의 항목이 각각 최소 한 개씩 포함되어야 합니다. 즉, 모든 그룹은 A유형과 B유형의 항목을 반드시 하나 이상씩 가져야 합니다.예제로 이해하기먼저 예제를 통해 문제를 살펴보겠습니다.입력 − N = 3, M = 5출력 − 2설명그룹 1: A유형 1개 + B유형 2개그룹 2: A유형 1개 + B유형 2개총 A유형 2개와 B유형 4개가 사용됩니다.다른 예제도 확인해
문제 개요이 문제는 주어진 제약 조건을 만족하는 이진 행렬에 포함시킬 수 있는 1의 최대 개수를 구하는 것입니다.두 정수 N과 X가 주어지며(단, X ≤ N), 행렬의 크기는 N×N이어야 하고, 크기가 X×X인 모든 부분 행렬에는 최소한 하나의 0이 포함되어야 합니다.예제를 통해 문제를 자세히 살펴보겠습니다.입력 − N=4, X=2출력 − 12설명 − 결과 행렬은 다음과 같습니다.1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1입력 − N=7, X=3출력 − 45접근 방법1의 개수를 최대화하려면 먼저 행렬에 배치해야 하는 0
주어진 N개의 선분을 이용해 만들 수 있는 평행사변형의 최대 개수를 구하는 것이 이번 문제의 목표입니다. 단, 각 선분은 하나의 평행사변형에 최대 한 번만 사용할 수 있다는 조건이 붙습니다. 예시를 통해 문제를 좀 더 구체적으로 살펴보겠습니다. 입력 − Arr[] = {8, 3, 1, 3, 8, 7, 1, 3, 5, 3} 출력 − 2 설명 − 주어진 선분들로 만들 수 있는 두 개의 평행사변형은 각각 변의 길이가 8, 1, 8, 1인 평행사변형과 3, 3, 3, 3인 평행사변형입니다. 입력 − Arr[] = {7, 9, 9, 7} 출
문제 개요 주어진 정사각형 조각을 가로 또는 세로 방향으로 총 N번 잘랐을 때, 동일한 크기의 정사각형 또는 직사각형 조각을 최대 몇 개까지 얻을 수 있는지 계산하는 것이 이번 과제입니다. 예시로 이해하기 입력 − N = 8 출력 − 25 설명 − N이 8일 때 세로 절단은 4번, 가로 절단은 4번입니다. 총 조각 수 = 25개 12345 678910 1112131415 1617181920 2122232425 입력 − 7 출력 − 20 12345 678910 1112131415 1617181920 접근 방법 절단 횟수 N이
이 문제는 양의 정수 N이 주어졌을 때, 이를 길이가 각각 a, b, c인 선분들로 나누었을 때 만들 수 있는 선분의 최대 개수를 구하는 것입니다.예시를 통해 문제를 더 자세히 살펴보겠습니다.예시 1입력: N = 8, a = 3, b = 1, c = 2출력: 8설명: N = 8을 길이가 1(b)인 선분 8개로 나눌 수 있으며, 이것이 만들 수 있는 최대 선분 개수입니다.예시 2입력: N = 13, a = 2, b = 7, c = 3출력: 6해결 접근 방식이 문제는 동적 계획법(Dynamic Programming)을 활용하여 효율적으
이 문제의 목표는 크기가 N인 배열에서 크기가 K인 부분 집합을 선택했을 때, 해당 원소들의 곱에서 뒤에 붙는 0(후행 0, Trailing Zeros)의 개수를 최대화하는 것입니다.핵심 아이디어수의 끝에 붙는 0은 10이 곱해질 때마다 하나씩 늘어나며, 10 = 2 × 5이므로 2의 개수와 5의 개수 중 더 작은 값이 곧 후행 0의 개수가 됩니다. 따라서 각 숫자를 2와 5의 인수 개수로 분해한 뒤, 이를 활용한 동적 계획법(DP)으로 문제를 해결할 수 있습니다.문제 이해하기먼저 예제를 통해 무엇을 해야 하는지 살펴보겠습니다.입력
문제 개요주어진 문제는 [1, N] 범위 안의 숫자가 가질 수 있는 서로 다른 소인수(unique prime factors)의 최대 개수를 찾는 것입니다.예제로 이해하기입력 − N = 100출력 − 3설명 − [1, 100] 범위에 속한 수 30을 살펴보겠습니다.30 = 2 × 3 × 5 이므로 서로 다른 소인수는 총 3개입니다. 따라서 [1, 100] 범위에서 나타날 수 있는 서로 다른 소인수의 최대 개수는 3입니다.입력 − N = 300출력 − 4해결 접근 방식핵심 아이디어는 간단합니다. k개의 서로 다른 소인수를 가지는 가장
이 문제에서는 세 개의 숫자 a, b, M이 주어집니다. 우리가 해야 할 과제는 두 수의 합을 M으로 나눈 나머지(modulo)를 구하는 프로그램을 작성하는 것입니다.예제로 문제 이해하기입력: a = 14, b = 54, m = 7 출력: 5 설명: 14 + 54 = 68, 68 % 7 = 5해결 접근 방법이 문제는 아주 간단하게 해결할 수 있습니다. 먼저 a와 b를 더한 후, 그 합을 M으로 나누었을 때의 나머지를 출력하면 됩니다. C++에서는 나머지 연산자(%)를 사용해 손쉽게 구할 수 있습니다.구현 예제아래 프로그램은 위 해결
이 글에서는 시스템이 감당할 수 있는 좀비 프로세스(Zombie Process)의 최대 개수를 찾는 방법을 다룹니다. 즉, 프로그램이 더 이상 실행되지 않고 멈추기 직전까지 몇 개의 좀비 프로세스를 생성할 수 있는지 확인하는 것이 목표입니다.좀비 프로세스란?좀비 프로세스(흔히 defunct process라고도 불림)는 exit() 시스템 콜을 통해 이미 실행을 마친 프로세스임에도 불구하고, 여전히 프로세스 테이블에 항목이 남아 있는 상태의 프로세스를 의미합니다. 부모 프로세스가 자식 프로세스의 종료 상태를 wait()나 waitpi
이 문제의 목표는 N개의 세그먼트를 사용하여 하나 또는 여러 개의 7세그먼트 디스플레이에 표시할 수 있는 가장 큰 숫자를 찾는 것입니다.예시를 통해 문제를 더 자세히 이해해 보겠습니다.입력 − N = 5출력 − 71설명 − 5개의 세그먼트로 만들 수 있는 가장 큰 숫자는 7세그먼트 디스플레이에 다음과 같이 표시됩니다.입력 − N = 6출력 − 111접근 방법이 문제는 세 가지 경우로 나누어 생각할 수 있습니다.경우 1 − N이 0 또는 1인 경우숫자를 표시하는 데 필요한 최소 세그먼트 수는 2개(숫자 1)이므로, 세그먼트가 0개 또
이 문제의 과제는 주어진 수 N의 각 자릿수 계승(팩토리얼)의 곱과 동일한 값을 가지면서, 앞이나 뒤에 붙는 0 또는 1을 포함하지 않는 최대 수를 찾는 것입니다.예시를 통해 문제를 이해해 보겠습니다.예시입력 − N = 4912출력 − 73332222설명 − 4! × 9! × 1! × 2! = 7! × 3! × 3! × 3! × 2! × 2! × 2! × 2! = 17,418,240입력 − N = 340출력 − 3322문제 해결 접근 방법최대한 큰 답을 얻으려면 주어진 수를 소수들의 계승 곱으로 표현해야 합니다. 소수가 아닌 자릿수
이 문제에서는 하나의 행렬(matrix)이 주어지며, 우리의 과제는 이 행렬의 상삼각형(upper triangle) 요소들의 합과 하삼각형(lower triangle) 요소들의 합을 각각 계산하여 출력하는 프로그램을 작성하는 것입니다.하삼각형(Lower Triangle)이란?하삼각형은 주대각선(main diagonal)을 기준으로 아래쪽에 위치한 모든 요소를 의미합니다. 주대각선 위쪽의 요소들은 모두 0으로 표현됩니다.M00 0 0 … 0 M10 M11 0 …
이 문제에서는 n개의 정수로 이루어진 배열 arr[]가 주어지며, 배열에 있는 모든 쌍(pair)의 XOR 연산 결과를 합산한 값을 구하는 프로그램을 만드는 것이 목표입니다.문제 이해를 위한 예시입력: arr[] = {5, 1, 4} 출력: 10 설명: 모든 쌍의 XOR 값은 다음과 같습니다. 5 ^ 1 = 4 1 ^ 4 = 5 5 ^ 4 = 1 합계 = 4 + 5 + 1 = 10방법 1: 중첩 반복문을 이용한 단순 접근가장 간단한 해결 방법은 중첩 반복문을 사용하여 배열의 모든 숫자 쌍을 찾는 것입니다. 각 쌍의 XOR 값을 계산
이 문제에서는 n개의 숫자로 이루어진 배열 arr[]가 주어집니다. 우리의 목표는 배열에서 만들 수 있는 모든 부분집합의 XOR 값을 모두 더한 합을 구하는 프로그램을 작성하는 것입니다.기본 아이디어는 다음과 같습니다. 먼저 배열의 모든 부분집합을 찾고, 각 부분집합에 포함된 원소들의 XOR 값을 계산한 뒤, 이를 sum 변수에 누적합니다.문제 이해를 위한 예시입력: arr[] = {5, 1, 4} 출력: 20 각 부분집합의 XOR 값: {5} = 5 {1} = 1 {4} = 4 {5, 1} = 4 {5, 4} = 1 {1, 4}
문제 개요n개의 숫자로 이루어진 배열 arr[]가 주어졌을 때, 배열의 모든 부분 배열(subarray)에 대한 XOR 값의 합계를 구하는 것이 이번 문제의 목표입니다.부분 배열이란 원본 배열에서 연속된 요소들로 이루어진 배열을 의미합니다. 따라서 주어진 배열에서 만들 수 있는 모든 부분 배열을 찾고, 각 부분 배열의 요소들을 XOR 연산한 뒤, 그 결과값들을 모두 더하면 됩니다.예제로 이해하기입력: arr[] = {5, 1, 4}출력: 19설명: 배열의 모든 부분 배열에 대한 XOR 값은 다음과 같습니다.XOR {5} = 5XOR