이 글에서는 주어진 수 N으로 나누어 떨어지는 반복 단위(Repunit)의 최소 길이 k를 구하는 방법을 알아보겠습니다. 반복 단위란 1만으로 이루어진 수를 의미하며, R(k)는 1이 k개 나열된 수를 뜻합니다. 예를 들어 R(4) = 1111입니다. 즉, 우리가 구해야 할 것은 R(k)가 N으로 나누어 떨어지게 만드는 최소의 k입니다.입력 : N = 13출력 : k = 6설명 : R(6), 즉 111111은 13으로 나누어 떨어집니다.입력 : N = 31출력 : k = 15문제 해결 접근 방법가장 단순한 방법은 k를 1부터 시작해
C++의 sizeof 연산자는 데이터 타입이나 데이터 구조가 차지하는 메모리 크기를 바이트 단위로 계산하는 데 사용되는 연산자입니다. 이 연산자는 부호 없는 정수(unsigned integer) 타입의 값을 반환하며, 기본(primitive) 데이터 타입과 복합(compound) 데이터 타입 모두에 적용할 수 있습니다. sizeof를 데이터 타입에 직접 적용하면 해당 타입이 차지하는 메모리 크기를 바로 확인할 수 있습니다. 기본 데이터 타입의 크기 확인하기 예제 코드 #include <bits/stdc++.h> usi
프로그래머라면 코드를 작성하고, 코드를 작성하면 함수를 사용하게 됩니다. 그리고 함수를 사용할 때마다 return 문과 exit 문을 자연스럽게 접하게 되죠. 이번 글에서는 return 문과 exit 문이 각각 어떤 역할을 하는지, 그리고 두 문장 사이에는 어떤 차이가 있는지 자세히 살펴보겠습니다. C++에서 return과 exit의 기본 개념 return: 실행 흐름의 제어권을 해당 함수를 호출한(calling) 함수로 되돌려주는 문장입니다. exit: 사용된 지점에서 프로그램 전체를 즉시 종료시키는 문장입니다. int m
이 문제에서는 하나의 배열이 주어지고, 반전(reversal) 알고리즘을 이용해 배열을 d개의 요소만큼 회전해야 합니다. 예시는 다음과 같습니다.입력 : arr[] = [1, 2, 3, 4, 5, 6, 7], d = 2 출력 : arr[] = [3, 4, 5, 6, 7, 1, 2] 설명 : 배열을 d = 2만큼 회전해야 하며, 핵심은 이 작업을 반전 기법을 사용해서 수행하는 것입니다.반전 기법으로 배열을 회전하는 과정을 몇 차례 계산해 보면 다음과 같은 결론에 도달할 수 있습니다.첫 번째 단계: 배열의 앞쪽 d개 요소를 반전합니다.
이 글에서는 주어진 배열을 k개 요소만큼 오른쪽으로 회전시키기 위한 반전 알고리즘(Reversal Algorithm)에 대해 자세히 살펴보겠습니다. 먼저 문제를 이해해 보겠습니다. 입력 : arr[ ] = { 4, 6, 2, 6, 43, 7, 3, 7 }, k = 4 출력 : { 43, 7, 3, 7, 4, 6, 2, 6 } 설명 : 배열의 모든 요소를 오른쪽으로 4칸씩 회전하면 { 43, 7, 3, 7, 4, 6, 2, 6 }이 됩니다. 입력 : arr[ ] = { 8, 5, 8, 2, 1, 4, 9, 3 }, k = 3 출력
이 글에서는 이중 연결 리스트(Doubly Linked List)를 다루고, C++로 이 리스트를 반전(뒤집기)하는 여러 가지 방법을 설명합니다. 예를 들면 다음과 같습니다.입력 : {1, 2, 3, 4}출력 : {4, 3, 2, 1}보통 떠오르는 방법은 한 가지지만, 여기서는 두 가지 방법을 모두 살펴보겠습니다. 바로 일반적인(normal) 방법과 비전통적(unorthodox) 방법입니다.1. 일반적인 방법 — 순회하면서 포인터 교환하기이 방법은 리스트를 처음부터 끝까지 순회하면서, 지나가는 각 노드의 next 포인터와 prev
이 문제에서는 이중 연결 리스트의 head 포인터와 정수 k가 주어지며, 리스트를 크기 k씩 묶인 그룹 단위로 반전해야 합니다. 예를 들어 다음과 같습니다.입력 : 1 <-> 2 <-> 3 <-> 4 <-> 5 (이중 연결 리스트), k = 3출력 : 3 <-> 2 <-> 1 <-> 5 <-> 4위 예시에서 앞의 3개 노드(1, 2, 3)가 하나의 그룹으로 반전되고, 남은 노드(4, 5)도 하나의 그룹으로 반전되는 것을 확인할 수 있습니다.문제 해
문제 개요 이 글에서는 단일 연결 리스트(singly linked list)가 주어졌을 때, 이를 주어진 크기 k의 그룹 단위로 뒤집는 방법을 다룹니다. 예를 들어 다음과 같습니다. 입력: 1->2->3->4->5->6->7->8->NULL, K = 3 출력: 3->2->1->6->5->4->8->7->NULL 입력: 1->2->3->4->5->6->7->8->NULL, K = 5 출력: 5->4-
이 글에서는 단일 연결 리스트(singly linked list)의 노드 연결을 반대로 뒤집는 방법을 다룹니다. 목표는 주어진 단일 연결 리스트를 역순으로 변환하는 함수를 작성하는 것입니다.입력: 연결 리스트: 1->2->3->4->NULL 출력: 함수 실행 후: 4->3->2->1->NULL해결 접근 방식연결 리스트를 뒤집는 방법은 여러 가지가 있습니다. 가장 먼저 떠오르는 간단한 방법은 리스트를 순회하면서 지나가는 경로상의 링크를 그때그때 뒤집는 것입니다. 이번 글에서는 세 가지 방법
PL/SQL은 SQL의 강력한 기능과 절차적 프로그래밍 명령어를 하나로 결합한 블록 구조 언어입니다. 이 글에서는 주어진 숫자를 거꾸로 뒤집는(반전시키는) PL/SQL 프로그램을 작성하는 방법을 알아보겠습니다.문제 정의먼저 예제를 통해 문제를 살펴보겠습니다.입력 : 98765출력 : 56789설명 : 98765를 반전시킨 숫자는 56789입니다.입력 : 56784출력 : 48765설명 : 56784를 반전시킨 숫자는 48765입니다.해결 접근 방식숫자를 반전시키는 핵심 아이디어는 각 자릿수를 하나씩 분리한 후, 역순으로 다시 조립하
PL/SQL은 SQL의 강력한 기능과 절차적 명령어를 하나로 결합한 블록 구조 언어입니다. 문법이 일반 영어와 비슷해 초보자도 쉽게 다룰 수 있다는 장점이 있습니다. 이 글에서는 주어진 문자열을 거꾸로 뒤집는 PL/SQL 프로그램을 단계별로 살펴보겠습니다.문제 정의입력 : taerGsIdoG출력 : GodIsGreat설명 : taerGsIdoG를 역순으로 배열하면 GodIsGreat가 됩니다.입력 : LQS출력 : SQL설명 : LQS를 역순으로 배열하면 SQL이 됩니다.해결 접근 방식먼저 주어진 문자열의 길이를 구합니다.구한 길이
이 문제에서는 하나의 정수 값 N이 주어지며, 우리의 과제는 다음 수열의 n번째 항을 찾는 것입니다.0, 0, 2, 1, 4, 2, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 8, 18, 9, 20, 10…예시를 통해 문제를 이해해 보겠습니다.입력 − N = 6출력 − 2해결 접근 방법수열의 n번째 항을 구하려면 먼저 수열을 면밀히 관찰해야 합니다. 이 수열은 두 개의 하위 수열이 홀수 번째와 짝수 번째 위치에 교차하여 배치된 형태입니다. 각각 살펴보겠습니다.짝수 번째 위치의 경우T(2) = 0T(4) = 1
이 문제에서는 정수 N이 주어지며, 우리의 목표는 다음 수열의 n번째 항을 구하는 것입니다.0, 8, 64, 216, 512, 1000, 1728, 2744…문제 이해를 위한 예시입력: N = 6출력: 1000접근 방법수열의 n번째 항을 찾으려면 먼저 수열의 패턴을 면밀히 관찰해야 합니다. 이 수열은 짝수의 세제곱으로 이루어져 있으며, 첫 번째 항은 0에서 시작합니다.따라서 수열은 다음과 같이 해석할 수 있습니다.[0]3, [2]3, [4]3, [6]3, [8]3, [10]3…i번째 항을 일반화하면 다음과 같습니다.T1 = [0]3
문제 개요이 문제에서는 하나의 정수 N이 주어지며, 다음 수열의 N번째 항을 구하는 것이 과제입니다.9, 45, 243, 1377, 8019, …예시를 통해 문제를 이해해 보겠습니다.입력 : N = 4출력 : 1377해결 접근 방법이 문제를 해결하는 가장 간단한 방법은 수열을 관찰하여 N번째 항의 일반식을 도출하는 것입니다. 각 항을 자세히 분석해 보면 다음과 같은 규칙을 발견할 수 있습니다.(11 + 21) × 31, (12 + 22) × 32, (13 + 23) × 33, … , (1n + 2n) × 3n즉, N번째 항은 (1N
문제 소개이 문제에서는 각 요소가 상자 더미(높이 1짜리 상자들이 쌓인 형태)를 나타내는 배열 arr[]가 주어집니다. 우리의 목표는 제거해야 할 상자의 총 개수를 구하는 것입니다.사람은 배열의 인덱스 0에 해당하는 상자 더미 위에 서 있으며, 배열의 끝까지 이동해야 합니다. 한 더미에서 다음 더미로 이동하는 유일한 방법은 바로 옆 더미로 점프하는 것입니다.점프는 다음 더미의 높이가 현재 높이와 같거나 더 낮을 때만 가능합니다. 만약 다음 더미가 더 높다면, 두 높이가 같아질 때까지 다음 더미에서 상자를 제거해야 합니다. 즉, 첫
문제 소개이 문제에서는 모든 요소가 0으로 초기화된 크기 N의 배열과, 아래 형태의 Q개의 쿼리가 주어집니다.update(s, e, val) → 이 쿼리는 인덱스 s부터 e까지(양 끝 포함)의 모든 요소를 val 값으로 갱신합니다.우리가 구해야 할 것은 주어진 연산을 q번 적용한 뒤 배열에 존재하는 서로 다른 숫자의 개수입니다.예시입력 : N = 6, Q = 2 Q1 = update(1, 4, 3) Q2 = update(0, 2, 4) 출력 : 3설명초기 배열 : arr[] = {0, 0, 0, 0, 0, 0}쿼리 1 − upda
문제 개요이 문제에서는 하나의 자연수 N이 주어지며, 1부터 N까지 범위 [1, N]에 속한 모든 숫자에 대해 각각의 약수 개수를 구하는 것이 우리의 과제입니다.문제 이해를 위한 예시입력 : N = 7출력 : 1 2 2 3 2 4 2출력 결과를 숫자별로 살펴보면 다음과 같습니다.1의 약수: {1} → 1개2의 약수: {1, 2} → 2개3의 약수: {1, 3} → 2개4의 약수: {1, 2, 4} → 3개5의 약수: {1, 5} → 2개6의 약수: {1, 2, 3, 6} → 4개7의 약수: {1, 7} → 2개방법 1: 반복문으로
이 문제에서는 모두 소문자로 이루어진 문자 배열이 주어지며, 우리의 목표는 배열에서 가장 많이 등장하는 접두사(prefix)의 최대 출현 횟수를 구하는 것입니다.즉, 비어 있지 않은(non-empty) 접두사들 중에서 출현 횟수가 최대가 되는 값을 계산해야 합니다.문제를 이해하기 위해 예제를 살펴보겠습니다.입력 : string = “xyyzkxyyzk” 출력 : 2접근 방식(Solution Approach)핵심 아이디어는 간단합니다. 문자열의 어떤 접두사든 반드시 첫 번째 문자를 포함하게 되므로, 해당 접두사가 반복해서 등장할 때마
문제 개요이 문제에서는 크기가 n인 배열 arr[]와 숫자 S가 주어지며, 우리의 목표는 수정된 배열의 최솟값이 가질 수 있는 최댓값을 찾는 것입니다.배열을 수정할 때 지켜야 할 규칙은 다음과 같습니다.수정 전 배열 요소들의 합과 수정 후 합의 차이는 정확히 S여야 합니다.수정된 배열에는 음수 값이 허용되지 않습니다.수정된 배열의 최솟값은 가능한 한 커야 합니다(최대화).배열의 수정은 임의의 요소를 늘리거나 줄이는 방식으로 수행할 수 있습니다.이러한 제약 조건 안에서 새로운 배열을 구성하고, 배열에서 가장 작은 요소의 최댓값을 반환
문제 개요이 문제에서는 N개의 노드로 구성된 그래프가 주어지며, 우리의 목표는 수정된 배열의 최솟값이 가질 수 있는 최댓값을 찾는 것입니다.여기서 그래프의 순열(permutation)이란, 각 위치에 대해 자신보다 왼쪽에 있으면서 공통 간선으로 서로 연결된 노드가 최소 1개 이상 존재하는 인덱스의 개수를 의미합니다.예제로 문제 이해하기입력 : N = 4, edge = {{1, 2}, {2, 3}, {3, 4}, {4, 1}}출력 : 3해결 접근 방법이 문제를 해결하는 가장 간단한 방법은 한 노드에서 출발하여 인접한 모든 노드를 차례