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

C++

  1. C++에서 합이 x보다 작은 정렬 배열의 쌍 개수 구하기

    문제 소개정렬된 정수형 배열 하나와 정수 변수 x가 주어졌을 때, 배열의 원소들로 만들 수 있는 모든 쌍(pair) 중에서 두 원소의 합이 x보다 작은 쌍이 몇 개인지 계산하는 것이 이번 글의 목표입니다.예제 1입력 : int arr[] = {2, 7, 1, 0, 8}, int x = 8출력 : 합이 x보다 작은 쌍의 개수 − 4설명 : 주어진 배열에서 만들 수 있는 쌍과 그 합은 다음과 같습니다.(2, 7) = 9 (x보다 큼), (2, 1) = 3 (x보다 작음), (2, 0) = 2 (x보다 작음), (2, 8) = 10 (x

  2. C++로 정렬된 배열에서 곱이 k보다 작은 쌍의 개수 세기

    정수형 요소로 이루어진 정렬된 배열과 정수 변수 k가 주어졌을 때, 배열에서 서로 다른 두 요소를 짝지어 만들 수 있는 모든 쌍(pair)을 구하고, 각 쌍의 곱이 k보다 작은지 판별하여 해당하는 쌍의 개수를 세는 것이 이번 문제의 목표입니다.예제 1입력int arr[] = {2, 7, 1, 0, 8}, int k = 10출력곱이 k보다 작은 쌍의 개수: 7설명: 주어진 배열에서 만들 수 있는 쌍은 다음과 같습니다.(2, 7) = 14 → k보다 큼(2, 1) = 2 → k보다 작음 ✔(2, 0) = 0 → k보다 작음 ✔(2, 8

  3. C++에서 합이 주어진 값과 같은 두 연결 리스트의 쌍 개수 구하기

    두 개의 연결 리스트가 주어졌을 때, 각 리스트의 정수 요소로 만들 수 있는 쌍(pair) 중 그 합이 주어진 값(예: k)과 같아지는 쌍의 개수를 구하는 것이 이 글의 목표입니다. 연결 리스트는 링크를 통해 서로 연결된 데이터 구조들의 나열을 의미합니다.예제 1입력vector v_1 = {5, 7, 8, 10, 11}vector v_2 = {6, 4, 3, 2, 0}, int k = 11출력합이 주어진 값 k와 같은 두 연결 리스트의 쌍 개수: 4설명주어진 연결 리스트로 만들 수 있는 모든 조합 중 합이 11(k)이 되는 쌍은 (

  4. C++에서 곱이 주어진 값과 같은 두 연결 리스트의 쌍 개수 세기

    문제 소개 두 개의 연결 리스트가 주어졌을 때, 각 리스트에 저장된 정수 요소들을 조합하여 만들 수 있는 모든 쌍 가운데 곱이 특정 값 k와 일치하는 쌍의 개수를 구하는 것이 이번 문제의 목표입니다. 연결 리스트(linked list)란 노드들이 포인터로 순차적으로 연결된 대표적인 선형 자료구조입니다. 입력 예시 1 vector<int> v_1 = {5, 7, 8, 10, 11}; vector<int> v_2 = {6, 4, 3, 2, 0}; int k = 20; 출력 곱이 주어진 값 k와 같은 두 연결 리

  5. C++에서 NxM 행렬의 각 행에 포함된 배열 요소 개수 구하는 방법

    정수형 요소로 이루어진 배열 하나와 행·열 크기가 주어진 행렬(2차원 배열)이 있을 때, 배열의 요소들이 행렬의 각 행에 몇 개씩 존재하는지 개수를 계산하는 것이 이 글의 목표입니다.예제 1입력int arr[] = { 2, 4, 6 }int matrix[row][col] = { { 2, 4, 6 }, { 3, 4, 6 }, { 6, 2, 1 } }출력Elements of array in row 1 are: 3Elements of array in row 2 are: 2Elements of array in row 3 are: 2설명배열

  6. C++로 주어진 요소 개수로 만들 수 있는 다양한 차수의 행렬 개수 구하기

    문제 소개행렬을 구성하는 전체 요소의 개수가 주어졌을 때, 해당 요소 개수로 만들 수 있는 서로 다른 차수(order)의 행렬이 총 몇 개인지 계산하는 것이 이번 글의 목표입니다. 행렬의 차수는 m×n 형태로 표현되며, 여기서 m은 행(row)의 개수, n은 열(column)의 개수를 의미합니다.핵심 아이디어: 약수의 개수 구하기이 문제의 핵심은 사실 약수(divisor)의 개수를 구하는 것과 같습니다. 전체 요소 수가 N일 때, m×n = N을 만족하는 순서쌍 (m, n)의 개수가 곧 만들 수 있는 행렬의 개수입니다. 즉, N의

  7. C++로 [0, n] 범위에서 세트 비트가 정확히 하나뿐인 숫자 개수 구하기

    하나의 숫자가 주어졌을 때, 0부터 해당 숫자(num)까지의 범위 내에서 세트 비트(set bit)가 정확히 하나만 있는 숫자의 개수를 구하는 것이 이번 글의 목표입니다. 이진수에서 세트 비트란 값이 1인 비트를 의미합니다. 정수를 이진수로 변환하면 0과 1의 조합으로 표현되는데, 이때의 1이 바로 컴퓨터 용어에서 말하는 세트 비트입니다. 예시 1 입력: int num = 15 출력: [0, 15] 범위에서 세트 비트가 1개뿐인 숫자의 개수 − 4 설명: 주어진 숫자가 15이므로 탐색 범위는 0부터 15까지입니다. 각 숫자를 4자리

  8. C++에서 영어 알파벳과 같은 거리에 있는 문자 쌍 개수 구하기

    문제 소개문자열이 하나 주어졌을 때, 문자열 내에서 두 문자가 떨어져 있는 위치(인덱스) 간격과 알파벳 순서상 두 문자 사이의 거리가 서로 같은 문자 쌍의 개수를 계산하는 것이 이번 문제의 목표입니다.입력 − str = Tutorials Point출력 − 영어 알파벳과 같은 거리에 있는 문자 쌍의 개수: 5설명 − 알파벳에서의 거리가 문자열 내 위치 거리와 일치하는 문자 쌍은 (u, t), (u, r), (t, r), (i, o), (s, n) 입니다. 따라서 총 5개의 쌍이 존재합니다.입력 &min

  9. C++에서 k로 나누어 떨어지는 배열 요소 개수 구하기

    양의 정수로 이루어진 배열과 정수 변수 k가 주어졌을 때, 배열 내에서 주어진 값 k로 나누어 떨어지는 요소의 개수를 계산하는 것이 이번 문제의 목표입니다.예제를 통한 문제 이해입력 − int arr[] = {4, 2, 6, 1, 3, 8, 10, 9}, k = 2출력 − 2로 나누어 떨어지는 배열 요소의 개수: 5설명 − 배열의 각 요소를 k 값으로 나누고 나머지가 0인지 확인합니다. 4, 2, 6, 8, 10은 2로 나누어 떨어지지만, 1, 3, 9는 나누어 떨어지지 않습니다. 따라서 k, 즉 2

  10. C++에서 주어진 문자열의 모음 쌍 개수 세는 방법

    문자열이 주어졌을 때, 두 요소가 모두 모음으로 이루어진 쌍의 개수를 계산하는 것이 이번 문제의 목표입니다. 영어 알파벳에는 a, i, e, o, u 다섯 개의 모음이 있으며, 나머지 문자들은 모두 자음으로 분류됩니다. 입력 − string str = "tutorials point" 출력 − 주어진 문자열에서 모음 쌍의 개수: 2 설명 − 주어진 문자열에서 만들 수 있는 쌍은 (t, u), (u, t), (t, o), (o, r), (r, i), (i, a), (a, l), (l,

  11. C++에서 이진 트리를 단일 연결 리스트로 변환하는 프로그램

    이진 트리가 하나 주어졌다고 가정해 보겠습니다. 이때 우리는 이 트리를 제자리(in-place)에서 단일 연결 리스트 형태로 변환해야 합니다. 즉, 트리의 모든 노드를 왼쪽 자식 없이 오른쪽 포인터만으로 연결된 사슬 구조처럼 만드는 것입니다.예를 들어 다음과 같은 이진 트리가 입력으로 주어지면,출력은 아래와 같이 오른쪽으로만 이어진 연결 리스트 형태가 됩니다.해결 접근 방식이 문제를 해결하려면 역방향 후위 순회(reverse post-order), 즉 오른쪽 → 왼쪽 → 노드 자신 순서로 트리를 탐색하는 것이 핵심입니다. 이렇게 하

  12. C++로 폭탄 하나로 죽일 수 있는 최대 적의 수 구하는 프로그램

    문제 소개0, 1, 2 세 가지 값으로 구성된 2차원 행렬이 주어집니다. 여기서 2는 적(enemy), 1은 벽(wall), 0은 빈 칸을 의미합니다. 우리가 구해야 할 것은 폭탄 하나로 죽일 수 있는 최대 적의 수입니다.폭탄은 설치된 위치에서 같은 행과 같은 열에 있는 모든 적을 제거하지만, 벽을 만나면 더 이상 진행되지 않습니다. 또한 폭탄은 오직 빈 칸(0)에만 설치할 수 있습니다.예를 들어 입력이 다음과 같다고 가정해 보겠습니다.이 경우 출력은 3입니다. 초록색 칸에 폭탄을 설치하면 최대 3명의 적을 죽일 수 있기 때문입니다

  13. C++로 시계의 시침과 분침 사이 각도 구하는 프로그램

    시(hour)와 분(minute) 두 개의 값이 주어졌을 때, 시침과 분침 사이에 형성되는 더 작은 각도를 구하는 문제입니다.예를 들어 입력이 hour = 12, minutes = 45라면, 출력은 112.5가 됩니다.해결 접근 방식이 문제는 시침과 분침이 각각 얼마나 회전하는지를 이해하면 쉽게 풀 수 있습니다.분침은 60분 동안 360도를 회전하므로, 1분당 6도씩 움직입니다.시침은 12시간(720분) 동안 360도를 회전하므로, 1분당 0.5도씩 움직입니다.이를 바탕으로 다음 단계로 각도를 계산합니다.만약 h = 12라면, h

  14. C++로 통신 타워 그룹 개수 구하는 프로그램 – DFS 알고리즘 풀이

    문제 정의 2차원 이진 행렬이 주어졌다고 가정해 봅시다. 여기서 1은 통신 타워가 설치된 셀을, 0은 빈 셀을 나타냅니다. 타워들은 다음 두 가지 규칙에 따라 서로 통신할 수 있습니다. 직접 통신: 타워 A와 타워 B가 같은 행 또는 같은 열에 위치하면 서로 직접 통신할 수 있습니다. 간접 통신(추이성): 타워 A가 B와 통신할 수 있고, B가 C와 통신할 수 있다면 A 역시 C와 통신할 수 있습니다. 우리의 목표는 서로 통신 가능한 타워들의 집합, 즉 그룹이 총 몇 개인지 구하는 것입니다. 예시 입력 110001101 위 행

  15. C++로 연속 중복 문자를 제거하는 최소 비용 구하기

    문제 개요 소문자로만 구성된 문자열과, 문자열과 길이가 같은 음수가 아닌 정수 배열 costs가 주어졌다고 가정해 보겠습니다. 우리는 비용 costs[i]를 지불하여 문자 s[i]를 삭제할 수 있으며, 삭제가 일어나면 s[i]와 costs[i]가 모두 제거됩니다. 이때 문자열에 연속으로 반복되는 문자가 남지 않도록 만들기 위해 필요한 최소 비용을 구하는 것이 목표입니다. 예를 들어 입력이 s = xxyyx, nums = [2, 3, 10, 4, 6]이라면 출력은 6이 됩니다. s[0]을 비용 2로, s[3]을 비용 4로 삭제하면 총

  16. C++로 n 팩토리얼(n!)의 후행 0 개수 구하는 프로그램

    문제 소개숫자 n이 주어졌을 때, n!(팩토리얼) 값 끝에 붙어 있는 0(후행 0)의 개수를 구하는 것이 목표입니다.예를 들어 n = 20이라면, 20! = 2432902008176640000이므로 후행 0은 총 4개이며, 따라서 출력값은 4가 됩니다.접근 방법후행 0은 곱셈 과정에서 10이 만들어질 때마다 하나씩 생깁니다. 10 = 2 × 5이므로, 팩토리얼을 구성하는 소인수 중 2와 5가 짝지어지는 횟수가 곧 후행 0의 개수입니다. 팩토리얼에서는 2의 개수가 항상 5의 개수보다 많기 때문에, 5가 몇 번 등장하는지만 세면 됩니다

  17. C++로 풀어보는 겹치지 않는 두 부분 배열의 최대 합 구하기

    정수 배열 A가 주어졌을 때, 서로 겹치지 않는 두 부분 배열(하위 배열)에 속한 원소들의 합이 최대가 되는 값을 구하는 문제입니다. 이때 두 부분 배열의 길이는 각각 L과 M입니다.조금 더 정확하게 표현하면, 다음 식을 만족하는 최댓값 V를 찾아야 합니다.V = (A[i] + A[i+1] + ... + A[i+L-1]) + (A[j] + A[j+1] + ... + A[j+M-1])단, 아래 두 조건 중 하나를 반드시 만족해야 합니다.0 <= i < i + L - 1 < j < j + M - 1 < 배열

  18. C++로 풀어보는 '돌 옮기기 II': 최소·최대 이동 횟수 구하기

    문제 소개무한히 뻗은 수직선 위에 여러 개의 돌이 놓여 있다고 가정해 봅시다. 배열 stones에는 각 돌의 위치가 저장되어 있으며, stones[i]는 i번째 돌의 좌표를 나타냅니다. 이때 가장 왼쪽이나 가장 오른쪽에 위치한 돌을 끝점 돌(endpoint stone)이라고 부릅니다.매 차례마다 플레이어는 끝점 돌 하나를 골라 아무 돌도 없는 빈 자리로 옮겨야 하며, 옮긴 뒤에는 그 돌이 더 이상 끝점 돌이 아니어야 합니다.예를 들어 돌들이 [1, 2, 5]에 놓여 있다면, 위치 5에 있는 돌은 어디로 옮겨도(예: 0 또는 3) 여

  19. C++로 이진 트리의 사촌(Cousin) 노드 판별하기

    문제 이해하기이진 트리가 하나 주어져 있습니다. 루트 노드는 깊이(depth) 0에 위치하며, 깊이 k에 있는 노드의 자식 노드들은 깊이 k+1에 존재합니다.여기서 두 노드가 사촌(cousin) 관계라고 하는 것은, 두 노드가 같은 깊이에 있으면서 서로 다른 부모 노드를 가질 때를 의미합니다.트리의 모든 값은 중복 없이 유일하며, 트리 내 서로 다른 두 노드의 값 x와 y가 주어집니다. 우리가 해야 할 일은 값 x와 y에 해당하는 노드들이 사촌 관계인지 여부를 확인하는 것입니다.예를 들어 입력이 다음과 같다면,x = 5, y = 4

  20. C++로 풀어보는 썩어가는 오렌지(Rotting Oranges) 문제 완벽 정리

    문제 개요격자(grid) 형태의 2차원 배열이 주어지며, 각 칸은 아래 세 가지 값 중 하나를 가집니다.0 : 빈 칸1 : 신선한 오렌지2 : 썩은 오렌지매 분마다 썩은 오렌지와 상하좌우로 인접해 있는 신선한 오렌지는 함께 썩게 됩니다. 우리가 구해야 할 것은 모든 오렌지가 썩을 때까지 걸리는 최소 시간(분)입니다. 만약 어떤 신선한 오렌지가 끝까지 썩을 수 없는 상황이라면 -1을 반환해야 합니다.예를 들어 입력이 [[2,1,1],[1,1,0],[0,1,1]]과 같다면, 결과값은 4가 됩니다.해결 접근 방법이 문제는 매 단계마다 격

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:223/300  20-컴퓨터/Page Goto:1 217 218 219 220 221 222 223 224 225 226 227 228 229