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

C++

  1. C++로 4와 7로만 이루어진 수열에서 주어진 수의 위치 찾기

    이 문제에서는 하나의 수 N이 주어지며, 4와 7로만 구성된 수열에서 해당 수가 몇 번째 위치에 있는지 찾아야 합니다. 4와 7만으로 이루어진 수열은 다음과 같습니다.4, 7, 44, 47, 74, 77, 444, ...예시를 통해 문제를 이해해 보겠습니다.입력N = 5출력74설명수열의 처음 5개 항은 4, 7, 44, 47, 74입니다.풀이 접근법이 문제의 가장 간단한 풀이 방법은 수열 속에 숨어 있는 규칙성(패턴)을 찾는 것입니다.수열을 자세히 관찰하면 다음과 같은 특징을 발견할 수 있습니다.짝수 번째 위치에 있는 수는 항상 끝

  2. C++로 이진수에서 유일한 세트 비트의 위치 찾기

    이 문제에서는 이진 표현상 세트 비트(set bit)가 단 하나만 존재하는 숫자 N이 주어집니다. 우리의 목표는 이 유일한 세트 비트의 위치를 찾는 것입니다. 만약 숫자에 세트 비트가 하나뿐이라면 그 위치를 반환하고, 그렇지 않다면 잘못된 숫자임을 출력해야 합니다.예시를 통해 문제를 이해해 보겠습니다.입력N = 32출력6설명숫자 32의 이진 표현은 10000입니다.해결 접근 방식본격적으로 살펴보기 전에 알아두어야 할 핵심 사실이 있습니다. 바로 어떤 수가 2의 거듭제곱일 때만 세트 비트가 정확히 하나 존재한다는 점입니다. 그 외의

  3. C++ 전위 순회 배열로 BST의 후위 순회 구하기

    문제 개요이 문제에서는 이진 탐색 트리(BST)의 전위 순회(preorder traversal) 결과를 담고 있는 배열 preOrder[]가 주어집니다. 목표는 이 배열만으로 해당 BST의 후위 순회(postorder traversal) 결과를 구하는 것입니다.먼저 예시를 통해 문제를 살펴보겠습니다.입력preOrder[] = {5, 2, 4, 7, 12}출력{4, 2, 12, 7, 5}해결 접근 방법가장 단순한 해결책은 주어진 전위 순회 배열로 BST를 직접 구성한 뒤, 완성된 트리를 후위 순회하는 것입니다. 이 방법으로도 정답을

  4. C++로 소수 모듈로 거듭제곱의 거듭제곱 계산하기 — 페르마의 소정리 활용

    문제 개요이 문제에서는 네 개의 값 A, B, C와 소수 M이 주어지며, 우리가 구해야 할 것은 소수를 법으로 하는 거듭제곱의 거듭제곱 값입니다.즉, (A ^ (B ^ C)) (mod M)의 값을 계산하는 것이 목표입니다.예시를 통해 문제를 살펴보겠습니다.입력A = 3, B = 6, C = 2, M = 11출력3설명(A ^ (B ^ C)) = (3 ^ (6 ^ 2)) = (3 ^ 36) (mod 11) = 3풀이 접근 방법가장 단순한 해결 방법은 (A ^ (B ^ C))를 직접 계산하는 것입니다. 먼저 (B^C)의 값을 구한 뒤,

  5. C++에서 과녁 명중 확률이 주어졌을 때 플레이어의 승리 확률 구하기

    이 문제에서는 네 개의 값 p, q, r, s가 주어지며, 과녁을 맞힐 확률이 주어졌을 때 플레이어가 승리할 확률을 구하는 것이 과제입니다.두 명의 플레이어가 양궁 게임을 진행하고 있습니다. 플레이어 1이 과녁을 명중시킬 확률은 p/q로, 플레이어 2가 과녁을 명중시킬 확률은 r/s로 정의됩니다. 우리가 구해야 할 것은 플레이어 1이 게임에서 승리할 확률입니다.문제 이해를 위한 예시입력p = 3, q = 5, r = 2, s = 5출력0.789풀이 접근 방법이 접근 방식에는 확률에 대한 기본적인 지식이 필요합니다.이 게임에서는 플레

  6. C++로 M번째와 N번째 항이 주어졌을 때 등비수열(GP)의 P번째 항 구하기

    이 문제에서는 다섯 개의 값, 즉 m, n, m번째 항, n번째 항, p가 주어집니다. 우리의 목표는 등비수열(GP)의 m번째 항과 n번째 항을 이용하여 p번째 항을 구하는 것입니다.문제 이해를 위한 예시입력m = 7, mthTerm = 1458, n = 10, nthterm = 39366, p = 3출력18해결 접근 방법주어진 수열이 등비수열이라고 가정해 봅시다. 일반적인 등비수열의 형태는 다음과 같습니다.GP = a , a*r , a*(r2), a*(r3) ….여기서 T번째 항을 구하는 공식은 다음과 같습니다.T번째

  7. C++로 부모 포인터가 있는 이진 트리에서 오른쪽 형제 노드 찾기

    이 문제에서는 부모 포인터(parent pointer)를 포함하는 이진 트리가 주어지며, 우리의 과제는 트리 내 특정 노드의 오른쪽 형제(right sibling) 노드를 찾는 것입니다. 문제 이해하기 예시를 통해 문제를 더 쉽게 이해해 보겠습니다. 입력 Node = 3 출력 7 위 예시에서 값이 3인 노드의 오른쪽 형제는 동일한 레벨에 위치한 값이 7인 노드입니다. 해결 접근 방법 이 문제의 핵심은 현재 노드와 같은 레벨에 있으면서 가장 가까운 조상 노드(단, 현재 노드 자신과 그 부모 노드는 제외)를 찾는 것입니다. 구체적인

  8. C++로 이진 행렬에서 1의 개수가 가장 많은 행 찾기

    이 문제에서는 각 행이 오름차순으로 정렬되어 있는 이진 행렬(binary matrix)이 주어집니다. 우리의 과제는 이 행렬에서 1의 개수가 가장 많은 행의 번호를 찾는 것입니다.먼저 예시를 통해 문제를 이해해 보겠습니다.입력binMat[][] = {     1, 1, 1, 1     0, 0, 0, 0     0, 0, 0, 1     0, 0, 1, 1 }출력1위 예시에서 첫 번째 행은

  9. C++로 행렬에서 합이 가장 큰 행 찾기

    이 문제에서는 N×N 크기의 행렬 mat[][]이 주어지며, 우리의 목표는 행렬에서 요소의 합이 가장 큰 행을 찾는 것입니다.예시를 통해 문제를 이해해 보겠습니다.입력mat[][] = { 8, 4, 1, 9 3, 5, 7, 9 2, 4, 6, 8 1, 2, 3, 4 }출력Row 2, sum 24설명Row 1: sum = 8+4+1+9 = 22 Row 2: sum = 3+5+7+9 = 24 Row 3: sum = 2+4+6+8 = 20 Row 4: sum = 1+2+3+4 = 10각 행의 합을 계산해 보면

  10. C++로 지뢰가 매설된 경로에서 가장 안전한 최단 경로 찾기

    이 문제에서는 행렬 mat[][]가 주어집니다. 이 행렬은 지뢰가 매설된 경로를 나타내며, 지뢰는 값 0으로 표시됩니다. 우리의 목표는 지뢰가 있는 경로에서 가장 안전한 최단 경로를 찾는 것입니다.안전한 경로를 따라 이동할 때는 지뢰에 인접한 칸(왼쪽, 오른쪽, 위, 아래)도 위험하므로 반드시 피해야 합니다.경로를 탐색하는 동안 허용되는 유효한 이동은 다음과 같습니다. mat[i-1][j] mat[i+1][j] mat[i][j-1] mat[i][j+1]예제로 문제 이해하기입력mat[][] = { {1, 1, 0, 1},

  11. C++로 주어진 단어 목록의 최단 고유 접두사 찾기

    이 문제에서는 단어 배열 arr[]가 주어지며, 목록에 포함된 모든 단어에 대해 가장 짧은 고유 접두사를 찾아내는 것이 과제입니다.문제를 이해하기 위해 예시를 살펴보겠습니다.입력arr[] = {"learn", "programming", "code"}출력c leap lear p출력 결과를 보면 "learn"에는 "lear", "programming"에는 "p", "code"에는 "c&

  12. C++로 2n+1개 정수 배열에서 한 번만 등장하는 요소 찾기

    문제 개요이 문제에서는 (2n+1)개의 정수 값으로 이루어진 배열이 주어집니다. 전체 요소 중 n개는 배열에 두 번씩 등장하고, 단 하나의 요소만 한 번 등장합니다. 우리의 과제는 2n+1개의 정수 요소를 가진 배열에서 단 한 번만 등장하는 그 요소를 찾는 것입니다.문제를 쉽게 이해하기 위해 예시를 살펴보겠습니다.입력arr[] = {1, 3, 5, 6, 5, 1, 3}출력6위 배열에서 1, 3, 5는 각각 두 번씩 등장하지만, 6은 한 번만 등장하므로 정답은 6입니다.해결 접근 방법가장 직관적인 해결책은 요소별 카운터를 사용하는 것

  13. C++ 이진 행렬에서 1로 이루어진 가장 큰 '+'(십자 모양) 크기 찾기

    문제 소개이 문제에서는 NxN 크기의 이진 행렬 bin[][]이 주어집니다. 우리의 과제는 이 행렬 안에서 1로만 구성된 가장 큰 +(십자) 모양의 크기를 찾는 것입니다.구체적인 예시를 통해 문제를 먼저 이해해 보겠습니다.입력0 1 1 1 1 1 0 1 0출력5위 예시에서 행렬 중앙의 1을 중심으로 상하좌우 네 방향으로 각각 한 칸씩 뻗어 나간 십자 모양을 만들 수 있으므로, 전체 크기는 5가 됩니다.해결 접근 방법이 문제의 핵심 아이디어는 다음과 같습니다. 어떤 지점을 중심으로 만들 수 있는 +의 크기는, 그 지점에서 위·아래·왼

  14. C++를 활용한 행렬에서의 단일 방향 이동 찾기

    이 문제에서는 두 점 (x1, y1)과 (x2, y2)를 나타내는 네 개의 값 x1, y1, x2, y2가 주어집니다. 우리의 목표는 행렬 위에서 한 점에서 다른 점으로 이동할 때 필요한 단일 방향을 찾는 것입니다.이동 거리(칸 수)는 몇 칸이든 상관없지만, 방향은 반드시 하나여야 합니다. 즉, 한 번의 직선 이동만으로 목적지에 도달할 수 있어야 합니다. 결과는 left, right, up, down 중 하나의 문자열로 반환하고, 어떤 단일 방향으로도 도달할 수 없다면 -1을 반환하여 불가능(not possible)함을 나타냅니다.

  15. C++ 정사각형 행렬 대각선의 최솟값과 최댓값 구하기

    문제 개요이 문제에서는 n×n 크기의 정사각형 행렬이 주어집니다. 우리의 과제는 행렬 대각선에 있는 원소들 중 최솟값과 최댓값을 찾는 것입니다. 즉, 주대각선(Principal Diagonal)과 부대각선(Secondary Diagonal) 각각에 대해 가장 작은 값과 가장 큰 값을 구해야 합니다.예시를 통해 문제를 이해해 보겠습니다.입력mat[][] = {    {3, 4, 7},    {5, 2, 1},    {1, 8,

  16. C++ 단일 연결 리스트에서 최솟값과 최댓값 찾는 방법

    이 문제에서는 하나의 단일 연결 리스트(singly linked list)가 주어지며, 우리의 과제는 이 연결 리스트 안에서 가장 작은 요소(최솟값)와 가장 큰 요소(최댓값)를 찾아내는 것입니다.예시를 통해 문제를 살펴보겠습니다.입력 4출력최솟값 = 1 최댓값 = 9해결 접근 방법이 문제를 해결하는 가장 간단한 방법은 연결 리스트를 노드 단위로 순회(traversal)하는 것입니다.data)으로 초기화합니다. 그런 다음 연결 리스트를 한 노드씩 차례대로 탐색하면서 다음 작업을 수행합니다.현재 노드의 값을 maxElement와 비교하

  17. C++에서 주어진 자릿수와 자릿수의 합으로 가장 작은 수 찾기

    문제 개요이 문제에서는 두 값이 주어집니다. 하나는 자릿수의 합(sum), 다른 하나는 자릿수(digit)입니다. 우리의 목표는 주어진 자릿수와 자릿수의 합 조건을 모두 만족하는 가장 작은 수를 찾는 것입니다.예제를 통해 문제를 이해해 보겠습니다.입력sum = 15, digit = 2출력69설명자릿수의 합이 15인 두 자리 수는 69, 78, 87, 96으로 총 네 가지가 있습니다. 이 중 가장 작은 수는 69입니다.풀이 접근 방법가장 단순한 방법은 해당 자릿수를 가진 모든 수를 하나씩 검토하면서 자릿수의 합이 주어진 값과 일치하는

  18. C++로 숫자의 가장 작은 순열 구하기

    이 문제에서는 매우 큰 수 N이 주어지며, 우리의 목표는 주어진 숫자를 재배열하여 만들 수 있는 가장 작은 순열(가장 작은 수)을 찾는 것입니다.문제 이해를 위한 예시입력N = 4529016출력1024569해결 접근 방법이 문제를 해결하는 가장 간단한 방법은 다음과 같습니다.먼저, 긴 정수 값을 문자열로 저장합니다. 그다음 문자열을 오름차순으로 정렬하면 기본적인 결과를 얻을 수 있습니다. 하지만 정렬된 결과 앞쪽에 0이 위치하는 경우가 있으므로, 모든 선행 0(leading zeros)을 첫 번째 0이 아닌 숫자 뒤로 이동시켜야 합

  19. C++ – 강물 흐름 속도와 상·하류 이동 시간 비율로 사람의 속도 구하기

    이 문제에서는 두 값 S와 N이 주어집니다. S는 강물의 흐름 속도(km/h)를 나타내고, N은 상류 방향과 하류 방향으로 이동할 때 걸리는 시간의 비율을 나타냅니다. 우리가 해야 할 일은 이 두 값을 이용해 노를 젓는 사람의 실제 이동 속도를 구하는 것입니다. 먼저 예시를 통해 문제를 이해해 보겠습니다. 입력 S = 5, N = 2 출력 15 풀이 접근법 이 문제는 배 젓기(rowing) 문제에 널리 쓰이는 수학적 관계식을 활용하면 간단히 해결할 수 있습니다. 그럼 공식이 어떻게 도출되는지 단계별로 살펴보겠습니다. 사람의 속도

  20. C++에서 private과 protected의 차이점 완벽 정리

    C++에서 접근 제한자(access modifier)는 클래스 내부의 멤버 변수와 함수에 대한 외부 접근 범위를 결정하는 중요한 개념입니다. 이 글에서는 private과 protected 두 가지 접근 제한자의 차이점을 예제 코드와 함께 자세히 살펴보겠습니다.private 접근 제한자란?private 키워드 뒤에 :(콜론)을 붙여 선언합니다.클래스 외부에서는 접근할 수 없습니다.private으로 선언된 멤버는 해당 멤버가 선언된 클래스의 멤버만 접근할 수 있도록 보장합니다.private 데이터에는 오직 멤버 함수 또는 프렌드(fri

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:263/300  20-컴퓨터/Page Goto:1 257 258 259 260 261 262 263 264 265 266 267 268 269