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

C++

  1. 두 요소의 차이가 배열 안에 존재하는 새 요소를 삽입한 후 배열을 찾는 C++ 프로그램

    서로 다른 n개의 요소로 구성된 배열 A가 있다고 가정해 봅시다. 배열 B가 nice(좋은 배열)라고 불리려면 다음 조건을 만족해야 합니다.서로 다른 임의의 두 요소 B[i]와 B[j]에 대해 그 차이의 절댓값 |B[i] - B[j]|가 반드시 배열 B 안에 적어도 한 번 존재해야 합니다.배열 B의 모든 요소는 중복 없이 서로 달라야 합니다.우리의 목표는 배열 A에 여러 개의 정수를 추가하여 크기가 최대 300인 nice 배열을 만들 수 있는지 확인하는 것입니다. 가능하다면 새로운 배열을 반환하고, 불가능하다면 -1을 반환합니다.입

  2. C++로 숫자 0 만들기: 최소 연산 횟수 구하기

    문제 개요 n자리로 이루어진 숫자 문자열 S가 있다고 가정해 보겠습니다. S는 디지털 시계를 나타내며, 문자열 전체는 0부터 10n − 1 사이의 정수를 표시합니다. 자릿수가 모자랄 경우 앞자리는 0으로 채워져 표시됩니다. 사용할 수 있는 연산은 다음 두 가지입니다. 시계에 표시된 숫자를 1만큼 감소시키기 두 자리의 숫자를 서로 교환하기 목표는 최소한의 연산으로 시계가 0을 표시하도록 만드는 것이며, 이때 필요한 연산 횟수를 계산해야 합니다. 예를 들어 입력이 S = 1000이라면 출력은 2입니다. 첫 번째 자리의 1과 마지막

  3. C++로 인접 요소 병합 연산 후 배열의 최소 길이 구하기

    n개의 양의 정수로 이루어진 배열 A가 있다고 가정해 봅시다. 이 배열에 다음과 같은 연산을 반복해서 적용합니다.연산 규칙: 서로 값이 다른 인접한 두 요소를 제거하고, 그 자리에 두 요소의 합을 넣습니다. 이 연산을 수행할 때마다 배열의 크기는 1씩 줄어듭니다.우리가 구해야 할 것은 이러한 연산을 원하는 만큼 수행한 후, 배열이 가질 수 있는 최소 길이입니다.예시입력이 다음과 같다고 해보겠습니다.A = [2, 1, 3, 1]이 경우 출력은 1이 됩니다. 그 과정은 다음과 같습니다.먼저 (1, 3)을 선택해 합치면 배열은 [2, 4

  4. C++로 숫자 n을 1로 만드는 최소 연산 횟수 계산하기

    문제 설명 임의의 숫자 n이 주어졌을 때, 다음 세 가지 연산 중 하나를 원하는 만큼 반복해서 수행할 수 있습니다. n이 2로 나누어 떨어지면 n을 n/2로 바꿉니다. n이 3으로 나누어 떨어지면 n을 2n/3으로 바꿉니다. n이 5로 나누어 떨어지면 n을 4n/5로 바꿉니다. 목표는 이 숫자를 정확히 1로 만드는 것이며, 이때 필요한 최소 연산 횟수를 구해야 합니다. 만약 어떤 방법을 사용해도 1로 만들 수 없다면 -1을 반환합니다. 예시: n = 10 입력이 n = 10일 때 정답은 4입니다. 과정은 다음과 같습니다. 10

  5. C++로 서로 다른 평점을 가진 팀원의 인덱스 찾기

    문제 개요n개의 요소를 가진 배열 A와 숫자 k가 주어진다고 가정해 봅시다. 한 학급에 n명의 학생이 있고, i번째 학생의 평점은 A[i]입니다. 우리는 k명의 학생으로 팀을 구성해야 하며, 팀원 모두의 평점이 서로 달라야 합니다.만약 이러한 조건을 만족하는 팀을 구성하는 것이 불가능하다면 Impossible을 반환하고, 가능하다면 해당 학생들의 인덱스 시퀀스를 반환하면 됩니다.예시입력이 A = [15, 13, 15, 15, 12], k = 3이라면, 출력은 [1, 2, 5]가 됩니다. 즉, 1번(평점 15), 2번(평점 13),

  6. C++로 n을 표현하는 데 필요한 최소 이진 십진수 개수 구하기

    하나의 숫자 n이 주어졌다고 가정해 봅시다. 이진 십진수(binary decimal)란 양의 정수이면서 십진법 표기상 모든 자릿수가 0 또는 1로만 이루어진 수를 의미합니다. 예를 들어, 1001(천일)은 이진 십진수이지만, 1021은 그렇지 않습니다.우리의 목표는 주어진 수 n을 여러 개의(서로 같아도 무방한) 이진 십진수의 합으로 표현하는 것입니다. 그리고 그때 필요한 이진 십진수의 최소 개수를 계산해야 합니다.예를 들어 입력이 n = 121이라면 출력은 2가 됩니다. 왜냐하면 121은 110 + 11 또는 111 + 10처럼

  7. C++로 주사위 던지기 게임에서 두 플레이어의 승리·무승부 경우의 수 계산하기

    두 개의 숫자 a와 b가 주어져 있다고 가정해 봅시다. 아말(Amal)과 비말(Bimal)이 주사위 게임을 하고 있습니다. 두 사람은 먼저 각자 1부터 6 사이의 정수를 하나씩 적어둔 뒤 주사위를 던집니다. 적어둔 숫자가 주사위에 나온 눈금에 더 가까운 플레이어가 해당 라운드에서 승리하며, 두 사람과 주사위 눈금의 차이가 같다면 무승부가 됩니다. 아말이 a를, 비말이 b를 적었다고 할 때, 아말이 이기는 경우의 수, 무승부가 되는 경우의 수, 비말이 이기는 경우의 수를 각각 구해야 합니다.예를 들어 입력이 a = 2, b = 4라고

  8. C++로 바이너리 문자열을 구매하는 데 필요한 최소 동전 수 구하기

    문제 개요세 개의 숫자 c0, c1, h와 바이너리(이진) 문자열 S가 주어집니다. 우리는 S의 임의의 비트를 자유롭게 뒤집을 수 있으며, 비트 하나를 변경할 때마다 h개의 동전을 지불해야 합니다. 몇 번의 변경(변경하지 않아도 됨)을 거친 뒤 문자열을 구매하려고 합니다.문자열을 구매하려면 문자열을 구성하는 모든 문자를 구입해야 합니다. 비트 0 하나를 구매할 때는 c0개의 동전을, 비트 1 하나를 구매할 때는 c1개의 동전을 지불합니다. 이때 문자열 전체를 구매하는 데 필요한 최소 동전 수를 구하는 것이 목표입니다.예시입력이 c0

  9. 목록의 왼쪽 또는 오른쪽 끝에서 풀 수 있는 문제 수를 세는 C++ 프로그램

    길이가 n인 배열 A와 숫자 k가 주어졌다고 가정해 봅시다. 대회에는 총 n개의 문제가 출제되어 있으며, Amal의 문제 해결 능력은 k입니다. Amal은 항상 목록의 양쪽 끝에 있는 문제만 풀 수 있고, 난이도가 k보다 큰 문제는 풀 수 없습니다. 왼쪽 끝과 오른쪽 끝의 문제 난이도가 모두 k보다 커지면 더 이상 문제를 풀지 못하고 멈추게 됩니다. 우리가 구해야 할 것은 그가 풀 수 있는 문제의 개수입니다. 여기서 A[i]는 i번째 문제의 난이도를 의미합니다.문제 예시예를 들어 입력이 A = [4, 2, 3, 1, 5, 1, 6,

  10. C++로 모든 부분 배열이 '좋은 배열'인 크기 n의 완벽한 배열 찾기

    문제 설명숫자 n이 하나 주어진다고 가정해 봅시다. 어떤 배열 B의 원소들의 합이 그 배열의 길이로 나누어 떨어질 때, 배열 B를 좋은 배열(good array)이라고 부릅니다. 또한, 크기가 n인 배열 A의 모든 비어 있지 않은 부분 배열(subarray)이 좋은 배열이고, 배열 A의 각 원소가 1부터 100 사이의 범위에 있을 때, 배열 A를 완벽한 배열(perfect array)이라고 정의합니다. 우리는 숫자 n이 주어졌을 때, 이러한 조건을 만족하는 완벽한 배열 A를 구해야 합니다.예를 들어 입력이 n = 4라면, 출력으로

  11. C++로 세 비행기가 순환적으로 서로를 좋아하는지 확인하는 프로그램

    크기가 n인 배열 A가 있다고 가정해 보겠습니다. 지구 위에는 n대의 비행기가 있으며, 각 비행기에는 1부터 n까지 번호가 붙어 있습니다. 번호가 i인 비행기는 비행기 A[i]를 좋아하고, 어떤 비행기도 자기 자신을 좋아하지 않습니다(A[i] ≠ i). 우리가 확인해야 할 것은 p는 q를 좋아하고, q는 r을 좋아하며, r은 다시 p를 좋아하는 순환 관계를 이루는 세 비행기 p, q, r이 존재하는지 여부입니다. 예를 들어 입력이 A = [2, 4, 5, 1, 3]이라면 출력은 True입니다. 비행기 1은 비행기 2를, 비행기 2

  12. C++로 정확히 k개의 피크를 가진 순열 만들기

    문제 소개두 개의 정수 n과 k가 주어졌을 때, 1부터 n까지의 숫자를 모두 사용하여 정확히 k개의 피크(peak, 봉우리)를 가지는 순열 A를 구성해야 합니다.여기서 인덱스 i가 배열 A의 피크라는 것은 다음 조건을 만족할 때를 의미합니다.A[i] > A[i-1]A[i] > A[i+1]즉, 해당 위치의 값이 양쪽 이웃 값보다 모두 커야 합니다. 만약 조건을 만족하는 순열을 만드는 것이 불가능하다면 -1을 반환해야 합니다.예를 들어 n = 5, k = 2가 입력으로 주어지면 출력은 [2, 4, 1, 5, 3]이 될 수 있

  13. 합이 s일 때 만들 수 있는 최대 중앙값을 구하는 C++ 프로그램

    두 개의 정수 n과 s가 주어졌다고 가정해 봅시다. 우리는 각 요소의 합이 정확히 s와 같으면서, n개의 음수가 아닌(non-negative) 요소로 이루어진 배열을 만들 때 얻을 수 있는 최대 중앙값(median)을 찾아야 합니다.예를 들어 입력이 n = 3, s = 5라면 출력은 2가 됩니다. 배열 [1, 2, 2]의 경우 합은 5이고 중앙값은 2이기 때문입니다.문제 해결 접근 방식배열을 오름차순으로 정렬했을 때, 중앙값 위치부터 마지막 요소까지의 개수는 다음과 같습니다.m := (n / 2)의 내림값 + 1중앙값을 최대화하려면

  14. 세 번째 문자열과 스왑하여 두 문자열을 동일하게 만들 수 있는지 확인하는 C++ 프로그램

    문제 설명 길이가 모두 n으로 같은 세 개의 문자열 S, T, U가 주어졌다고 가정해 봅시다. 인덱스 0부터 n-1까지의 각 위치 i에서, 우리는 U[i]를 S[i] 또는 T[i] 중 하나와 맞바꾸어야(swap) 합니다. 즉, 총 n번의 스왑 연산을 수행하게 됩니다. 문제의 목표는 이러한 연산을 모두 마친 뒤에 문자열 S를 T와 완전히 동일하게 만들 수 있는지 판별하는 것입니다. 예를 들어 입력이 S = abc, T = bca, U = bca라고 해봅시다. 이 경우 출력은 True가 됩니다. 모든 인덱스 i에서 U[i]를 S[i]와

  15. C++로 삼각형을 만들기 위해 막대 길이를 늘려야 하는 최소 시간(분) 계산하기

    문제 설명세 개의 숫자 a, b, c가 주어졌다고 가정해 보겠습니다. 각각 길이가 a, b, c인 세 개의 막대가 있으며, 1분마다 임의의 막대 하나를 선택해 길이를 1cm씩 늘릴 수 있습니다. 단, 막대를 자르거나 줄일 수는 없습니다. 목표는 이 세 막대로 삼각형을 만들 수 있을 때까지 걸리는 최소 시간(분)을 구하는 것입니다.예를 들어 입력이 a = 2, b = 3, c = 5라면 출력은 1이 됩니다. a 또는 b 중 아무거나 하나를 1만큼 늘리면 (a + b) > c 조건을 만족하는 삼각형을 만들 수 있기 때문입니다. 즉

  16. 네트워크 지연 시간을 고려한 타이핑 게임 승자를 구하는 C++ 프로그램

    다섯 개의 숫자 s, v1, v2, t1, t2가 주어진다고 가정해 봅시다. 아말(Amal)과 비말(Bimal)은 온라인으로 타이핑 게임을 진행하고 있으며, 이 게임에서 두 사람은 길이가 s인 문자열을 입력해야 합니다. 아말은 한 글자를 입력하는 데 v1밀리초가 걸리고, 비말은 한 글자를 입력하는 데 v2밀리초가 걸립니다. 아말의 네트워크 지연 시간은 t1밀리초, 비말의 네트워크 지연 시간은 t2밀리초입니다. 게임 진행 방식 연결 지연이 t밀리초일 때, 참가자의 경기는 다음과 같은 과정으로 진행됩니다. 게임 시작 후 정확히 t밀리

  17. 합이 k가 되는 부분 집합이 없도록 최대 개수의 숫자를 선택하는 C++ 프로그램

    두 개의 정수 n과 k가 주어졌을 때, 1부터 n 사이의 서로 다른 숫자들을 최대한 많이 선택하되, 선택된 숫자들 중 어떤 부분 집합의 합도 정확히 k가 되지 않도록 하는 문제입니다. 조건을 만족하는 숫자들을 찾았다면 해당 숫자들을 반환하면 됩니다.예를 들어 n = 5, k = 3이 입력으로 주어진다면, 출력은 [4, 5, 2]가 됩니다.접근 방법이 문제는 간단한 수학적 관찰로 해결할 수 있습니다. 합이 k가 되는 부분 집합이 존재하지 않으려면 다음 두 범위의 숫자만 선택하면 됩니다.(k+1)/2부터 k-1까지의 숫자: 이 범위의

  18. C++로 합이 k가 되는 최소 동전 개수 구하기

    문제 설명두 개의 정수 n과 k가 주어졌다고 가정해 봅시다. 우리는 가치가 1부터 n까지인 동전을 무한히 많이 가지고 있으며, 이 동전들을 조합하여 합이 정확히 k가 되도록 만들려고 합니다. 같은 가치의 동전은 여러 번 사용할 수 있습니다. 목표는 합이 k가 되기 위해 필요한 최소 동전 개수를 구하는 것입니다.예를 들어 n = 6, k = 16이 입력으로 주어진 경우를 생각해 보겠습니다. 6짜리 동전 두 개와 4짜리 동전 하나, 즉 (2 × 6) + 4 = 16이 되므로 총 3개의 동전이 필요합니다. 따라서 출력은 3이 됩니다.접근

  19. 더 이상 새로 화나는 학생이 생기지 않는 최소 시간을 계산하는 C++ 프로그램

    문제 이해하기 길이가 n인 문자열 S가 주어집니다. 문자열은 A와 P 두 종류의 문자로만 구성되어 있으며, 한 줄로 서 있는 n명의 학생을 나타냅니다. S[i]가 A면 i번째 학생은 화난 상태이고, P라면 평온한 상태입니다. 매 분마다 화난 학생(i번째)은 바로 오른쪽에 있는 평온한 학생(i+1번째)을 때립니다. 맞은 학생은 그 순간 화나게 되고, 이후 같은 방식으로 다음 학생에게 영향을 줍니다. 단, 가장 마지막에 선 학생은 아무리 화가 나 있어도 때릴 상대가 없습니다. 우리가 구해야 할 값은 더 이상 새로운 학생이 화나지 않게

  20. C++로 풀어보는 공 제거 게임의 승자 찾기 – 간단한 게임 이론 문제

    문제 설명네 개의 정수 n1, n2, k1, k2가 주어진다고 가정해 봅시다. 두 개의 상자가 있는데, 첫 번째 상자에는 n1개의 공이, 두 번째 상자에는 n2개의 공이 들어 있습니다. Amal과 Bimal이라는 두 사람이 이 게임을 진행합니다.게임 규칙은 다음과 같습니다.Amal은 자신의 차례에 첫 번째 상자에서 1개부터 k1개까지의 공을 꺼내 던져 버립니다.Bimal은 자신의 차례에 두 번째 상자에서 1개부터 k2개까지의 공을 꺼내 던져 버립니다.Amal이 먼저 시작하며, 두 사람은 번갈아 가며 플레이합니다.자신의 차례에 공을

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:293/300  20-컴퓨터/Page Goto:1 287 288 289 290 291 292 293 294 295 296 297 298 299