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

C++

  1. 반지름이 R인 원형 연못의 둘레를 구하는 C++ 프로그램

    원형 연못의 반지름을 나타내는 숫자 R이 주어졌다고 가정해 보겠습니다. 이때 우리가 구해야 할 것은 바로 이 연못의 둘레(둘레 길이)입니다.예를 들어 입력값이 R = 73이라면, 연못의 둘레는 다음과 같이 계산됩니다.458.67252742410977361942문제 해결 접근 방법원의 둘레를 구하는 공식은 잘 알려져 있습니다.둘레 = 2 × π × r여기서 핵심은 π(파이) 값을 어떻게 얻느냐입니다. C++에서는 역코사인 함수인 acos()를 활용할 수 있습니다. 수학적으로 cos(π) = -1이 성립하므로, acos(-1)을 계산하

  2. 합이 n이 되는 연속 정수 범위를 찾는 C++ 프로그램

    숫자 n이 하나 주어졌다고 가정해 봅시다. 우리는 l < r을 만족하면서 l + (l + 1) + ... + (r - 1) + r = n이 성립하는 두 정수 l과 r을 찾아야 합니다.예를 들어 입력이 n = 25라면, 출력으로 l = -2와 r = 7을 구할 수 있습니다. 실제로 (−2) + (−1) + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 = 25가 되기 때문입니다. 물론 조건만 충족한다면 다른 답도 가능합니다.해결 접근 방법이 문제는 의외로 아주 간단하게 풀 수 있습니다. 핵심은 바로

  3. 한 변의 길이가 d인 정십이각형을 만들 수 있는 방법의 수를 세는 C++ 프로그램

    숫자 d가 하나 주어져 있다고 가정해 보겠습니다. 한 변의 길이가 1인 정사각형 타일과 정삼각형 타일이 무한히 많이 있다고 할 때, 이 타일들을 조합하여 한 변의 길이가 d인 정십이각형(12각형)을 만들 수 있는 방법이 총 몇 가지인지 구하는 것이 이 문제의 목표입니다. 만약 답이 너무 커진다면 결과를 998244353으로 나눈 나머지를 반환하면 됩니다.풀이 접근 방법이 문제는 다음 단계에 따라 해결할 수 있습니다.b := 2*d - 1 c := 1 i를 2부터 d-1까지 1씩 증가시키며 반복: b := b * (2*d -

  4. C++로 방향 그래프의 모든 노드 제거에 필요한 기대 연산 횟수 계산하기

    문제 개요 방향 그래프 G의 인접 행렬이 주어져 있다고 가정해 보겠습니다. 그래프가 완전히 비워질 때까지 다음 연산을 반복해서 수행합니다. 그래프에서 정점 하나를 선택하면, 그 정점과 함께 해당 정점에서 간선을 따라 도달할 수 있는 모든 정점이 제거됩니다. 정점이 제거되면 그 정점에 연결된 간선 역시 함께 삭제됩니다. 이때 구해야 하는 값은 이 연산이 수행되는 횟수의 기댓값입니다. 예를 들어 위 그래프에서 정점 A를 가장 먼저 선택하면 나머지 정점까지 한 번에 제거되므로 연산은 1회로 끝납니다. 반면 B를 먼저 선택하면 B와 C가

  5. 세 변의 길이로 사변형의 네 번째 변을 찾는 C++ 프로그램

    세 개의 수 a, b, c가 주어져 있다고 가정해 봅시다. 우리는 임의의 비퇴화(non-degenerate) 단순 사변형 모양으로 닫힌 울타리를 만들려고 하며, 길이가 각각 a, b, c인 세 변은 이미 확보한 상태입니다. 이제 남은 한 변 d의 길이를 찾아야 합니다.예를 들어 입력이 a = 12, b = 34, c = 56이라면 출력은 100이 됩니다. 물론 사변형 조건만 만족한다면 이 외에도 다른 정답이 존재할 수 있습니다.문제 해결 접근 방법사변형이 실제로 존재하려면 가장 긴 변의 길이가 나머지 세 변의 길이 합보다 엄격하게

  6. C++로 길이 2n의 유효한 괄호 시퀀스 n개 생성하기

    숫자 n이 주어졌을 때, 정확히 n개의 서로 다른 유효한 괄호 시퀀스를 구하는 문제입니다. 여기서 괄호 시퀀스(bracket sequence)란 문자 (와 )만으로 이루어진 문자열을 의미합니다.그리고 유효한(valid) 괄호 시퀀스란, 원래 문자열의 문자들 사이에 1과 +를 삽입했을 때 올바른 산술 표현식으로 변환될 수 있는 시퀀스를 말합니다. 예를 들어 ()()는 (1)+(1)처럼 만들 수 있으므로 유효한 시퀀스입니다.즉, 주어진 숫자 n으로부터 길이가 2n인 서로 다른 유효한 괄호 시퀀스를 정확히 n개 출력해야 합니다.예를 들어

  7. C++로 배열 원소의 부호를 반전해 얻을 수 있는 서로 다른 값의 최대 개수 구하기

    n개의 원소를 가진 배열 A가 있다고 가정해 보겠습니다. 우리는 주어진 숫자 중 임의의 부분 집합을 골라 해당 숫자들의 부호를 반전(음수화)할 수 있습니다. 이때 배열에서 만들어낼 수 있는 서로 다른 값의 최대 개수를 구하는 것이 문제입니다.예를 들어 입력이 A = [1, 1, 2, 2]라고 한다면, 출력은 4가 됩니다. 첫 번째 원소와 마지막 원소의 부호를 반전하면 [-1, 1, 2, -2]라는 배열을 만들 수 있고, 이 배열은 네 개의 서로 다른 값(-1, 1, 2, -2)을 가지기 때문입니다.문제 해결 아이디어핵심은 각 숫자를

  8. C++ 프로그램: 중복 요소의 왼쪽 발생을 제거한 배열 구하기

    n개의 요소로 이루어진 배열 A가 있다고 가정해 보겠습니다. 이 배열에서 중복된 요소를 제거하고, 각 요소에 대해서는 가장 오른쪽에 위치한 항목 하나만 남기려고 합니다. 단, 남겨진 고유 요소들의 상대적인 순서는 그대로 유지되어야 합니다.예를 들어 입력이 A = [1, 5, 5, 1, 6, 1]이라면 출력은 [5, 6, 1]이 됩니다. 값 1은 세 번 등장하지만 가장 오른쪽에 있는 1만 남고, 값 5 역시 오른쪽에 있는 5만 남습니다.해결 접근 방법이 문제의 핵심 아이디어는 배열을 뒤에서부터 앞으로 순회하면서 처음 만나는 요소만 결

  9. 연 1% 복리로 X루피를 모으는 데 필요한 연수를 계산하는 C++ 프로그램

    문제 개요숫자 X가 주어졌을 때, 은행에 예치한 100루피가 연 1%의 복리(매년 이자가 원금에 다시 합산됨)로 불어난다고 가정해 봅시다. 이때 총액이 X루피에 도달하기까지 몇 년이 걸리는지 구하는 것이 목표입니다. 단, 금액은 정수 단위로만 계산합니다.예를 들어 입력값이 X = 520이라면, 출력 결과는 213이 됩니다.해결 접근 방법이 문제는 시뮬레이션 방식으로 간단히 해결할 수 있습니다. 잔액이 목표 금액 n에 도달할 때까지 매년 이자를 계산하여 원금에 더하는 과정을 반복하면서, 반복 횟수 즉, 경과 연수를 세면 됩니다.구체적

  10. C++로 게임 플레이 후 최대 허용 금액 구하기

    세 개의 숫자 A, B, C가 주어졌다고 가정해 봅시다. 다음과 같은 게임을 생각할 수 있습니다. 1부터 9까지의 숫자가 각각 적혀 있는 숫자 패널 세 개와 + 기호가 적혀 있는 연산자 패널 한 개가 존재합니다. 플레이어는 이 네 개의 패널을 왼쪽에서 오른쪽으로 배열하여 X+Y 형태의 수식을 완성해야 합니다.이때 플레이어가 받게 되는 허용 금액은 완성된 수식의 계산 결과값과 같습니다. 우리의 목표는 가능한 최대 허용 금액을 구하는 것입니다.예를 들어 입력이 A = 1, B = 5, C = 2라고 한다면 출력은 53이 됩니다. 패널을

  11. 코인을 지불하며 0에서 N까지 도달하는 최소 비용을 계산하는 C++ 프로그램

    문제 설명 다섯 개의 정수 N, A, B, C, D가 주어집니다. 숫자 0에서 시작해 N에 도달해야 하며, 아래 연산을 수행할 때마다 정해진 코인을 지불해야 합니다. 현재 숫자에 2를 곱한다 — A코인 지불 현재 숫자에 3을 곱한다 — B코인 지불 현재 숫자에 5를 곱한다 — C코인 지불 현재 숫자를 1 증가 또는 감소시킨다 — D코인 지불 연산은 원하는 만큼, 어떤 순서로든 반복 수행할 수 있습니다. 목표는 N에 도달하는 데 필요한 최소 코인 수를 구하는 것입니다. 입력 예시와 풀이 과정 입력이 N = 11, A = 1, B

  12. C++로 x번의 인접 스왑 후 두 경쟁 학생 간 최대 거리 구하기

    문제 설명네 개의 숫자 n, x, a, b가 주어진다고 가정해 봅시다. 한 줄에 n명의 학생이 서 있으며, 그중 두 명은 서로 라이벌 관계입니다. 한 학생은 위치 a에, 다른 학생은 위치 b에 서 있습니다. 위치는 왼쪽에서 오른쪽으로 1부터 n까지 번호가 매겨집니다.우리는 이 두 학생 사이의 거리를 최대한 멀리 만들고자 합니다. 이를 위해 다음 연산을 최대 x번 수행할 수 있습니다.인접한 두 학생을 선택하여 서로 자리를 바꾼다(swap).x번의 스왑 후 얻을 수 있는 최대 거리를 구하는 것이 목표입니다.예를 들어 입력이 n = 5,

  13. 저울이 폭발하지 않도록 금 조각을 올리는 순서를 찾는 C++ 프로그램

    배열 A에 서로 다른 n개의 원소가 들어 있고, 또 하나의 수 x가 주어져 있다고 가정해 봅시다. 여기에는 n개의 금 조각이 있으며, i번째 금 조각의 무게는 A[i]입니다. 우리는 이 n개의 금 조각을 한 번에 하나씩 저울 위에 올려야 합니다. 그런데 이 저울에는 특이한 결함이 하나 있는데, 바로 저울 위의 총 무게가 정확히 x가 되는 순간 폭발해 버린다는 것입니다.따라서 우리는 n개의 금 조각 전부를 적절한 순서로 올려서 과정 중에 저울이 폭발하지 않도록 할 수 있는지 판단해야 합니다. 가능하다면 그 순서를 찾아 출력하고, 불가

  14. 주어진 연산으로 각 도시에서 방문할 수 있는 도시의 수를 계산하는 C++ 프로그램

    N개의 좌표 점 P가 (xi, yi) 형태로 주어져 있다고 가정해 보겠습니다. 여기서 x와 y 값은 1부터 N까지 자연수의 순열(permutation)로 이루어져 있습니다. 1부터 N 사이의 각 k에 대해 우리는 k번 도시에 있으며, 원하는 만큼 여러 번 연산을 수행할 수 있습니다. 여기서 연산이란, 현재 위치한 도시보다 x좌표와 y좌표가 모두 작은 도시 또는 x좌표와 y좌표가 모두 큰 도시로 이동하는 것을 의미합니다. 이때 k번 도시에서 도달할 수 있는 도시의 총 개수를 구해야 합니다. 예를 들어 입력이 P = [[1, 4],

  15. 두 문자열을 역순으로 연결하는 C++ 프로그램 작성법

    문제 설명소문자로만 이루어진 두 개의 문자열 S와 T가 있다고 가정해 봅시다. 이때 T를 먼저 놓고 그 뒤에 S를 이어 붙여 하나의 최종 문자열을 만들어야 합니다.예를 들어 입력이 S = ramming, T = prog라면, 출력 결과는 programming이 됩니다.접근 방법C++에서는 + 연산자를 사용하거나 append() 함수를 호출하여 문자열을 아주 간단하게 연결할 수 있습니다. 이 문제의 해결 절차는 다음과 같습니다.res := T에 S를 연결 return res구현 예제더 쉽게 이해할 수 있도록 전체 코드를 살펴보겠습니다

  16. C++로 XOR 게임의 최종 결과가 0이 되는지 판별하는 방법

    문제 개요 N개의 원소로 이루어진 배열 A와 이진 문자열 S가 주어졌다고 가정해 봅시다. 두 명의 플레이어가 게임을 진행하며, 각각 0번과 1번으로 번호가 매겨져 있습니다. 초기값이 0인 변수 x가 하나 있고, 게임은 총 N라운드에 걸쳐 진행됩니다. i번째 라운드에서는 S[i]에 해당하는 번호의 플레이어가 차례를 가지며, 다음 두 가지 행동 중 하나를 선택할 수 있습니다. x의 값을 x XOR A[i]로 교체하기 아무것도 하지 않기 플레이어 0은 게임이 끝났을 때 x가 0이 되기를 원하고, 플레이어 1은 0이 아닌 값이 되기를

  17. C++로 정찰 부대를 구성할 병사 쌍의 인덱스 찾기

    원형으로 서 있는 n명의 병사가 있고, 각 병사의 키는 배열 A에 저장되어 있다고 가정해 봅시다. i번째 병사의 키는 A[i]입니다. 이때 정찰 부대(reconnaissance unit)는 키 차이가 가장 작은 두 명의 인접한 병사로 구성됩니다. 키가 비슷할수록 서로 곁에 있을 때 눈에 덜 띄기 때문입니다. 우리의 목표는 정찰 부대를 구성할 수 있는 병사 쌍의 인덱스를 찾는 것입니다.예를 들어 입력이 A = [10, 12, 13, 15, 10]이라면, 출력은 (5, 1)이 됩니다. 마지막 병사(키 10)와 첫 번째 병사(키 10)의

  18. C++로 계단 오르기 횟수와 각 계단의 단 수 계산하기

    크기가 n인 배열 A가 있다고 가정해 보겠습니다. 아말(Amal)은 다층 건물 안에서 계단을 오르며, 계단 하나를 오를 때마다 항상 1부터 다시 숫자를 세기 시작합니다. 예를 들어 3단짜리 계단과 4단짜리 계단 두 개를 연속해서 오른다면, 그는 1, 2, 3, 1, 2, 3, 4처럼 숫자를 말하게 됩니다.배열 A에는 아말이 말한 이 숫자들이 순서대로 기록되어 있습니다. 우리가 구해야 할 것은 다음 두 가지입니다.아말이 모두 몇 개의 계단을 올랐는지각 계단이 몇 단으로 이루어져 있는지예를 들어 입력이 A = [1, 2, 3, 1, 2

  19. 처음 n개의 자연수를 두 집합으로 나눌 때 합의 최소 차이를 구하는 C++ 프로그램

    자연수 n이 주어졌다고 가정해 봅시다. 우리는 처음 n개의 자연수(1부터 n까지)를 두 집합 A와 B로 나누어야 합니다. 이때 각 원소는 정확히 하나의 집합에만 속해야 하며, 집합 A의 원소 합과 집합 B의 원소 합 사이의 절댓값 차이가 최소가 되도록 만들어야 합니다. 그리고 그 최소 차이 값을 구하는 것이 목표입니다.예를 들어 입력이 n = 5라면 출력은 1이 됩니다. A = {1, 3, 4}, B = {2, 5}로 나누면 각각의 합은 8과 7이 되고, 따라서 차이는 1이기 때문입니다.풀이 아이디어처음 n개의 자연수 전체의 합은

  20. C++로 주어진 문자열이 나쁜(bad) 문자열인지 판별하는 방법

    n개의 문자로 이루어진 문자열 S가 있다고 가정해 봅시다. S는 소문자 영어 알파벳과 ) 문자로만 구성되어 있습니다. 문자열 끝부분에 연속해서 나타나는 )의 개수가 나머지 문자의 개수보다 엄격하게 많을 때, 이 문자열을 나쁜(bad) 문자열이라고 정의합니다. 우리의 목표는 주어진 문자열 S가 나쁜 문자열인지 여부를 판별하는 것입니다.예를 들어 입력이 S = fega))))))라면 출력 결과는 True가 됩니다. 알파벳 문자는 총 4개인데 반해 )는 6개로 더 많기 때문에 이 문자열은 나쁜 문자열에 해당하기 때문입니다.풀이 단계이 문

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