정수형 배열 int arr[]와 정수형 변수 x가 주어졌을 때, 배열의 모든 요소 중 주어진 정수 x로 나누어 떨어지는 요소들만 찾아 오름차순으로 재배열하는 것이 이번 문제의 목표입니다. 이때 x의 배수가 아닌 요소들은 원래 자리에 그대로 유지되며, 배수인 요소들은 서로 상대적인 위치 관계를 지키면서 정렬된 값으로 교체됩니다. 입출력 시나리오 살펴보기 입력 − int arr[] = {4, 24, 3, 5, 7, 22, 12, 10}, int x = 2 출력 − x = 2의 배수인 요소들을 오름차순으로 재배열한 결과: 4 10 3 5
정수형 배열이 주어졌을 때, 이 배열은 정렬되어 있을 수도 있고 그렇지 않을 수도 있습니다. 우리의 과제는 먼저 값들이 정렬되어 있지 않다면 배열을 정렬한 뒤, 배열의 첫 번째 요소는 최댓값, 두 번째 요소는 최솟값, 세 번째 요소는 두 번째로 큰 값, 네 번째 요소는 두 번째로 작은 값으로 배치하는 식으로 재배열하는 것입니다. 입력 및 출력 시나리오 예시 Input − int arr[] = {7, 5, 2, 3, 4, 9, 10, 5} Output − 정렬 후 배열: 2 3 4 5 5 7 9 10최대-최소 형태로 재배열된 배열:
이번 글에서는 양의 정수로 이루어진 배열 arr[]가 주어졌을 때, 각 원소의 값이 0보다 크거나 같고 배열의 크기보다 작다는 조건 하에, arr[i]가 arr[arr[i]]가 되도록 배열을 재정렬하는 방법을 다룹니다. 단, 추가 공간은 O(1), 즉 상수 크기의 메모리만 사용해야 합니다.입출력 예시 살펴보기입력 − int arr[] = {0 3 2 1 5 4}출력 −정렬 전 배열: 0 3 2 1 5 4O(1) 추가 공간으로 arr[i]가 arr[arr[i]]가 되도록 재정렬한 결과: 0 1 2 3 4 5설명 − 크기가 6인 정수
문제 소개양의 정수로 구성된 배열 arr[]가 주어집니다. 배열의 크기가 n일 때, 배열의 모든 원소는 0 이상 n 미만의 값을 가집니다. 즉, 모든 원소가 유효한 인덱스 범위 안에 존재한다는 의미입니다. 우리의 과제는 arr[i]의 값이 j라면 arr[j]의 값이 i가 되도록 배열을 재정렬한 뒤, 최종 결과를 출력하는 것입니다.다르게 표현하면, 이 문제는 주어진 순열의 역순열(inverse permutation)을 구하는 것과 동일합니다. 원래 배열에서 값 v가 위치 i에 있었다면, 새 배열에서는 값 i가 위치 v에 놓이게 됩니다
이번 글에서는 양의 정수로 이루어진 배열 arr[]가 주어졌을 때, arr[i]의 값이 인덱스 i와 일치하도록 배열을 재정렬하는 방법을 알아보겠습니다. 단, 배열의 모든 요소는 0보다 크거나 같고 배열의 크기보다 작은 값이어야 합니다. 만약 값 i가 배열에 존재하지 않는다면, 해당 위치에는 -1을 저장하고 최종 결과를 출력합니다.입출력 예시 시나리오입력 − int arr[] = {0, 8, 1, 5, 4, 3, 2, 9}출력 − arr[i] = i 조건에 맞게 재정렬한 결과: 0 1 2 3 4 5 -1 -1설명 − 크기가 8인 정수
문제 개요양의 정수로 이루어진 배열 arr[]가 주어졌을 때, 홀수 인덱스에 위치한 모든 요소가 바로 앞의 요소(짝수 인덱스)보다 크도록 배열을 재정렬하고 그 결과를 출력하는 것이 이 글의 목표입니다.입출력 예제입력 − int arr[] = {2, 1, 5, 4, 3, 7, 8}출력 −정렬 전 배열: 2 1 5 4 3 7 8모든 홀수 인덱스 요소가 이전 요소보다 크도록 재정렬한 배열: 1 4 2 5 3 8 7설명 − 크기가 7인 정수 배열이 주어졌습니다. 짝수 인덱스의 요소가 홀수 인덱스의 요소보다 크면 두 요소의 위치를 교환(sw
임의의 크기를 가진 양의 정수형 배열 arr[]가 주어졌을 때, 각 요소를 인접한(교대하는) 요소와 곱한 뒤 그 결과값들을 모두 더했을 때 합이 최소가 되도록 배열을 재정렬하는 것이 과제입니다.다양한 입력·출력 시나리오 살펴보기입력 − int arr[] = {2, 5, 1, 7, 5, 0, 1, 0}출력 − 연속 쌍 요소의 곱의 합이 최소(7)가 되도록 배열을 재정렬한 결과: 7 0 5 0 5 1 2 1설명 − 크기가 8인 정수 배열이 주어집니다. 이를 7 0 5 0 5 1 2 1로 재정렬한 후 최소합이 반환되는지 확인합니다. 즉,
정수형 배열에는 양수와 음수가 섞여 있을 수 있습니다. 이번 글에서는 추가 메모리를 O(1), 즉 상수 크기만 사용하면서 배열 안의 양수와 음수가 서로 번갈아 나오도록 재정렬하는 방법을 C++ 코드로 살펴보겠습니다.목표는 다음과 같습니다. 양수 바로 뒤에는 음수가, 음수 바로 뒤에는 양수가 오도록 교대 배치를 만드는 것입니다. 만약 한쪽 부호의 원소가 더 많다면, 남은 원소들은 배열의 끝에 그대로 붙이게 됩니다.입력·출력 예시로 이해하기먼저 몇 가지 시나리오를 통해 문제를 구체적으로 확인해 보겠습니다.입력 1: int arr[] =
양수와 음수가 함께 포함된 임의의 크기를 가진 정수형 배열 arr[]가 주어집니다. 이때 배열을 재배열하여 모든 짝수 위치(인덱스)의 요소가 홀수 위치(인덱스)의 요소보다 작아지도록 만들고, 그 결과를 출력하는 것이 목표입니다. 입출력 시나리오 살펴보기 입력 − int arr[] = {2, 1, 4, 3, 6, 5, 8, 7} 출력 −정렬 전 배열: 2 1 4 3 6 5 8 7짝수 인덱스 요소는 더 작고 홀수 인덱스 요소는 더 크도록 재배열한 결과: 1 4 2 6 3 8 5 7 설명 − 크기가 8인 정수 배열이 주어졌습니다. 짝수
양수와 음수를 모두 포함하는 정수형 배열 arr[]가 주어졌을 때, 짝수 위치에 있는 모든 요소가 홀수 위치에 있는 요소보다 크도록 배열을 재정렬하고 그 결과를 출력하는 것이 이 글의 과제입니다.여기서 말하는 위치는 1부터 시작하는 것으로 가정합니다. 즉, 첫 번째 요소(인덱스 0)는 홀수 위치, 두 번째 요소(인덱스 1)는 짝수 위치에 해당하므로, 결국 인덱스가 홀수인 자리의 값이 인덱스가 짝수인 자리의 값보다 항상 커야 합니다.입출력 시나리오 살펴보기입력 − int arr[] = {2, 1, 4, 3, 6, 5, 8, 7}출력
양수와 음수가 모두 포함된 정수형 배열 arr[]가 주어졌다고 가정해 보겠습니다. 이때 우리의 과제는 모든 양수와 음수가 교대로 배치되도록 배열을 재배열하는 것입니다. 만약 어느 한쪽 부호의 요소가 남게 된다면, 남은 요소들은 배열의 맨 끝에 배치하면 됩니다.입력·출력 시나리오 살펴보기입력 − int arr[] = {4, 2, -1, -1, 6, -3}출력 − O(n) 시간과 O(1) 추가 공간으로 양수와 음수를 재배열한 결과: 2 -1 6 -1 4 -3설명 − 크기가 6인 정수 배열에 양수와 음수 요소가 함께 들어 있습니다. 모든
양수와 음수가 뒤섞여 있는 정수형 배열 arr[]가 주어졌을 때, C++ STL에서 제공하는 내장 sort() 함수를 사용하거나 재귀(recursion) 호출 기법을 활용하여 배열의 요소들을 재배치하고 그 결과를 출력하는 것이 이번 글의 목표입니다. 여기서 말하는 재배치란 모든 음수 요소가 양수 요소보다 앞쪽에 오도록 순서를 바꾸는 것을 의미합니다.입력·출력 시나리오 살펴보기입력 − int arr[] = {4, 2, -1, -1, 6, -3, 0}출력 − 내장 sort 함수를 사용해 재정렬한 결과: -3 -1 -1 0 2 4 6설명
양수와 음수가 섞여 있는 정수형 배열 arr[]가 주어졌을 때, 상수 크기의 추가 공간(O(1) 메모리)만 사용해 배열 내부에서 양수와 음수를 재배열하고 그 결과를 출력하는 것이 이 글의 목표입니다. 이 문제는 완전한 정렬이 아니라 음수는 앞쪽에, 양수는 뒤쪽에 배치하는 분할(partition) 작업이므로, 추가 배열 없이 두 포인터(two pointer) 기법만으로 효율적으로 해결할 수 있습니다. 이 방식은 퀵 정렬(Quick Sort)의 파티션 단계와 원리가 유사합니다. 입출력 시나리오 살펴보기 입력 − int arr[] =
정수 변수 N과 K가 주어졌을 때, 먼저 1부터 N까지의 순열을 계산한 뒤, 모든 원소가 원래 위치에서 정확히 K 거리만큼 떨어지도록 순열을 재배열하는 것이 이 글의 목표입니다.입출력 시나리오 살펴보기입력 − int n = 20, int k = 2출력 − 처음 N개의 숫자를 K 거리만큼 재배열한 결과: 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18설명 − 정수 N(=20)과 K(=2)가 주어집니다. 먼저 1부터 20까지의 순열을 계산한 후, 각 원소가 원래 자리에서 정확히 2칸씩 떨어지도
문제 개요양수와 음수가 섞여 있는 정수형 배열 arr[]가 임의의 크기로 주어집니다. 이 배열을 다음 규칙에 따라 재배열하는 것이 과제입니다.배열에서 가장 작은 원소가 홀수라면 → 홀수를 먼저, 짝수를 다음에 두는 방식으로 교대 배치합니다.배열에서 가장 작은 원소가 짝수라면 → 짝수를 먼저, 홀수를 다음에 두는 방식으로 교대 배치합니다.한쪽(홀수 또는 짝수) 원소의 개수가 부족하여 교대 배치를 계속할 수 없는 자리에는 0을 채워 넣고 결과를 출력합니다.입출력 예시입력 − int arr[] = { 1, 1, 2, 2, 5, 4 }출력
임의의 길이를 가진 문자열 str이 주어졌을 때, 주어진 입력 문자열에서 문자를 추가하거나 제거하지 않고 문자들을 재배열하여 출력 결과가 회문(palindrome) 문자열이 되도록 하는 것이 과제입니다. 회문 문자열은 앞에서 읽으나 뒤에서 읽으나 동일하게 발음되는 문자 배열을 가진 문자열을 의미합니다.입력 및 출력 시나리오 살펴보기입력 − string str = itnin출력 − 회문 형성이 가능한 경우 문자 재배열 결과: nitin설명 − 문자열 타입 변수 str이 주어집니다. 이제 입력 문자열의 문자들을 회문 문자열이 되도록 재
정수형 숫자 하나가 주어졌다고 가정해 보겠습니다. 우리의 과제는 이 숫자의 자릿수를 재배열하여, 재배열 후 만들어진 새로운 수가 원래의 수, 즉 number로도 나누어 떨어지도록 만드는 것입니다.다양한 입력·출력 시나리오 살펴보기입력 − int number = 100035출력 − 원래 수로 나누어 떨어지는 재배열 결과: 300105설명 − 정수 100035가 number로 주어졌습니다. 이제 주어진 자릿수들을 재배열하여 만들어진 수가 100035로 나누어 떨어지도록 해야 합니다. 자릿수를 재배열한 결과 300105를 얻었으며, 이
문제 개요임의의 길이를 가진 문자열 str이 주어졌을 때, 입력 문자열에서 문자를 추가하거나 제거하지 않은 상태로 최대한 많은 부분 문자열이 회문(팰린드롬)이 되도록 문자들을 재배치하는 것이 이번 문제의 목표입니다. 회문 문자열이란 앞에서부터 읽어도 뒤에서부터 읽어도 완전히 동일한 문자열을 의미합니다.입출력 시나리오입력 − string str = "itnin"출력 − 회문 부분 문자열의 수를 최대화하기 위해 재정렬된 문자열: iinnt설명 − string 타입의 변수 str이 주어집니다. 입력 문자열의 문자들이 최
문자열 타입 변수 str에 소스 코드가 저장되어 있다고 가정해 봅시다. 먼저 문자열의 크기를 계산한 뒤 함수에 전달하고, 주어진 소스 코드를 알맞게 재정렬하여 결과를 출력하는 것이 이번 문제의 목표입니다.입출력 시나리오 살펴보기입력 − string str =#include <bits/stdc++.h> using namespace std; int main() { int sum, first, second; sum = first + second; printf(\%d\, c); return 0;}출력 −#incl
C++ 재귀 함수로 문자열 회문(팰린드롬) 판별하기 문자열 Str이 입력으로 주어졌을 때, 재귀 함수를 이용해 해당 문자열이 회문(palindrome)인지 아닌지 판별하는 것이 이 글의 목표입니다. 회문 문자열이란 앞에서부터 읽어도 뒤에서부터 읽어도 동일한 단어가 되는 문자열을 의미합니다. 길이가 0인 문자열 역시 회문으로 간주합니다. 즉, 회문을 문자 단위로 뒤집으면 원래 문자열과 완전히 같아집니다. 회문의 대표적인 예로는 madam, abcba, malayalam 등이 있습니다. 예시 예제 1 입력 − Str = malayal