Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++

  1. C++에서 y mod 2^x 값 구하기: 2의 거듭제곱으로 나눈 나머지 계산 방법

    문제 소개이 문제에서는 두 개의 값 x와 y가 주어집니다. 우리의 목표는 y mod 2^x, 즉 y를 2의 x제곱으로 나눈 나머지를 구하는 것입니다.예시를 통해 문제를 살펴보겠습니다.입력 : x = 2, y = 19출력 : 3설명 −y % 2x = 19 % 22 = 19 % 4 = 3해결 접근 방법가장 단순한 해결 방법은 pow() 함수를 사용하여 2x 값을 직접 계산한 뒤, y % 2x를 구하는 것입니다.또 다른 효율적인 접근 방식은 로그를 활용하는 것입니다. 만약 y < 2x라면 나머지는 곧 y 자신이 됩니다. 이 경우 다

  2. C++에서 주어진 정수가 3의 거듭제곱인지 판별하는 방법

    이 문제에서는 하나의 정수 N이 주어졌을 때, 주어진 정수가 3의 거듭제곱인지 아닌지를 판별하는 것이 우리의 과제입니다.문제 이해를 위한 예시입력 : N = 729출력 : Yes설명 −36 = 729729는 3을 여섯 번 곱한 값, 즉 3의 거듭제곱이므로 결과는 Yes입니다.해결 접근 방식이 문제는 3의 거듭제곱 값의 성질을 활용하면 매우 간단하게 해결할 수 있습니다.핵심 아이디어는 다음과 같습니다. 32비트 int 자료형으로 표현할 수 있는 가장 큰 3의 거듭제곱은 319 = 1,162,261,467입니다. 어떤 수 N이 3의 거

  3. C++로 주어진 숫자가 4의 거듭제곱인지 확인하는 방법

    이 문제에서는 정수 N이 주어지며, 주어진 정수가 4의 거듭제곱인지 아닌지 판별하는 것이 우리의 과제입니다.문제 이해를 위한 예시입력 : N = 64 출력 : Yes설명 −43 = 64즉, 64는 4의 세제곱이므로 4의 거듭제곱에 해당합니다.해결 접근 방법이 문제를 해결하는 가장 간단한 방법은 숫자를 반복적으로 4로 나누면서, 나눈 결과가 계속 4로 나누어떨어지는지 확인하는 것입니다. 재귀적으로 나누기를 진행한 후 값이 최종적으로 1이 되면 true를 반환합니다.만약 나누는 도중 4로 나누어떨어지지 않는 값이 나온다면,

  4. C++로 특정 구간의 부분 배열이 산(Mountain) 형태인지 확인하는 방법

    이 문제에서는 정수 배열 arr[]와 하나의 구간(range)이 주어지며, 우리의 과제는 주어진 구간에 속한 부분 배열이 산(mountain) 형태인지 판별하는 것입니다. 여기서 산 형태란 배열의 값이 처음에는 계속 증가하다가 어느 정점을 기준으로 다시 계속 감소하는 모양을 의미합니다.문제 이해하기예시를 통해 문제를 자세히 살펴보겠습니다.입력 : arr[] = {1, 4, 2, 5, 6, 7, 3, 0}, 구간 = [2, 7]출력 : Yes설명 −구간 [2, 7]에 해당하는 부분 배열 = {2, 5, 6, 7, 3, 0}값이 먼저

  5. C++에서 한 배열이 다른 배열의 부분 집합인지 확인하는 5가지 방법

    이 문제에서는 크기가 각각 m과 n인 두 개의 정수 배열 arr1[]과 arr2[]가 주어집니다. 우리의 과제는 arr2가 arr1의 부분 집합(subset)인지 여부를 판별하는 것입니다.두 배열 arr1[]과 arr2[]는 정렬되어 있지 않으며(unordered), 모든 요소는 중복 없이 서로 다른 값을 가집니다.예시를 통해 문제를 이해해 보겠습니다.입력 : arr1[] = {5, 2, 1, 6, 8, 10}, arr2[] = {6, 2, 1}출력 : arr2는 arr1의 부분 집합입니다.문제 해결 접근 방식이 문제는 다양한 방법

  6. C++로 ax + by = n 방정식을 만족하는 x, y 값 찾는 방법

    이 문제에서는 세 개의 정수 a, b, n이 주어지며, 우리의 목표는 ax + by = n을 만족하는 정수 x와 y를 찾는 것입니다.문제 이해를 위한 예시입력 : a = 4, b = 1, n = 5출력 : x = 1, y = 1해결 접근 방법가장 간단한 해결 방법은 0부터 n 사이의 값을 하나씩 대입하면서 방정식을 만족하는지 확인하는 것입니다. 이를 위해 방정식을 다음과 같이 변형하여 사용합니다.x = (n - by) / ay = (n - ax) / bx에 해당하는 값을 순차적으로 대입했을 때 나머지 값이 b로 나누어 떨어진다면,

  7. C++로 2/n = 1/x + 1/y + 1/z를 만족하는 x, y, z 구하기

    문제 개요이 문제에서는 정수 n이 하나 주어지며, 우리의 목표는 2/n = 1/x + 1/y + 1/z 등식을 만족하는 세 정수 x, y, z를 찾는 것입니다.예시를 통해 문제를 살펴보겠습니다.입력 : n = 4출력 : 4, 5, 20출력된 값이 실제로 등식을 만족하는지 확인해 보면 다음과 같습니다.1/4 + 1/5 + 1/20 = 5/20 + 4/20 + 1/20 = 10/20 = 2/4 = 2/n ✔풀이 접근 방법이 문제는 n의 값만으로 해를 바로 유도할 수 있는 아주 단순한 수학적 구조를 가지고 있습니다.n = 1인 경우: 등

  8. C++에서 XOR 연산자 없이 두 숫자의 XOR 구하는 방법

    이 문제에서는 두 개의 정수 A와 B가 주어지며, XOR 연산자(^)를 사용하지 않고 두 숫자의 XOR 값을 구하는 것이 과제입니다.예시를 통해 문제를 이해해 보겠습니다.입력 : A = 4, B = 5출력 : 1풀이 접근 방법 1: 비트 단위 연산 활용이 문제를 해결하는 한 가지 방법은 두 숫자를 각각의 이진수로 변환한 뒤, 아래 진리표(truth table)를 기준으로 비트 단위 연산을 수행하는 것입니다.AB출력000011101110XOR의 특성상 두 비트가 서로 다를 때만 결과가 1이 됩니다. 위 표를 코드로 구현하면 다음과 같

  9. C++에서 한 숫자의 세트 비트를 기준으로 다른 숫자의 비트 토글하기

    이 문제에서는 두 개의 정수 값이 주어집니다. 우리의 과제는 “한 숫자의 세트 비트(set bit)가 있는 위치마다 다른 숫자의 해당 비트를 토글한다”는 연산을 수행하는 C++ 프로그램을 작성하는 것입니다.문제 이해를 위한 예시입력: 3 7 출력: 4 3의 이진수: 011 7의 이진수: 111첫 번째 숫자인 3(011)의 세트 비트 위치를 기준으로 두 번째 숫자 7(111)의 첫 번째와 두 번째 비트가 뒤집히면서 결과적으로 100, 즉 4가 됩니다.해결 접근 방법이 문제는 두 숫자의 XOR(배타적 논리합) 연산을 수행하는 것만으로

  10. 플러드 필(Flood Fill) 알고리즘 완벽 가이드 – C++로 페인트 채우기 기능 구현하기

    이 문제에서는 2차원 화면을 나타내는 2D 배열과, 색을 채워야 할 화면상 픽셀의 좌표, 그리고 새로 적용할 색상이 주어집니다. 우리의 과제는 현재 픽셀과 그 픽셀과 같은 색으로 연결된 모든 인접 픽셀을 새로운 색으로 칠하는 프로그램을 작성하는 것입니다.그림판 프로그램에서 색 채우기 기능은 원하는 색을 선택한 뒤 브러시(채우기 도구)로 특정 픽셀을 클릭하면 동작합니다. 클릭된 영역과 연결된 같은 색의 영역 전체가 한 번에 새로운 색으로 바뀌는 것이죠.문제 예시예제를 통해 문제를 더 자세히 이해해 보겠습니다.입력: Screen[][]

  11. C++로 딱 한 번의 스왑만 사용해 만들 수 있는 가장 큰 숫자 구하기

    이 문제에서는 양의 정수가 하나 주어집니다. 우리의 과제는 최대 한 번의 자릿수 교환(swap) 연산만을 사용하여 만들 수 있는 가장 큰 숫자를 구하는 프로그램을 작성하는 것입니다.즉, 기존 숫자의 자릿수들을 이용해 새로운 숫자를 만들되, 단 한 쌍의 자릿수만 서로 바꿀 수 있습니다.문제 이해를 위한 예시입력: n = 63512출력: 6531263512에서 첫 번째 자리의 3과 두 번째 자리의 5를 교환하면 65312가 되며, 이것이 한 번의 스왑으로 만들 수 있는 가장 큰 숫자입니다.방법 1: 모든 스왑 경우를 탐색하는 브루트 포

  12. C++로 최대 한 번의 자리 교환(swap)으로 만들 수 있는 가장 작은 숫자 구하기

    이 문제에서는 하나의 양의 정수가 주어집니다. 우리의 과제는 최대 한 번의 자리 교환(swap) 연산만 사용하여 만들 수 있는 가장 작은 숫자를 구하는 프로그램을 작성하는 것입니다.즉, 기존 숫자의 자릿수들을 이용해 새로운 숫자를 만들되, 딱 한 쌍의 자릿수만 서로 바꿀 수 있다는 조건이 있습니다.문제 이해를 위한 예시입력: n = 63519출력: 36519위 예시에서 첫 번째 자리의 6과 두 번째 자리의 3을 서로 바꾸면 63519 → 36519가 되며, 이것이 한 번의 스왑으로 만들 수 있는 가장 작은 숫자입니다.해결 방법 1:

  13. C++로 수열 3, 13, 42, 108, 235...의 n번째 항 구하기

    이 문제에서는 하나의 숫자 n이 주어지며, 우리의 목표는 수열 3, 13, 42, 108, 235...의 n번째 항을 구하는 것입니다.문제 이해를 위한 예시입력 : 5출력 : 235해결 접근 방법이 수열은 첫 n개의 자연수를 세제곱한 값들의 합으로 표현할 수 있습니다. 자연수 세제곱의 합 공식은 다음과 같습니다.(n * (n + 1) / 2)2여기서 주목할 점은 이 수열의 각 항이 해당 세제곱의 합보다 정확히 2 * n만큼 크다는 것입니다. 따라서 위 공식에 2 * n을 더하면 원하는 수열의 일반항을 얻을 수 있습니다.수열의 일반항

  14. C++에서 n!에 포함된 소수 p의 거듭제곱 구하는 방법

    문제 소개이 문제에서는 숫자 n과 소수 p가 주어집니다. 우리의 목표는 n!에 포함된 소수 p의 거듭제곱을 구하는 것입니다.문제를 이해하기 위해 예시를 살펴보겠습니다.입력 : n = 6, p = 2출력 : 4문제 접근 방법가장 직관적인 방법은 n!의 값을 직접 계산한 후 소인수분해하여, 그 결과에서 소수 p가 몇 번 곱해졌는지 세는 것입니다.예를 들어 5! = 120 = 2 × 2 × 2 × 3 × 5이므로, 5!에 포함된 2의 거듭제곱은 3입니다.팩토리얼은 다음과 같이 정의됩니다.n! = n × (n−1) × (n−2) × … ×

  15. C++로 정수의 처음 3비트와 마지막 3비트를 십진수로 변환하기

    이 문제에서는 하나의 숫자 N이 주어지며, 주어진 정수 N의 처음 세 비트와 마지막 세 비트를 추출하여 이를 십진수로 변환하는 것이 우리의 과제입니다.예시를 통해 문제를 이해해 보겠습니다.입력 : 57 출력 : 7 1문제 풀이 접근법가장 간단한 해결 방법은 숫자 n을 이진수로 변환한 뒤, 각 비트를 배열에 저장하는 것입니다. 그다음 배열에서 처음 세 개 값과 마지막 세 개 값을 각각 따로 읽어 십진수로 변환하면 됩니다. 이렇게 얻은 두 십진수 값이 바로 우리가 원하는 결과입니다.예를 들어 숫자 80을 살펴보겠습니다.80을 이진수로

  16. C 언어 형식 문자열 취약점 완벽 정리: 예제 코드와 예방 방법

    형식 문자열(Format String)이란?형식 문자열(Format String)은 문자열을 서식화(formatting)하기 위해 사용되는 ASCII 문자열입니다. 일반 텍스트와 서식 지정 매개변수(예: %d, %s, %x 등)로 구성되며, C 언어에서는 프로그램의 출력 결과를 원하는 형태로 서식화하기 위해 다양한 형식 문자열이 활용됩니다.대표적인 형식 문자열 함수로는 printf, sprintf, fprintf, snprintf 등이 있으며, 이들 함수는 첫 번째 인수로 형식 문자열을 받아 출력 형식을 결정합니다.형식 문자열 취약

  17. C++에서 가우스-조던 방법으로 행렬의 역행렬 구하기

    문제 개요이 문제에서는 2차원 행렬 mat[][]가 주어지며, 우리의 목표는 가우스-조던 방법(Gauss-Jordan Method)을 사용하여 행렬의 역행렬을 구하는 것입니다.먼저 문제를 이해하기 위한 기본 개념부터 살펴보겠습니다.행렬(Matrix)은 숫자들이 행과 열의 형태로 배열된 2차원 배열입니다.예시$\begin{bmatrix}2&5&4 \\1&6&7 \\9&3&8\end{bmatrix}$역행렬(Inverse Matrix)이란?역행렬 [A⁻¹]은 정방행렬(정사각 행렬)에 대해서만 정

  18. C++로 정렬된 연결 리스트에서 중앙값(Median) 구하는 방법

    이 문제에서는 N개의 요소로 이루어진 정렬된 연결 리스트(Sorted Linked List)가 주어지며, 우리의 과제는 이 리스트의 중앙값(Median)을 찾는 것입니다.문제 개요정렬된 연결 리스트란 모든 요소가 특정한 순서(오름차순 또는 내림차순)로 정렬되어 있는 단순 연결 리스트를 의미합니다.예시: 4 -> 6 -> 7 -> 9 -> NULL중앙값(Median)은 연결 리스트의 가운데에 위치한 요소를 말하며, 다음과 같이 정의할 수 있습니다.N이 홀수인 경우: 중앙값은 (n/2)번째 요소입니다.N이 짝수인

  19. C++로 소수 자릿수(2, 3, 5, 7)만으로 이루어진 n번째 숫자 찾기

    문제 개요이 문제에서는 숫자 N이 주어지며, 우리의 과제는 소수 자릿수(2, 3, 5, 7)만으로 이루어진 n번째 숫자를 찾는 것입니다.소수 자릿수(2, 3, 5, 7)만으로 구성된 수열은 다음과 같습니다: 2, 3, 5, 7, 22, 23, 25, 27, 32, 33...예시를 통해 문제를 이해해 보겠습니다:입력: N = 6출력: 23수열에서 여섯 번째 숫자는 22 다음인 23이 됩니다.해결 접근 방식문제를 해결하는 간단한 방법은 주어진 인덱스에 해당하는 숫자, 즉 수열의 항을 직접 찾는 것입니다. 이를 위해서는 수열의 패턴을 관

  20. C++로 해결하는 친구 페어링(Friends Pairing) 문제 완벽 가이드

    이 문제에서는 그룹에 속한 친구의 수를 나타내는 양의 정수 N이 주어지며, 친구 페어링 문제(Friends Pairing Problem)를 해결하는 프로그램을 작성하는 것이 목표입니다.그룹의 각 친구는 혼자 남아 있거나, 다른 친구 한 명과 짝을 이룰 수 있습니다. 단, 각 친구는 최대 한 번만 페어링에 참여할 수 있습니다.문제 이해를 위한 예시입력: n = 3출력: 4설명:그룹의 3명을 A, B, C라고 합시다.페어링은 다음과 같이 구성할 수 있습니다:{A}, {B}, {C}{A, B}, {C}{A, C}, {B}{A}, {B,

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:285/300  20-컴퓨터/Page Goto:1 279 280 281 282 283 284 285 286 287 288 289 290 291