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

C++

  1. 파이썬 Tkinter destroy() 메서드 완벽 가이드 - 위젯 제거와 메모리 관리

    Tkinter의 destroy() 메서드는 위젯을 화면에서 제거하는 역할을 합니다. 이 메서드는 서로 의존 관계에 있는 다양한 위젯들의 동작을 제어할 때 매우 유용합니다. 또한 사용자의 특정 동작으로 어떤 프로세스가 완료되었을 때, GUI 구성 요소를 제거하여 메모리를 확보하고 화면을 정리해야 하는 경우에도 활용됩니다. 즉, destroy() 메서드 하나로 이러한 모든 작업을 처리할 수 있습니다.destroy() 메서드의 주요 용도특정 조건이 충족되었을 때 개별 위젯 제거창(윈도우) 전체를 닫고 프로그램 종료사용자 동작 완료 후 불

  2. C++에서 ax − by = 0을 만족하는 x와 y의 최솟값 찾기

    두 개의 값 a와 b가 주어졌을 때, ax − by = 0을 만족하는 x와 y를 찾는 것이 목표입니다. 예를 들어 a = 25이고 b = 35라면, x = 7, y = 5가 정답이 됩니다. 접근 방법 ax − by = 0이라는 것은 곧 ax = by, 즉 양변의 값이 같다는 의미입니다. 따라서 x와 y의 최솟값을 구하려면 a와 b의 최소공배수(LCM)를 계산하면 됩니다. 최소공배수는 a의 배수이면서 동시에 b의 배수가 되는 가장 작은 수이므로, 양변을 같게 만들 수 있는 가장 작은 값입니다. 최소공배수를 구했다면 x = LCM ÷

  3. C++ 이진 탐색으로 주어진 정밀도까지 숫자의 제곱근 구하기

    양수 n과 정밀도 p가 주어졌다고 가정해 보겠습니다. 이진 탐색(binary search) 기법을 활용하면 숫자 n의 제곱근을 소수점 p자리까지 구할 수 있습니다. 예를 들어 n = 50, p = 3이라면 결과는 7.071이 됩니다.문제 해결 접근 방식이 문제는 다음 단계를 따라 해결할 수 있습니다.범위 초기화: 시작값(start)은 0으로, 끝값(end)은 n으로 설정합니다.정수 부분 탐색: 중간값(mid)의 제곱과 목표 숫자를 비교합니다. 두 값이 일치하면 정수 부분을 찾은 것이고, 일치하지 않으면 조건에 따라 왼쪽 또는 오른쪽

  4. C++로 숫자와 그 최대 소인수의 합 구하기

    문제 개요양수 n이 주어졌을 때, n 자신과 n의 최대 소인수(最大 素因數)를 더한 값을 구하는 문제입니다. 예를 들어 숫자가 26이라면, 26의 소인수는 2와 13이므로 최대 소인수는 13입니다. 따라서 답은 26 + 13 = 39가 됩니다.접근 방법풀이 방법은 매우 직관적입니다.1. 주어진 수를 소인수분해하여 가장 큰 소인수를 찾습니다.2. 찾은 최대 소인수에 원래 수 n을 더한 값을 반환합니다.소인수분해는 다음 단계로 진행됩니다.- 먼저 2로 나누어 떨어지는 동안 계속 2로 나누며 최대 소인수를 2로 갱신합니다.- 이후 3부터

  5. C++로 지름의 양 끝점에서 원의 중심 구하기

    원의 지름에 대한 두 끝점이 주어졌을 때, 그 원의 중심 좌표를 구하는 방법을 알아보겠습니다. 예를 들어 지름의 끝점이 (-9, 3)과 (5, -7)이라면, 원의 중심은 (-2, -2)가 됩니다.원리: 중점 공식지름의 양 끝점은 원의 중심을 기준으로 정확히 대칭입니다. 따라서 두 끝점의 중점(middle point)이 곧 원의 중심이 됩니다. 두 점 (x1, y1)과 (x2, y2)의 중점은 다음 공식으로 계산할 수 있습니다.$$(x_{m},y_{m})=\left(\frac{(x_{1}+x_{2})}{2},\frac{(y_{1}+y

  6. C++로 n 이하에서 가장 가까운 정돈된 수(Tidy Number) 찾는 방법

    어떤 수 n이 주어졌을 때, n보다 작거나 같은 수 중에서 가장 가까운 정돈된 수(Tidy Number)를 찾아야 합니다. 여기서 정돈된 수란 모든 자릿수가 내림차순이 아닌 오름차순(비감소 순서)으로 정렬되어 있는 수를 의미합니다.예를 들어 입력값이 45000이라면, 각 자릿수가 4 → 5 → 0 → 0 → 0 순서이므로 5 뒤에 0이 오면서 조건을 위반합니다. 따라서 45000보다 작거나 같으면서 가장 가까운 정돈된 수는 44999(4 → 4 → 9 → 9 → 9)가 됩니다.해결 접근 방식이 문제는 숫자를 뒤에서부터(오른쪽에서 왼

  7. C++로 풀어보기: 숫자 3과 4만 사용해 만들 수 있는 길이 N 이하의 숫자 개수 구하기

    숫자 N이 주어졌을 때, 오직 숫자 3과 4만 사용하여 만들 수 있는 모든 숫자의 개수를 구하는 문제입니다. 예를 들어 N = 2라면 만들 수 있는 숫자는 3, 4, 33, 34, 43, 44로 총 6개입니다.접근 방법규칙을 자세히 살펴보면 간단한 패턴을 발견할 수 있습니다.한 자리 숫자(길이 1): 3, 4 → 총 2개 (2¹)두 자리 숫자(길이 2): 33, 34, 43, 44 → 총 4개 (2²)세 자리 숫자(길이 3): 333, 334, 343, 344, 433, 434, 443, 444 → 총 8개 (2³)즉, 길이가 m인

  8. C++에서 엄격하게 감소하는 하위 배열의 개수 찾기

    문제 개요배열 A가 주어졌을 때, 길이가 1보다 큰 엄격하게 감소하는(strictly decreasing) 연속 부분 배열(subarray)의 총 개수를 구하는 문제입니다. 여기서 엄격하게 감소한다는 것은 배열 내 모든 인접한 원소가 이전 원소보다 반드시 작아야 한다는 의미입니다.예를 들어 A = [100, 3, 1, 15]라고 가정해 보겠습니다. 이때 만들어지는 감소 부분 배열은 다음과 같습니다.[100, 3][100, 3, 1][3, 1]따라서 정답은 3이 됩니다.핵심 아이디어배열 전체를 일일이 검사하는 대신, 최대로 연속해서

  9. C++로 알파벳 순서를 이루는 부분 문자열 개수 구하기

    길이가 n인 문자열이 주어졌다고 가정해 보겠습니다. 이 문자열에는 대문자만 포함되어 있습니다. 우리가 구해야 할 것은 각 문자가 알파벳 순서대로 연속해서 등장하는 부분 문자열의 개수이며, 부분 문자열의 최소 길이는 2여야 합니다.예를 들어 문자열이 REFJHLMNBV라고 한다면, 조건을 만족하는 부분 문자열은 EF와 MN, 총 2개입니다.접근 방법이 문제는 다음 단계를 따라 효율적으로 해결할 수 있습니다.현재 위치 i에서 str[i] + 1(현재 문자의 바로 다음 알파벳)이 str[i+1]과 같은지 확인합니다.같다면 결과값을 1 증

  10. C++ 프로그래밍 – 주어진 조건에 따라 값이 반복적으로 변경될 때 최종 X와 Y 구하기

    두 양의 정수 X와 Y의 초기값이 주어져 있다고 가정해 보겠습니다. 이때 아래 규칙에 따라 값이 반복적으로 변경된 이후의 최종 X와 Y 값을 구하는 것이 이 글의 목표입니다.문제의 규칙1단계 – X = 0 또는 Y = 0이면 프로세스를 즉시 종료하고, 그렇지 않으면 2단계로 이동합니다.2단계 – X ≥ 2Y이면 X = X − 2Y로 갱신한 뒤 1단계로 돌아가고, 그렇지 않으면 3단계로 이동합니다.3단계 – Y ≥ 2X이면 Y = Y − 2X로 갱신한 뒤 1단계로 돌아가고, 그렇지 않으면 프로세스를 종료합니다.X와 Y는 최대 1018

  11. C++ 연결 리스트에서 분수(n/k번째) 노드 찾기 방법

    단일 연결 리스트(singly linked list)와 정수 k가 주어졌을 때, (n/k)번째 요소를 찾는 함수를 작성해야 합니다. 여기서 n은 리스트에 포함된 전체 노드의 개수입니다. 계산 결과가 소수로 나올 경우에는 올림(ceil) 값을 사용합니다.예를 들어 리스트가 1 → 2 → 3 → 4 → 5 → 6이고 k = 2라고 가정해 보겠습니다. 이때 n = 6, k = 2이므로 n/k = 6/2 = 3, 즉 세 번째 노드의 값인 3이 출력됩니다.해결 접근 방법이 문제는 두 개의 포인터를 활용한 간단한 순회 기법으로 해결할 수 있습

  12. C++에서 동일한 달력을 가지는 다음 연도 찾기

    문제 개요 임의의 연도 Y가 주어졌을 때, Y와 완전히 똑같은 달력을 가지는 다음 연도를 찾는 것이 이 글의 목표입니다. 실제로 2017년의 달력은 2023년의 달력과 동일합니다. 동일한 달력 연도의 조건 어떤 연도 X가 이전 연도 Y와 동일한 달력을 가지려면 다음 두 가지 조건을 모두 만족해야 합니다. 연도 X가 Y와 같은 요일로 시작해야 합니다. Y가 윤년이면 X도 윤년이어야 하고, Y가 평년이면 X도 평년이어야 합니다. 알고리즘 아이디어 접근 방법은 단순합니다. 기준 연도의 바로 다음 해부터 연도를 하나씩 순서대로 검사하면

  13. C++ 연결 리스트에서 두 번째로 큰 요소 찾는 방법

    개요이번 글에서는 연결 리스트(Linked List)에서 두 번째로 큰 요소를 찾는 방법을 살펴보겠습니다. 서로 다른 숫자 값을 가진 n개의 노드가 있다고 가정해 봅시다. 예를 들어 리스트가 [12, 35, 1, 10, 34, 1]과 같다면, 두 번째로 큰 요소는 34입니다.이 과정은 배열에서 두 번째로 큰 요소를 찾는 방식과 매우 유사합니다. 리스트를 한 번 순회하면서 값을 비교하여 최댓값(first_max)과 두 번째 최댓값(second_max)을 동시에 추적하면 효율적으로 해결할 수 있습니다.알고리즘 동작 원리두 개의 변수 f

  14. C++ 한 번의 순회로 연결 리스트의 뒤에서 두 번째 노드 찾기

    이번 글에서는 연결 리스트(Linked List)에서 뒤에서 두 번째 요소를 구하는 방법을 알아보겠습니다. 예를 들어 리스트가 [10, 52, 41, 32, 69, 58, 41]과 같이 구성되어 있다면, 뒤에서 두 번째 요소는 58입니다.접근 방법: 두 개의 포인터 활용이 문제는 두 개의 포인터를 사용하면 리스트를 딱 한 번만 순회하면서 해결할 수 있습니다.첫 번째 포인터(curr)는 현재 노드를 가리키고, 두 번째 포인터(prev)는 현재 노드의 이전 노드를 가리킵니다. 그런 다음 현재 노드의 다음 노드가 NULL이 될 때까지 두

  15. C++로 배열의 숫자를 조합해 만들 수 있는 두 수의 최소 합 구하기

    문제 설명0부터 9 사이의 숫자로만 구성된 배열이 주어집니다. 이때 배열의 숫자들을 활용하여 만들 수 있는 두 수의 합 중에서 가장 작은 값을 찾는 것이 목표입니다. 단, 배열에 포함된 모든 숫자를 반드시 한 번씩 사용해야 한다는 점에 유의해야 합니다.예시입력 배열이 {7, 5, 1, 3, 2, 4}라고 가정해 보겠습니다. 이 경우 숫자들을 조합하여 135와 247이라는 두 수를 만들 수 있으며, 두 수의 합은 382입니다. 어떻게 조합하더라도 이보다 작은 합을 만들 수 없으므로, 최소 합은 382가 됩니다.알고리즘최소 합을 얻기

  16. C++로 구현하는 이진 트리 두 잎 노드 사이의 최소 합 경로 알고리즘

    문제 정의각 노드가 하나의 숫자 값을 가지는 이진 트리가 주어졌을 때, 한 잎(leaf) 노드에서 다른 잎 노드까지 이동할 수 있는 경로 중 합이 가장 작은 경로를 찾는 것이 과제입니다.예시위 트리에서 최소 합을 가지는 부분 경로는 다음과 같이 계산되는 -6입니다.(-4) + 3 + 2 + (-8) + 1알고리즘 접근 방식핵심 아이디어는 재귀 호출 과정에서 두 가지 값을 함께 관리하는 것입니다.현재 노드를 루트로 하는 서브트리에서의 최소 루트-잎 경로 합지금까지 발견된 잎 노드 사이의 최소 경로 합방문하는 모든 노드 X에 대해 왼쪽

  17. C++로 풀어보는 삼각형 최소 합 경로 문제

    문제 정의숫자로 이루어진 삼각형 구조가 주어졌을 때, 꼭대기에서 바닥까지 내려가는 경로 중 합이 가장 작은 경로의 값을 구하는 것이 목표입니다. 이동할 때에는 반드시 아래 행에 있는 인접한 숫자로만 움직일 수 있습니다.예제입력이 다음과 같다고 가정해 보겠습니다.   5  7 3 8 1 29 6 4 5이 경우 최소 합은 13이며, 해당 경로는 다음과 같습니다.5 + 3 + 1 + 4 = 13알고리즘 접근 방식동적 계획법(Dynamic Programming)의 메모이제이션 기법을 활용합니다.메모이제이

  18. C++로 k 이하의 모든 요소를 한데 모으는 데 필요한 최소 스왑 횟수 구하기

    문제 정의 양의 정수 n개로 이루어진 배열과 하나의 숫자 k가 주어집니다. 이때, k보다 작거나 같은 모든 숫자들을 서로 인접한 위치에 모으기 위해 필요한 최소 스왑(교환) 횟수를 구하는 것이 목표입니다. 예시 입력 배열이 {1, 5, 4, 7, 2, 10}이고 k = 6이라고 가정해 봅시다. 이 경우 7과 2를 한 번 교환하면 되므로, 필요한 최소 스왑 횟수는 1회입니다. 알고리즘 접근 방식 이 문제는 슬라이딩 윈도우(Sliding Window) 기법을 활용하면 효율적으로 해결할 수 있습니다. 단계별 과정은 다음과 같습니다.

  19. C++에서 모든 1을 하나로 그룹화하기 위한 최소 스왑 횟수 구하기

    문제 정의0과 1로만 구성된 배열이 주어졌을 때, 배열에 있는 모든 1을 서로 인접한 하나의 그룹으로 모으기 위해 필요한 최소 스왑(교환) 횟수를 구하는 것이 이번 문제의 목표입니다.예시입력 배열이 {1, 0, 1, 1, 0, 1}이라면 필요한 스왑 횟수는 1회입니다. 첫 번째 0과 마지막 1의 위치를 서로 교환하면 모든 1이 연속된 형태로 배치됩니다.알고리즘배열에 포함된 1의 총 개수를 셉니다.1의 개수를 x라고 할 때, 길이가 x인 부분 배열 중에서 1이 가장 많이 포함된 구간을 찾습니다.필요한 최소 스왑 횟수는 해당 구간(1이

  20. C++로 이진 문자열을 교대 패턴으로 만드는 최소 스왑 횟수 구하기

    문제 개요길이가 짝수이고 0과 1의 개수가 같은 이진 문자열이 주어졌을 때, 이 문자열을 교대(alternating) 형태로 만들기 위해 필요한 최소 스왑 횟수를 구하는 것이 이번 문제의 목표입니다. 여기서 교대 문자열이란 0101... 또는 1010...처럼 인접한 두 문자가 서로 같지 않은 문자열을 의미합니다.예시예를 들어 입력 문자열이 11110000라면, 앞쪽의 1들과 뒤쪽의 0들을 적절히 맞바꿔 10101010 또는 01010101 형태로 만들어야 하며, 이때 필요한 스왑 횟수는 2회입니다.알고리즘 접근 방법이 문제의 핵심

Total 5981 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:107/300  20-컴퓨터/Page Goto:1 101 102 103 104 105 106 107 108 109 110 111 112 113