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

C++

  1. C++로 배열에서 가장 긴 산(Mountain) 부분 배열 찾기

    문제 정의정수 배열 A의 연속된 부분 배열 B가 다음 두 조건을 만족하면 이를 산(mountain)이라고 부릅니다.B의 크기는 3 이상이어야 합니다.0 < i < B.length - 1을 만족하는 인덱스 i가 존재하여, B[0] < B[1] < ... < B[i] > B[i+1] > ... > B[B.length - 1] 형태여야 합니다. 즉, 처음에는 값이 계속 증가하다가 꼭대기를 지난 후 계속 감소하는 모양이어야 합니다.정수 배열 A가 주어졌을 때, 가장 긴 산의 길이를 구하는 것이 목

  2. C++로 풀어보는 스트레이트 카드 손(Hand of Straights) 문제

    문제 개요리마(Rima)에게 정수 배열 형태로 주어진 카드 패가 있다고 가정해 봅시다. 그녀는 이 카드들을 크기가 정확히 W인 그룹들로 나누려고 하며, 각 그룹은 반드시 연속된 값의 카드 W장으로 구성되어야 합니다. 우리가 할 일은 이러한 그룹화가 가능한지 여부를 판단하는 것입니다.예를 들어 카드가 [1,2,3,6,2,3,4,7,8]이고 W = 3이라면, 카드를 [1,2,3], [2,3,4], [6,7,8]처럼 세 그룹으로 재배열할 수 있으므로 답은 true입니다.접근 방법이 문제는 맵(Map)과 그리디(Greedy) 기법을 활용하

  3. C++ 문자열 이동(Shifting Letters) 문제 풀이: 누적합으로 O(n)에 해결하기

    문제 개요소문자로만 구성된 문자열 S와 정수 배열 shifts가 주어진다고 가정해 봅시다. 여기서 문자를 한 번 이동(shift)한다는 것은 알파벳상에서 다음 글자로 바꾸는 것을 의미하며, 특별히 z를 이동시키면 a가 됩니다. 각 shifts[i] = x에 대해 문자열 S의 앞에서부터 i+1번째 문자까지를 각각 x번 이동시켜야 하며, 모든 이동 연산을 적용한 뒤의 최종 문자열을 구하는 것이 목표입니다.예를 들어 문자열이 abc이고 shifts = [3, 5, 9]라고 해보겠습니다.첫 번째 문자 1개(a)를 3번 이동 → dbc앞의

  4. C++로 풀어보는 자동차 함대(Car Fleet) 문제: 스택 활용 알고리즘

    문제 개요일차선 도로를 따라 같은 목적지를 향해 달리는 N대의 자동차가 있다고 가정해 보겠습니다. 목적지까지의 거리는 target마일이며, 각 자동차 i는 시간당 마일(mph) 단위의 일정한 속도 speed[i]와, 도로 위에서 목적지 방향으로의 초기 위치 position[i]를 가집니다.자동차는 앞차를 절대 추월할 수 없지만, 앞차를 따라잡아 같은 속도로 바짝 붙어 주행하는 것은 가능합니다. 이때 두 차량 사이의 거리는 무시되며, 동일한 위치에 있는 것으로 간주합니다. 자동차 함대(car fleet)란 같은 위치에서 같은 속도로

  5. C++ 스택으로 풀어보는 괄호 문자열 점수 계산 문제

    문제 개요균형 잡힌(balanced) 괄호 문자열 S가 주어졌을 때, 아래 규칙에 따라 해당 문자열의 점수를 계산하는 문제입니다.() 의 점수는 1입니다.AB 의 점수는 A + B 입니다. (A와 B는 각각 균형 잡힌 괄호 문자열)(A) 의 점수는 2 × A 입니다. (A는 균형 잡힌 괄호 문자열)예를 들어 입력 문자열이 (()(())) 라면, 내부 구조가 () 와 (()) 로 나뉘고 최종 점수는 6이 됩니다.접근 방법: 스택 활용이 문제는 스택(stack) 자료구조를 사용하면 깔끔하게 해결할 수 있습니다. 여는 괄호를 만나면 마커

  6. C++ 미러 리플렉션 문제 풀이: 거울방 레이저 경로의 비밀

    문제 개요네 면이 모두 거울로 덮여 있는 특별한 정사각형 방이 있다고 가정해 보겠습니다. 남서쪽 모서리를 제외한 나머지 세 개의 모서리에는 수광기(receptor)가 설치되어 있으며, 각각 0, 1, 2번으로 번호가 매겨져 있습니다. 방의 한 변의 길이는 p이고, 남서쪽 모서리에서 발사된 레이저 광선은 동쪽 벽에 처음 닿을 때 0번 수광기로부터 거리 q만큼 떨어진 지점을 맞힙니다. 우리가 구해야 할 것은 이 광선이 반사를 거듭한 끝에 최초로 도달하는 수광기의 번호입니다.예시로 이해하기p = 2, q = 1인 경우를 살펴보겠습니다.이

  7. C++에서 문자열의 대·소문자를 반대로 변환하는 방법

    임의의 길이를 가진 문자열이 주어졌을 때, 문자열에 포함된 대문자는 소문자로, 소문자는 대문자로 변환하는 것이 이번 글의 목표입니다. 예시 입력 − string str = Welcome To The Site! 출력 − wELCOME tO tHE sITE! 설명 − W, T, T, S는 소문자로 변환되고, e, l, c, o, m, e, o, i, t, e는 대문자로 변환됩니다. 특수 문자(!)에는 어떠한 연산도 수행되지 않습니다. 입력 − string str = HELLO 출력 &minus

  8. C++에서 두 문자열의 공통 문자 개수 계산하는 방법

    두 개의 문자열 str1과 str2가 주어졌을 때, 두 문자열에서 공통으로 등장하는 문자의 개수를 구하는 것이 목표입니다. 즉, str1[i]와 str2[j]가 서로 같으면 한 쌍(pair)으로 간주하여 카운트를 1 증가시키고, 서로 다르면 카운트를 증가시키지 않습니다.예시입력 − str1 = hello      str2 = heoo출력 − count is: 3설명 − str1[0] = str2[0] (h), str1[1] = str2[1] (e), str1[2] ≠ str2[2

  9. C++에서 정수의 짝수·홀수 자릿수 개수 세기

    문제 개요 하나의 정수가 주어졌을 때, 그 수를 이루는 각 자릿수 가운데 짝수와 홀수가 각각 몇 개인지 세는 것이 이번 문제의 목표입니다. 나아가 짝수 자릿수는 짝수 번, 홀수 자릿수는 홀수 번 나타나는지까지 함께 확인해야 합니다. 예시 입력 − digit = 12345 출력 − 짝수 자릿수 개수 = 2       홀수 자릿수 개수 = 3 설명 − 짝수 자릿수(2, 4)가 총 2번, 즉 짝수 번 나타나고 홀수 자릿수(1, 3, 5)가 총 3번, 즉 홀수 번 나타나므로 조건을 만족

  10. C++로 주어진 범위 내 팩토리얼 수의 개수 구하기

    정수 값이 담긴 변수 start부터 변수 end까지의 범위가 주어졌을 때, 그 범위 안에 존재하는 팩토리얼 수(factorial number)의 총 개수를 구하는 것이 목표입니다.팩토리얼 수란?팩토리얼은 어떤 수부터 1까지의 모든 양의 정수를 차례로 곱한 값이며, 기호 !(느낌표)로 나타냅니다. 즉 0!, 1!, 2!, 3!, 4!, ... 형태로 표현하고, 0!과 1!은 항상 1이라는 규칙을 가집니다.2! = 2 × (2−1) = 2 × 1 = 23! = 3 × (3−1) × (2−1) = 3 × 2 × 1 = 6팩토리얼은 숫자가

  11. C++로 팩토리얼(계승) 결과의 자릿수 구하기

    정수 하나가 주어졌을 때, 먼저 그 수의 팩토리얼(계승)을 계산한 다음, 결과값이 몇 자리 숫자로 이루어져 있는지 구하는 것이 이 글의 목표입니다.팩토리얼(계승)이란?팩토리얼은 어떤 수부터 시작해서 1씩 감소시키면서 1이 될 때까지 모든 수를 곱한 값입니다. 기호는 !(느낌표)로 표기하며, 0!, 1!, 2!, 3!, 5! 등으로 나타냅니다. 특히 0!과 1!은 항상 1이라는 규칙이 있습니다.2의 팩토리얼 = 2 × (2-1) = 2 × 1 = 23의 팩토리얼 = 3 × (3-1) × (2-1) = 3 × 2 × 1 = 6예시입력

  12. C++에서 O(log n) 시간과 O(1) 공간으로 주어진 범위 내 피보나치 수 개수 구하기

    시작 값과 끝 값으로 구성된 범위가 주어졌을 때, 그 범위 사이에 존재하는 피보나치 수의 총 개수를 O(log n) 시간 복잡도와 O(1) 공간 복잡도로 계산하는 방법을 알아봅니다. 피보나치 수란 무엇인가? 피보나치 수는 피보나치 수열로 알려진 숫자들의 나열로, 수열의 모든 새로운 숫자는 바로 앞에 있는 두 숫자의 합으로 정의됩니다. 이때 f(0) = 0, f(1) = 1은 고정된 값이며, 실제 계산은 세 번째 숫자부터 시작됩니다. 수열을 계산하는 데 사용되는 공식은 다음과 같습니다 − Fn = Fn-1 + Fn-2 여기서, F0

  13. C++로 두 수의 공통 소인수 구하기: 에라토스테네스의 체와 GCD 활용법

    두 개의 숫자 x와 y가 주어졌을 때, 두 수 사이의 공통 소인수를 찾아야 하는 문제입니다. 공통 소인수는 먼저 두 수의 공약수를 구한 뒤, 그중에서 소수에 해당하는 값만 골라내면 쉽게 찾을 수 있습니다.여기서 핵심 아이디어는 두 수의 공통 소인수는 결국 두 수의 최대공약수(GCD)의 소인수와 같다는 점입니다. 따라서 GCD만 구하면 별도의 비교 과정 없이 효율적으로 답을 얻을 수 있습니다.예제입력 − x = 10, y = 20출력 − 두 수의 공통 소인수: 2 5설명 − 10과 20의 공통 소인수는 2와 5뿐입니다.입력 − x =

  14. C++로 10⁶ 미만의 숫자 중 최소 소인수가 N인 수의 개수 구하기

    소수 하나(예: num)가 주어졌을 때, 10⁶(1,000,000)보다 작은 수 가운데 최소 소인수가 num과 같은 숫자가 총 몇 개인지 구하는 것이 이 글의 목표입니다. 예시 입력 − num = 7 출력 − 개수 = 38095 입력 − num = 3 출력 − 개수 = 166667 예를 들어 최소 소인수가 3인 수는 3, 9, 15, 21처럼 3의 배수이면서 더 작은 소수인 2로는 나누어지지 않는 수들이며, 3 자신도 포함됩니다. 해결 접근 방식 이 문제는 에라토스테네스의 체(Sieve of Eratosthenes)를 변형한 방

  15. C++ 배열에서 합성수의 개수와 합계 구하기

    양의 정수로 이루어진 배열이 주어졌을 때, 배열에 포함된 합성수(composite number)의 개수와 합계를 계산하는 방법을 알아보겠습니다. 합성수란 무엇인가? 주어진 정수 집합에서 소수(prime number)가 아닌 수를 합성수라고 합니다. 단, 1은 합성수도 소수도 아니며 단위수(unit)로 분류됩니다. 즉, 1을 제외한 모든 자연수는 소수 또는 합성수 중 하나에 반드시 해당합니다. 참고로 100까지의 합성수는 다음과 같습니다. 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 2

  16. C++에서 영어 알파벳과 같은 위치의 문자 개수 계산하기

    개요 대문자와 소문자를 모두 포함하는 임의의 길이의 문자열이 주어졌을 때, 그중 영어 알파벳과 같은 위치에 있는 문자의 개수를 계산하는 것이 이번 문제의 목표입니다. 예시 입력 − String str = eBGD 출력 − Count is: 2 설명 − B는 알파벳에서 두 번째, D는 네 번째 위치에 오는 문자이므로 B와 D가 원래 알파벳과 같은 순서로 배치되어 있습니다. 입력 − String str = Abcdeizxy 출력 − Count is: 5 설명 − A가 첫

  17. C++에서 문자열 내 ASCII 값이 소수인 문자 개수 구하기

    문제 개요대문자와 소문자가 혼합된 임의의 길이를 가진 문자열이 주어졌을 때, 그중 ASCII 값이 소수(prime)인 문자의 개수를 계산하는 것이 이번 문제의 목표입니다.알파벳의 ASCII 코드 값은 다음과 같은 범위를 가집니다.대문자 [A-Z]: 65 ~ 90소문자 [a-z]: 97 ~ 122예시입력 string str = Aebg출력 개수는 2설명 — A의 ASCII 값은 65로 소수가 아니므로 제외되고, e는 101로 소수이므로 포함됩니다. b는 66으로 소수가 아니며, g는 103으로 소수이므로 포함됩니다. 따라서 ASCII

  18. C++로 주어진 범위 안의 16진수 알파벳 개수 계산하기

    시작 값과 끝 값으로 이루어진 범위가 주어졌을 때, 해당 범위 안에 포함된 16진수 알파벳의 개수를 계산하는 것이 이 글의 목표입니다.16진수 알파벳이란?컴퓨터 분야에서 16진수(hexadecimal)는 밑(base)이 16인 수 체계를 의미합니다. 하나의 자릿수를 16개의 기호로 표현할 수 있으며, 0부터 15까지의 정수 값으로 구성됩니다. 이때 10부터 15까지는 각각 알파벳으로 대체되어 표현되는데, 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F에 해당합니다.따라서 아래 프로그램의 핵심 과제는 주어진

  19. C++로 좌우 이웃 문자가 같은 문자 개수 세기

    하나의 문자열(예: str)이 주어졌을 때, 각 문자의 왼쪽과 오른쪽 이웃 문자가 서로 동일한 경우를 찾아 그 개수를 계산하는 것이 목표입니다. 이 문제에서는 문자열의 첫 번째 문자와 마지막 문자는 인접한 문자가 하나뿐이므로 항상 개수에 포함된다는 규칙이 적용됩니다.예시입력 − string str = "poiot"출력 − count is 3설명 − 주어진 문자열에서 문자 p, t, i가 조건을 만족하므로 개수는 3이 됩니다.입력 − string str = "nit

  20. C++로 합이 완전세제곱수가 되는 모든 삼중항 개수 구하기

    정수 n개로 이루어진 배열이 주어졌을 때, 세 원소의 합이 완전세제곱수(perfect cube)가 되는 모든 삼중항(triplet)의 개수를 계산하는 것이 이 글의 목표입니다.완전세제곱수란?완전세제곱수는 어떤 수를 세 번 곱했을 때 얻어지는 수를 의미합니다. 예를 들어 125는 5의 세제곱이므로 완전세제곱수라고 할 수 있습니다. 대표적인 완전세제곱수로는 1, 8, 27, 64, 125 등이 있습니다.따라서 이 문제에서는 배열 안에서 그 합이 완전세제곱수가 되는 삼중항(3개 값의 조합)을 찾아 개수를 세어야 합니다. 여기서 삼중항의

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:172/300  20-컴퓨터/Page Goto:1 166 167 168 169 170 171 172 173 174 175 176 177 178