Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python

  1. Python으로 바이너리 행렬 정렬에 필요한 최소 스왑 횟수 구하기

    n × n 크기의 이진 행렬(binary matrix)이 있다고 가정해 보겠습니다. 이 행렬에는 한 가지 연산만 허용되는데, 바로 인접한 두 행을 선택해 서로 맞바꾸는(스왑) 것입니다. 우리가 구해야 할 값은 주 대각선(major diagonal) 위쪽 영역의 모든 원소가 0이 되도록 만들 때 필요한 최소 스왑 횟수입니다. 만약 어떻게 행을 배치하더라도 조건을 만족할 수 없다면 -1을 반환해야 합니다.문제 예시예를 들어 입력이 다음과 같다고 해봅시다.010011100이 경우 출력은 2입니다. 두 번의 인접 행 스왑만으로 주 대각선

  2. 파이썬으로 K번 이동 안에 문자열 변환 가능 여부 확인하는 프로그램

    두 문자열 s와 t가 주어졌을 때, k번 이하의 이동으로 s를 t로 변환할 수 있는지 확인하는 프로그램을 만들어 보겠습니다. i번째 이동에서는 아래 두 가지 작업 중 하나를 수행할 수 있습니다.s에서 아직 이전 이동에서 선택되지 않은 인덱스 j(1부터 시작하며 1 ≤ j ≤ s의 길이)를 하나 골라, 해당 위치의 문자를 정확히 i번 시프트합니다.아무 작업도 수행하지 않고 그대로 둡니다.여기서 시프트란 문자를 알파벳 순서상 다음 문자로 바꾸는 것을 의미합니다. 예를 들어 a는 b가 되고, z는 다시 a로 순환합니다. 따라서 문자를 i

  3. Python으로 괄호 문자열 균형을 맞추는 최소 삽입 횟수 구하기

    여는 괄호 (와 닫는 괄호 )로만 이루어진 문자열 s가 주어졌을 때, 이 문자열이 균형 잡힌(balanced) 상태라고 할 수 있는 조건은 다음과 같습니다. 모든 여는 괄호 (에는 반드시 연속된 두 개의 닫는 괄호 ))가 대응되어야 합니다. 여는 괄호 (는 반드시 자신과 대응하는 ))보다 먼저 나와야 합니다. 예를 들어 ())나 ())(())))은 균형이 잡힌 문자열이지만, )()나 ()))은 균형이 맞지 않습니다. 이처럼 균형이 깨진 문자열이 주어질 때, 균형을 맞추기 위해 삽입해야 하는 괄호(여는 괄호 또는 닫는 괄호)의 최

  4. 파이썬으로 n번째 이진 문자열에서 k번째 비트 찾기

    문제 소개 두 개의 양수 n과 k가 주어졌을 때, 다음 규칙에 따라 이진 문자열 Sn을 만들 수 있다고 가정해 보겠습니다. S1 = 0 i > 1인 경우, Si = Si-1 + 1 + reverse(invert(Si-1)) 여기서 reverse(x)는 문자열 x를 거꾸로 뒤집은 결과를 반환하고, invert(x)는 x의 모든 비트를 반전합니다(0은 1로, 1은 0으로). 이 규칙으로 만들어진 처음 네 개의 문자열은 다음과 같습니다. S1 = 0 S2 = 011 S3 = 0111001 S4 = 011100110110001

  5. 파이썬으로 합이 목표값과 같은 비중첩 부분 배열의 최대 개수 찾기

    문제 설명배열 nums와 목표값 target이 주어졌다고 가정해 보겠습니다. 이때 각 부분 배열의 원소 합이 정확히 target과 같으면서, 서로 겹치지 않고 비어 있지 않은 부분 배열의 최대 개수를 구하는 것이 과제입니다.예를 들어 입력이 nums = [3,2,4,5,2,1,5], target = 6이라면 출력은 2가 됩니다. 합이 6인 부분 배열 [2,4]와 [1,5], 이렇게 두 개를 찾을 수 있기 때문입니다.접근 방법: 누적합(Prefix Sum) 활용이 문제는 누적합(prefix sum)과 집합(set)을 이용하면 선형 시

  6. 파이썬으로 배열의 모든 원소를 동일하게 만드는 최소 연산 횟수 구하기

    문제 설명 값 n이 주어지고, 길이가 n인 배열 nums가 있다고 가정해 보겠습니다. 이 배열은 모든 인덱스 i에 대해 arr[i] = (2 * i) + 1로 정의되므로, [1, 3, 5, 7, ...]처럼 홀수로 채워진 형태입니다. 한 번의 연산에서는 0 <= x, y < n을 만족하는 두 인덱스 x와 y를 선택하여 nums[x]에서 1을 빼고 nums[y]에 1을 더할 수 있습니다. 목표는 이러한 연산을 반복해 배열의 모든 원소를 같은 값으로 만드는 것이며, 이때 필요한 최소 연산 횟수를 구해야 합니다. 예시 입력이

  7. Python으로 그래프의 모든 노드에 도달하기 위한 최소 정점 집합 찾기

    문제 이해하기정점이 n개인 방향 비순환 그래프(Directed Acyclic Graph, DAG)가 주어졌다고 가정해 봅시다. 정점은 0부터 n-1까지 번호가 매겨져 있으며, 그래프는 간선 리스트 형태로 표현됩니다. 여기서 edges[i] = (u, v)는 노드 u에서 노드 v로 향하는 방향 간선을 의미합니다.우리가 구해야 하는 것은 그래프의 모든 노드에 도달할 수 있는 가장 작은 정점 집합입니다. 결과는 어떤 순서로 반환해도 무방합니다.예를 들어 입력이 다음과 같다면,출력은 [0, 2, 3]이 됩니다. 이 세 정점은 다른 어떤 정

  8. Python으로 목표 배열을 만들기 위한 최소 함수 호출 횟수 찾기

    문제 소개다음과 같은 함수 정의가 있다고 가정해 보겠습니다.def modify(arr, op, index): if op == 0: arr[index] += 1 if op == 1: for i in range(len(arr)): arr[i] *= 2이 함수는 두 가지 연산을 제공합니다. op가 0이면 지정된 인덱스의 요소를 1만큼 증가시키고, op가 1이면 배열의 모든 요소를 한꺼번에 두 배로 만듭니다.우리가 해결해야 할 문제는 다음과 같습니다. 모든 요소가 0으로 초기

  9. Python으로 동전 더미 게임에서 얻을 수 있는 최대 동전 개수 구하기

    문제 개요크기가 서로 다른 동전 더미가 총 3*n개 있다고 가정해 보겠습니다. 이 상태에서 세 명의 플레이어가 다음과 같은 규칙으로 게임을 진행합니다.각 단계마다 플레이어1이 임의의 동전 더미 3개를 선택합니다.플레이어2는 선택된 더미 중 동전이 가장 많은 것을 가져갑니다.플레이어1은 그다음으로 많은 동전이 담긴 더미를 가져갑니다.플레이어3은 마지막으로 남은 더미를 가져갑니다.동전 더미가 모두 없어질 때까지 위 과정을 반복합니다.정수 배열 piles가 주어지며, piles[i]는 i번째 더미에 들어 있는 동전의 개수를 의미합니다.

  10. Python으로 길이가 정확히 M인 1 그룹이 존재하는 마지막 단계 찾기

    문제 소개 1부터 n까지의 숫자로 이루어진 순열 배열 arr와 크기 n의 이진 문자열이 주어집니다. 이진 문자열의 모든 비트는 처음에 0으로 설정되어 있습니다. 각 단계 i(1부터 n까지, 인덱스는 1부터 시작)마다 arr[i] 위치의 비트를 1로 설정합니다. 여기에 값 m이 추가로 주어지며, 우리가 찾아야 하는 것은 길이가 정확히 m인 1 그룹이 존재하는 가장 늦은 단계입니다. 여기서 1 그룹이란 양쪽 어느 방향으로도 더 확장할 수 없는, 연속된 1로 이루어진 부분 문자열을 의미합니다. 만약 조건을 만족하는 그룹을 찾을 수 없다면

  11. Python으로 이진 트리에서 특정 노드의 오른쪽 노드 찾는 방법

    이진 트리(binary tree)가 하나 주어지고, 특정 노드를 가리키는 포인터 u도 함께 제공된다고 가정해 봅시다. 우리가 해야 할 일은 이 노드 바로 오른쪽에 있는 노드를 찾는 것입니다.여기서 중요한 조건은 다음과 같습니다.오른쪽에 있는 노드는 반드시 같은 레벨(level), 즉 같은 깊이에 위치해야 합니다.주어진 노드 u는 리프 노드일 수도 있고 내부 노드일 수도 있습니다.문제 예시예를 들어 다음과 같은 트리가 있다고 가정합니다.root = make_tree([5, 3, 7, 2, 4, 6, 8])이때 u = 6이라면 출력 결

  12. Python을 활용해 두 개의 표현식 트리가 같은 값을 갖는지 확인하는 프로그램

    문제 개요두 개의 표현식 트리(expression tree)가 주어졌을 때, 이 두 트리가 서로 같은 결과값을 만들어 내는지 판별하는 프로그램을 작성해야 합니다. 두 표현식 트리는 중위 순회(in-order) 형태로 제공되며, 값이 일치하면 True, 그렇지 않으면 False를 반환하면 됩니다.예를 들어 입력이 아래와 같다면,출력은 True입니다. 두 표현식 트리가 동일한 값으로 평가되기 때문입니다.해결 접근 방법이 문제는 깊이 우선 탐색(DFS)을 활용해 해결할 수 있습니다. 핵심 아이디어는 각 트리에서 피연산자 역할을 하는 리프

  13. Python으로 표현식 트리 빌드하고 평가하기 — 후위 순회 기반 구현 가이드

    문제 소개 표현식 트리(expression tree)의 후위 순회(postorder traversal) 결과가 주어졌을 때, 이를 바탕으로 트리를 다시 구축한 뒤 수식의 값을 계산하는 프로그램을 만들어 보겠습니다. 최종적으로는 표현식 트리의 루트 노드와 함께 계산된 값을 반환하면 됩니다. 예를 들어 입력이 다음과 같다고 가정해 보겠습니다. [1, 2, -, 3, 4, +, *] 위 후위 표기법(postfix) 수식을 일반적인 중위 표기로 바꾸면 (1 − 2) × (3 + 4)이며, 계산 결과는 -7입니다. 이 입력으로 만들어지는 표

  14. Python 연결 리스트로 두 다항식의 합 구하기: 단계별 구현 가이드

    문제 소개 두 개의 다항식이 주어졌을 때, 이 둘의 합을 구해야 한다고 가정해 보겠습니다. 다항식은 연결 리스트(Linked List) 형태로 표현하며, 다항식의 각 항은 하나의 노드로 나타냅니다. 각 노드는 다음 세 가지 정보를 포함합니다. 계수(coefficient): 항의 계수 값 차수(power): 변수 x의 지수 포인터(next): 다음 노드를 가리키는 참조 즉, 최종적으로 반환해야 할 것은 두 다항식의 합을 담고 있는 세 번째 연결 리스트입니다. 예를 들어 입력이 다음과 같다고 해보겠습니다. 1x^1 + 1x^2 =

  15. 파이썬으로 이진 트리의 최소 공통 조상(LCA) 찾기: DFS 재귀 탐색 구현

    이진 트리와 두 개의 특정 노드 x, y가 주어졌다고 가정해 봅시다. 우리가 찾아야 하는 것은 이진 트리 안에서 이 두 노드의 최소 공통 조상(Lowest Common Ancestor, LCA)입니다.이진 트리에서 최소 공통 조상이란, 노드 x와 y가 모두 그 노드의 자손(descendant)에 해당하는 노드 중에서 가장 깊은 위치에 있는 노드를 의미합니다. 참고로, 하나의 노드는 자기 자신의 자손이 될 수도 있습니다. 즉, x가 y의 조상이라면 x 자체가 최소 공통 조상이 될 수 있습니다.예를 들어 아래와 같은 트리가 있고 x =

  16. 파이썬(Python)으로 부모 포인터를 활용해 이진 트리의 최소 공통 조상(LCA) 찾기

    문제 소개 이진 트리와 두 개의 특정 노드 x, y가 주어졌다고 가정해 보겠습니다. 이때 두 노드의 최소 공통 조상(Lowest Common Ancestor, LCA)을 찾아 반환해야 합니다. 이진 트리에서 최소 공통 조상이란 노드 x와 y가 모두 그 노드의 자손(descendant)이 되는 가장 낮은 위치의 노드를 의미하며, 한 노드는 자기 자신의 자손이 될 수도 있습니다. 노드 구조 이 문제의 트리 노드는 일반적인 이진 트리 노드에 parent(부모) 포인터가 추가된 구조입니다. TreeNode: data: <정

  17. 파이썬(Python)으로 잘못된 링크가 있는 이진 트리 수정하는 방법

    문제 개요이진 트리에 오류가 하나 있는 상황을 가정해 보겠습니다. 어떤 노드의 오른쪽 자식 포인터가 같은 레벨에 있는 다른 노드를 잘못 가리키고 있는 것입니다. 이 문제를 해결하려면 오류가 발생한 노드를 찾아낸 뒤, 그 노드가 잘못 가리키는 대상 노드를 제외한 나머지 자손 노드들과 함께 해당 노드를 삭제해야 합니다. 최종적으로 수정된 이진 트리의 루트 노드를 반환하면 됩니다.예를 들어 입력이 다음과 같다고 해봅시다.위 트리에서는 노드 4와 노드 6 사이에 잘못된 연결이 존재합니다. 즉, 노드 4의 오른쪽 자식 포인터가 같은 레벨의

  18. Python으로 이진 트리의 루트 노드를 변경하는 방법

    이진 트리와 그 트리의 리프(leaf) 노드에 위치한 하나의 노드가 주어졌다고 가정해 봅시다. 우리가 해야 할 작업은 이 리프 노드를 이진 트리의 새로운 루트 노드로 만드는 것입니다. 다음과 같은 규칙에 따라 트리를 재구성할 수 있습니다.노드에 왼쪽 자식이 있었다면, 해당 자식은 오른쪽 자식이 됩니다.노드의 기존 부모는 그 노드의 왼쪽 자식이 됩니다. 이 과정에서 부모 노드가 해당 노드를 가리키던 링크는 null이 되므로, 부모 노드는 자식을 하나만 갖게 됩니다.트리의 노드 구조는 다음과 같습니다.TreeNode: data:

  19. 파이썬으로 이진 트리에서 최소 공통 조상(LCA) 찾기 – 단계별 구현 가이드

    이진 트리가 주어지고, 트리 내 여러 노드들의 최소 공통 조상(Lowest Common Ancestor, LCA)을 찾아야 한다고 가정해 보겠습니다. 이진 트리에서 최소 공통 조상이란 노드 x1, x2, x3, ..., xn을 모두 자손으로 두는 노드 중 가장 아래에 위치한 노드를 의미합니다. 이때 한 노드가 자기 자신의 자손이 될 수도 있다는 점이 중요합니다. 입력으로는 트리의 루트 노드와 조상을 찾을 노드들의 목록이 주어지며, 우리는 해당 노드를 찾아 결과로 반환해야 합니다. 예제로 살펴보기 다음과 같은 이진 트리가 있다고 가정

  20. 파이썬(Python)으로 가장 긴 회문 부분 수열의 길이 구하기 – 동적 계획법 풀이

    문제 정의 하나의 문자열이 주어졌을 때, 다음 두 조건을 모두 만족하는 회문 부분 수열(palindromic subsequence)을 찾아야 합니다. 길이가 반드시 짝수여야 합니다. 정확히 가운데에 있는 두 문자를 제외하면, 연속된 두 문자가 서로 같아서는 안 됩니다. 그리고 조건을 만족하는 부분 수열 중 가장 긴 것의 길이를 결과로 반환해야 합니다. 예를 들어 입력 문자열이 s = efeffe라고 해 보겠습니다. 이때 출력은 4입니다. 조건을 만족하는 짝수 길이의 회문 부분 수열은 effe 하나뿐이며, 그 길이가 정확히 4이

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:286/450  20-컴퓨터/Page Goto:1 280 281 282 283 284 285 286 287 288 289 290 291 292