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

C++

  1. C++로 특수 행렬 요소의 합 구하기: 주 대각선·부 대각선·중앙 행렬 조건 완벽 정리

    n × n 크기의 정방 행렬(square matrix)이 주어졌다고 가정해 보겠습니다. 이때 다음과 같은 값들을 특수 요소(special element)라고 부릅니다.주 대각선(main diagonal)에 위치한 값부 대각선(secondary diagonal)에 위치한 값위쪽에 정확히 (n − 1) / 2개의 행이 있고, 아래쪽에도 같은 개수의 행이 있는 중앙 행의 값왼쪽과 오른쪽에 정확히 (n − 1) / 2개의 열이 있는 중앙 열의 값이 문제의 목표는 행렬에서 이러한 특수 값들을 모두 찾아 그 합을 구하는 것입니다.예를 들어 입

  2. C++로 특수 숫자(Special Number)의 총 자릿수 구하기

    문제 설명 정수 k가 주어집니다. 모든 자릿수가 동일한 숫자를 특수 숫자(special number)라고 부릅니다. 예를 들어 1, 11, 1111은 모두 특수 숫자입니다. 특수 숫자는 1, 11, 111, 1111, 2, 22, 222, 2222, 3, 33, 333, 3333, ... 과 같은 순서로 나열됩니다. 우리가 구해야 할 값은 k까지 등장하는 특수 숫자들이 가진 자릿수의 총합입니다. 단, k의 값은 10000을 넘지 않습니다. 예를 들어 입력이 k = 9999라면 출력은 90이 됩니다. 접근 방법 이 문제는 반복문 없

  3. C++로 총 판매 금액 구하기 — 문자열 순서 기반 매출 계산 코드

    문제 개요4개의 상품을 판매하고 있으며, i번째 상품의 가격이 배열 cost[i]에 저장되어 있다고 가정해 봅시다. 그리고 실제 판매가 이루어진 순서는 문자열 items에 담겨 있습니다. 우리가 해야 할 일은 이 정보를 바탕으로 총 판매 금액을 계산하는 것입니다.문자열 items에는 1부터 4까지의 정수가 포함되며, 중복된 숫자가 있을 수도 있고 어떤 순서로든 배치될 수 있습니다.예를 들어, 입력이 cost = {10, 15, 10, 5}, items = 14214331이라면 출력 결과는 75가 됩니다.계산 과정을 살펴보면 다음과

  4. C++로 이미지가 흑백 사진인지 컬러 사진인지 판별하는 방법

    이번 글에서는 주어진 이미지가 컬러 사진인지 흑백 사진인지 판별하는 C++ 프로그램을 살펴보겠습니다.문제 정의이미지는 총 n개의 픽셀로 구성되어 있으며, 각 픽셀은 다음 여섯 가지 색상 중 하나입니다.C — 시안(Cyan)M — 마젠타(Magenta)Y — 옐로(Yellow)W — 화이트(White)G — 그레이(Grey)B — 블랙(Black)각 픽셀의 색상 정보는 문자열 pixels에 담겨 전달됩니다. 이 문자열을 분석해 해당 사진이 컬러인지 흑백인지 판별해야 합니다.판별 기준은 다음과 같습니다.픽셀 중 하나라도 C, M, Y가

  5. 바닥을 밝히는 데 필요한 최소 램프 개수를 구하는 C++ 코드

    문제 설명n행 m열의 격자(grid)로 나누어진 바닥이 있다고 가정해 보겠습니다. 이 바닥 전체를 램프로 밝혀야 하는데, 램프 하나를 두 칸 사이의 경계에 놓으면 인접한 두 칸을 동시에 밝힐 수 있습니다.램프가 세로 경계에 위치하면 왼쪽과 오른쪽 칸을 밝히고, 가로 경계에 위치하면 위쪽과 아래쪽 칸을 밝힙니다. 이때 n과 m이 주어지면, 바닥 전체를 밝히는 데 필요한 최소 램프 개수를 구해야 합니다.예를 들어 입력이 n = 5, m = 3이라면 출력은 8이 됩니다.풀이 접근 방법이 문제의 핵심은 하나의 램프가 두 개의 칸을 동시에

  6. C++로 문자열 출력에 필요한 로터리 다이얼의 총 회전 수 구하기

    문제 개요모든 소문자 영어 알파벳이 적혀 있는 로터리 다이얼(rotary dial)이 하나 있다고 가정해 봅시다. 다이얼에는 프린터가 연결되어 있으며, 포인터가 가리키는 문자가 3초 동안 유지되면 해당 문자가 종이에 출력됩니다.다이얼은 처음에 a에 위치해 있고, 문자를 출력한 뒤에도 초기 위치로 되돌아가지 않습니다. 즉, 다이얼은 마지막으로 가리킨 문자에서부터 계속 움직입니다. 우리에게 문자열 s가 주어지며, 이 문자열을 순서대로 출력해야 합니다. 다이얼을 다른 글자로 이동시킬 때마다 그 이동 거리만큼 회전이 발생합니다. 목표는 주

  7. C++로 세 수의 최소 산술 평균 편차 구하기

    문제 개요세 개의 요소를 가진 배열 A가 있다고 가정해 보겠습니다. A[0] + A[2] = 2 × A[1]이 성립할 때, A[1]은 A[0]과 A[2]의 산술 평균이 됩니다. 이때 세 수의 산술 평균 편차는 다음과 같이 정의됩니다.d(A[0], A[1], A[2]) = |A[0] + A[2] − 2 × A[1]|우리는 다음 연산을 원하는 만큼 반복해서 수행할 수 있습니다. 인덱스 집합 {0, 1, 2}에서 서로 다른 두 인덱스 i와 j를 선택한 뒤, A[i]를 1 증가시키고 A[j]를 1 감소시킵니다. 이러한 연산을 통해 만들 수

  8. C++로 첫 번째 학생에게 할당할 수 있는 최대 점수 구하기

    n개의 요소를 가진 배열 A와 숫자 m이 주어져 있다고 가정해 봅시다. n명의 학생이 시험을 응시하고 있으며, 받을 수 있는 최고 점수는 m입니다. A[i]는 i번째 학생의 점수를 의미합니다. 우리는 각 학생의 점수를 조정할 수 있지만, 반드시 다음 세 가지 조건을 만족해야 합니다. 점수는 m을 초과할 수 없습니다. 모든 점수는 정수여야 합니다. 전체 학생의 평균 점수는 변하지 않아야 합니다. 이러한 조건에서 첫 번째 학생에게 부여할 수 있는 가장 높은 점수는 얼마일까요? 예제로 이해하기 입력이 A = [1, 2, 3, 4],

  9. 차이가 n인 두 합성수를 찾는 C++ 프로그램

    하나의 숫자 n이 주어졌을 때, 두 수의 차가 정확히 n이 되도록 하는 두 개의 합성수(소수가 아닌 수) a와 b를 찾아야 합니다. 즉, 다음 조건을 만족하는 a와 b를 구하는 문제입니다.a - b = n예를 들어 입력이 n = 512라면, 출력은 5120과 4608이 됩니다.해결 접근 방식이 문제는 매우 간단한 수학적 아이디어로 해결할 수 있습니다. 바로 10 × n과 9 × n을 출력하는 것입니다.print 10*n and 9*n.왜 이 방법이 성립할까?그 이유는 다음과 같습니다.두 수의 차: (10 × n) − (9 × n)

  10. 배열 B를 재배열해 모든 원소 합이 x 이하가 되도록 할 수 있는지 확인하는 C++ 코드

    문제 설명크기가 n인 두 개의 배열 A와 B, 그리고 하나의 정수 x가 주어집니다. 우리가 확인해야 할 것은 배열 B의 원소들을 적절히 재배열했을 때, 모든 인덱스 i(0 ~ n-1)에 대해 A[i] + B[i] ≤ x 조건을 만족할 수 있는지 여부입니다.예를 들어 입력이 A = [1, 2, 3], B = [1, 1, 2], x = 4라고 가정해 보겠습니다. B를 [1, 2, 1] 형태로 재배열하면 각 위치의 합이 1 + 1 ≤ 4, 2 + 2 ≤ 4, 3 + 1 ≤ 4가 되므로 결과는 참(True)이 됩니다.접근 방법이 문제는 그

  11. C++로 배열이 Equal/Not-Equal 시퀀스로 구성될 수 있는지 확인하는 방법

    길이가 n인 문자열 S가 주어졌다고 가정해 보겠습니다. 원 위에 n개의 숫자가 원형으로 배치되어 있지만, 우리는 이 숫자들의 실제 값을 알 수 없습니다. 대신 문자열 S가 숫자들 간의 관계를 알려줍니다.문자열의 각 문자는 다음과 같은 의미를 가집니다.S[i] = E : i번째 숫자와 (i+1)번째 숫자가 서로 같음S[i] = N : i번째 숫자와 (i+1)번째 숫자가 서로 다름이때 문자열 S에 담긴 정보만으로 실제 숫자 시퀀스를 재구성할 수 있는지 판별해야 합니다.예를 들어 입력이 S = ENNEENE라면 출력은 True입니다. [

  12. k를 초과하지 않는 사탕 추가 연산의 최대 횟수를 계산하는 C++ 코드

    문제 개요n개의 요소를 가진 배열 A와 하나의 숫자 k가 주어집니다. 사탕 더미가 총 n개 있으며, i번째 더미에는 A[i]개의 사탕이 들어 있습니다. 우리는 서로 다른 두 인덱스 i와 j(i ≠ j)를 골라 A[j]에 A[i]개의 사탕을 추가하는 연산을 수행할 수 있으며, 이때 원본인 A[i]는 줄어들지 않습니다.이 연산은 원하는 만큼 반복할 수 있지만 한 가지 제약이 있습니다. 어떤 더미라도 k개보다 엄격하게 많은 사탕을 담게 되면 더 이상 연산을 진행할 수 없습니다. 목표는 이 조건을 지키면서 연산을 수행할 수 있는 최대 횟수

  13. C++로 지정된 범위 내에서 팩 크기 판별하기

    두 개의 숫자 l과 r이 주어졌다고 가정해 보겠습니다. 어느 가게에서는 할인된 가격으로 a개의 식품이 들어 있는 용기를 판매하고 있으며, 어떤 고객이 x개의 식품을 구매하려고 합니다. 이 고객은 다음과 같은 탐욕적인(greedy) 전략을 따릅니다. 먼저 할인 가격으로 floor(x/a)팩을 구매합니다. 이후 남은 (x mod a)개는 하나씩 낱개로 구매하려고 합니다. 그러나 고객은 탐욕적이기 때문에, 남은 (x mod a)개를 낱개로 사려다가 (x mod a) ≥ a/2 조건이 성립하면 오히려 a개가 든 팩 하나를 통째로 구매해

  14. C++로 이진 배열의 쿼리 작업 효율적으로 처리하기

    n개의 원소로 이루어진 배열 A와 q개의 쿼리 목록 Q가 있다고 가정해 보겠습니다. 각 쿼리 Query[i]는 한 쌍의 값 (x, k)으로 구성되며 다음과 같은 역할을 수행합니다. x = 0 (갱신 쿼리): A[k]의 값을 반전합니다. 즉, 1이면 0으로, 0이면 1로 바꿉니다. x = 1 (조회 쿼리): 배열에서 k번째로 큰 원소를 출력합니다. 초기 상태에서 배열 A의 모든 원소는 0 또는 1입니다. 이러한 특성 덕분에 매번 배열을 정렬하거나 전체를 탐색할 필요 없이, 배열에 포함된 1의 개수만 추적하면 k번째로 큰 원소가 무

  15. C++로 숫자 문자열에서 유효한 전화번호 생성 가능 여부 확인하기

    n개의 숫자로 이루어진 문자열 S가 있다고 가정해 보겠습니다. 정확히 11자리인 숫자는 첫 자리가 8로 시작할 때 전화번호로 간주됩니다. 우리는 한 번의 연산을 통해 S에서 임의의 숫자 하나를 제거할 수 있으며, 이 문자열을 유효한 전화번호로 만들 수 있는지 판별해야 합니다. 예를 들어 입력이 S = "5818005553985"라면 결과는 True(1)입니다. 앞쪽의 불필요한 숫자들을 제거하면 첫 글자가 8인 11자리 문자열 "8005553985"를 만들 수 있기 때문입니다. 문제 해결 접근 방

  16. 숫자 c와 d를 만드는 최소 연산 횟수를 찾는 C++ 코드

    두 개의 숫자 c와 d가 주어져 있다고 가정해 보겠습니다. Amal은 처음에 두 변수 a와 b를 모두 0으로 초기화한 상태에서 시작합니다. Amal은 여러 번의 연산을 수행하여 a를 c로, b를 d로 만들고자 합니다. 각 연산을 수행하기 전에 먼저 양의 정수 k를 하나 선택해야 하며, 이 k를 이용해 다음 세 가지 연산 중 하나를 수행할 수 있습니다. a와 b 양쪽 모두에 k를 더한다 a에는 k를 더하고 b에서는 k를 뺀다 b에는 k를 더하고 a에서는 k를 뺀다 목표는 a와 b를 각각 c와 d와 일치시키는 데 필요한 최소 연산

  17. C++로 두 배열을 동일하게 만드는 연산 순서 구하는 방법

    길이가 n인 두 배열 A와 B가 있다고 가정해 보겠습니다. 사용할 수 있는 연산은 다음과 같습니다. 두 개의 인덱스 i와 j를 선택한 후, i번째 요소를 1만큼 감소시키고 j번째 요소를 1만큼 증가시킵니다. 단, 연산을 수행한 뒤에도 배열의 모든 요소는 음수가 아니어야 합니다. 목표는 이 연산을 반복하여 A와 B를 완전히 같게 만드는 것이며, 그때 필요한 연산 순서, 즉 인덱스 쌍의 목록을 찾아야 합니다. 두 배열을 같게 만드는 것이 불가능한 경우에는 -1을 반환합니다. 예를 들어 입력이 A = [1, 2, 3, 4], B = [

  18. C++로 각 플레이어의 카드 합계를 동일하게 만드는 분배 방법 구현하기

    문제 개요길이가 n인 배열 A가 있다고 가정해 보겠습니다. 이때 n은 짝수이며, A[i]는 i번째 카드에 적힌 숫자를 의미합니다. 게임에 참여할 플레이어는 총 n/2명이고, 게임 시작 시 각 플레이어는 두 장의 카드를 가져갑니다. 우리가 찾아야 하는 것은 모든 플레이어가 받은 두 카드에 적힌 숫자의 합이 서로 같아지도록 카드를 분배하는 방법입니다.예를 들어 입력이 A = [1, 5, 7, 4, 4, 3]이라면 출력은 [(0, 2), (5, 1), (3, 4)]가 됩니다. 그 이유는 A[0] + A[2] = 8, A[5] + A[1]

  19. 모든 접두사에서 'a'와 'b' 개수가 같도록 문자열을 수정하는 C++ 코드

    길이가 짝수 n인 문자열 S가 있다고 가정해 보겠습니다. S에는 a와 b 두 종류의 문자만 포함되어 있습니다. 우리는 이 문자열을 수정하여 모든 길이의 접두사마다 문자 a와 b의 개수가 서로 같아지도록 만들려고 합니다. 이를 위해서는 문자열에서 임의의 위치를 선택하고 해당 위치의 문자를 반대 문자로 바꾸는 연산을 원하는 만큼 수행할 수 있으며, 최종적으로 수정된 문자열을 반환하면 됩니다.예를 들어 입력이 S = aabbbb라면 출력은 baabab이 됩니다.문제 해결 접근 방법이 문제는 문자열을 두 글자씩 짝지어 확인하는 방식으로 간

  20. C++로 적을 처치하는 최소 무기 사용 횟수 찾기

    n개의 요소를 가진 배열 A와 하나의 숫자 H가 주어졌다고 가정해 봅시다. 여기서 H는 적의 체력(HP)입니다. 우리는 n개의 무기를 보유하고 있으며, i번째 무기의 공격력은 A[i]입니다. 서로 다른 무기를 조합하여 적을 처치할 수 있지만, 같은 무기를 연속으로 두 번 사용할 수 없다는 제약 조건이 있습니다. 목표는 적을 처치하기 위해 무기를 사용해야 하는 최소 사용 횟수를 구하는 것입니다. 예를 들어 입력이 A = [2, 1, 7], H = 11이라면 출력은 3이 됩니다. 공격력 7인 무기 → 공격력 2인 무기 → 다시 공격력

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