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

Python

  1. 파이썬(Python)으로 목표 합을 가지는 겹치지 않는 두 부분 배열 찾기

    문제 개요배열 arr와 정수 target이 주어졌을 때, 각각의 원소 합이 정확히 target이 되면서 서로 겹치지 않는 두 개의 부분 배열(연속된 하위 배열)을 찾아야 합니다. 조건을 만족하는 답이 여러 개라면, 두 부분 배열 길이의 합이 가장 작은 경우를 선택해야 하며 그 최솟값을 반환합니다. 만약 조건을 만족하는 부분 배열이 하나도 없다면 -1을 반환합니다.예를 들어 입력이 arr = [5,2,6,3,2,5], target = 5라고 해 보겠습니다. 합이 5가 되는 부분 배열은 [5], [3,2], [5]로 세 가지가 있습니다

  2. Python으로 k개의 요소를 제거한 후 남는 고유 정수의 최소 개수 구하기

    정수로만 이루어진 배열 nums와 숫자 k가 주어졌다고 가정해 봅시다. 우리가 해야 할 일은 정확히 k개의 요소를 제거한 후 남아 있는 고유(unique) 요소의 최소 개수를 찾는 것입니다.문제 이해하기예를 들어 입력이 다음과 같다면,nums = [5, 4, 2, 2, 4, 4, 3]k = 3출력은 2가 됩니다. 그 이유는 5와 3을 제거하고, 2 또는 4 중 하나를 추가로 제거하면 배열에는 2와 4 두 종류의 값만 남기 때문입니다.접근 방법: 그리디(Greedy) 전략고유 요소의 개수를 최대한 줄이려면 등장 빈도가 낮은 숫자부터

  3. 파이썬(Python)으로 m개의 꽃다발을 만드는 데 필요한 최소 일수 구하기

    정수로 이루어진 배열 nums와 두 개의 값 m, k가 있다고 가정해 봅시다. 우리는 정원에서 꽃다발 m개를 만들어야 하고, 꽃다발 하나를 만들려면 인접한(연속된) 꽃 k송이가 필요합니다. 정원에는 서로 다른 꽃 n송이가 있으며, i번째 꽃은 bloomDay[i]번째 날에 핍니다. 각 꽃은 단 하나의 꽃다발에만 사용할 수 있습니다. 이때 꽃다발 m개를 완성하기 위해 기다려야 하는 최소 일수를 구하고, 만드는 것이 불가능하다면 -1을 반환해야 합니다. 예시 bloomDay = [5,5,5,5,10,5,5], m = 2, k = 3이라

  4. Python으로 중복 파일·디렉터리 이름을 고유하게 만드는 프로그램

    n개의 문자열로 이루어진 배열 names가 있다고 가정해 보겠습니다. 우리는 파일 시스템에 n개의 디렉터리를 만들어야 하며, i번째 단계에서 names[i]라는 이름의 디렉터리를 생성합니다. 두 파일은 동일한 이름을 가질 수 없기 때문에, 중복된 디렉터리 이름을 입력하면 시스템은 자동으로 이름 뒤에 (k) 형태의 접미사를 붙입니다. 여기서 k는 해당 이름이 고유해지는 가장 작은 양의 정수입니다. 최종적으로 길이가 n인 문자열 배열 ans를 구해야 하며, ans[i]는 i번째 디렉터리가 생성될 때 실제로 할당되는 이름이 됩니다.예를

  5. Python으로 n의 k번째 약수 구하기: O(√n) 효율 알고리즘과 구현 예제

    문제 설명 두 개의 양수 n과 k가 주어집니다. n의 모든 약수를 오름차순으로 정렬한 목록에서 k번째 약수를 찾아야 하며, 만약 n의 약수 개수가 k보다 적다면 -1을 반환해야 합니다. 예를 들어 n = 28, k = 4라고 가정해 보겠습니다. 28의 약수는 [1, 2, 4, 7, 14, 28]이고, 이 중 네 번째 약수는 7이므로 결과값은 7이 됩니다. 접근 방법 모든 수를 일일이 확인하는 대신, 제곱근까지만 탐색하면 효율적으로 문제를 해결할 수 있습니다. 약수는 항상 쌍(pair)으로 존재하기 때문입니다. 즉, i가 n의 약수

  6. Python으로 요소 하나를 삭제한 후 만들 수 있는 가장 긴 '1' 연속 부분 배열 찾기

    문제 이해하기0과 1로만 이루어진 이진 배열 nums가 주어지고, 배열에서 딱 한 개의 요소를 삭제할 수 있다고 가정해 보겠습니다. 이때 남은 배열에서 1로만 구성된 가장 긴 비어 있지 않은 연속 부분 배열(subarray)의 길이를 구하는 것이 목표입니다. 조건을 만족하는 부분 배열이 존재하지 않는다면 0을 반환합니다.예를 들어 입력이 nums = [1,0,1,1,1,0,1,1,0]이라면 정답은 5입니다. 인덱스 5에 있는 0을 삭제하면 [1,1,1,1,1]이라는 다섯 개의 1이 연속된 구간을 얻을 수 있기 때문입니다.알고리즘 접

  7. Python으로 배열 쌍의 합이 k로 나누어떨어지는지 확인하는 프로그램

    문제 설명nums라는 배열이 있고, 이 배열에는 짝수 개의 요소가 들어 있으며, 또 다른 값 k가 주어진다고 가정해 보겠습니다. 우리는 nums를 정확히 n/2개의 쌍으로 나누어 각 쌍의 합이 k로 나누어떨어지도록 만들어야 합니다. 가능하다면 true를, 그렇지 않다면 false를 반환합니다.예를 들어, 입력이 nums = [9,5,3,4,7,10,20,8], k = 3이라면 출력은 True입니다. (9,3), (5,7), (4,20), (8,10)과 같은 쌍을 만들 수 있고, 각 쌍의 합인 12, 12, 24, 18이 모두 3으로

  8. 파이썬으로 최솟값과 최댓값의 합이 k 이하인 부분 수열 개수 구하는 프로그램

    배열 nums와 정수 k가 주어졌다고 가정해 봅시다. 이때 nums의 비어 있지 않은 모든 부분 수열(subsequence) 중에서, 그 수열 안의 최솟값과 최댓값의 합이 k 이하가 되는 경우의 수를 구하는 것이 목표입니다. 답이 매우 커질 수 있으므로 결과는 109 + 7로 나눈 나머지를 반환해야 합니다. 문제 이해하기 예를 들어 입력이 nums = [4, 6, 7, 8], k = 11이라면 출력은 4입니다. 조건을 만족하는 부분 수열은 다음과 같습니다. [4] — 최솟값 4, 최댓값 4 → 4 + 4 ≤ 11 ✓ [4, 6]

  9. 파이썬으로 모든 요소가 1인 정사각형 부분 행렬의 개수 구하기

    m × n 크기의 이진 행렬(0과 1로만 이루어진 행렬)이 주어졌을 때, 모든 요소가 1로 채워져 있는 정사각형 부분 행렬이 몇 개나 있는지 구하는 문제입니다.문제 예시다음과 같은 행렬이 입력으로 주어졌다고 가정해 보겠습니다.011111110111이 경우 출력은 15가 됩니다. 그 이유는 다음과 같습니다.한 변의 길이가 1인 정사각형: 10개한 변의 길이가 2인 정사각형: 4개한 변의 길이가 3인 정사각형: 1개따라서 전체 정사각형의 개수는 10 + 4 + 1 = 15개입니다.해결 접근 방법 (동적 계획법)이 문제는 동적 계획법(D

  10. Python으로 1로만 이루어진 모든 부분 행렬의 개수 계산하기

    이 문제에서는 m × n 크기의 이진 행렬(binary matrix)이 주어졌을 때, 모든 원소가 1인 부분 행렬(submatrix)이 총 몇 개 존재하는지 구해야 합니다.예를 들어 입력 행렬이 다음과 같다고 가정해 보겠습니다.101011011이 경우 출력은 13입니다. 크기별로 살펴보면 1×1 부분 행렬 6개, 2×1 부분 행렬 3개, 1×2 부분 행렬 2개, 3×1 부분 행렬 1개, 그리고 2×2 부분 행렬 1개가 존재하여 전체 13개가 됩니다.문제 해결 접근 방법이 문제는 동적 계획법(Dynamic Programming)을 활

  11. Python으로 정렬된 하위 배열 합의 범위 합 구하기

    양의 정수로 이루어진 길이 n의 배열 nums가 있다고 가정해 보겠습니다. 이 배열의 모든 비어 있지 않은 연속된 하위 배열(부분 배열)의 합을 계산한 뒤, 이 값들을 오름차순으로 정렬하면 총 n*(n+1)/2개의 숫자로 이루어진 새로운 배열이 만들어집니다. 우리가 해야 할 일은 이 새로운 배열에서 인덱스 left부터 right까지(1부터 시작하는 인덱스, 양 끝 포함)에 해당하는 숫자들의 합을 구하는 것입니다.결과값이 매우 커질 수 있으므로, 최종 답은 10^9 + 7로 나눈 나머지를 반환해야 합니다.예시예를 들어 입력이 nums

  12. Python으로 최대 3번의 원소 변경 후 배열의 최댓값과 최솟값 최소 차이 구하기

    문제 개요nums라는 배열이 하나 주어져 있다고 가정해 봅시다. 한 번의 이동(move)마다 배열의 원소 하나를 임의의 값으로 변경할 수 있으며, 최대 3번의 이동을 수행한 뒤 배열에서 가장 큰 값(최댓값)과 가장 작은 값(최솟값)의 차이를 최소화해야 합니다.예를 들어 입력이 nums = [3,7,2,12,16]이라면 결과는 1입니다. 배열을 [1,1,0,1,1] 형태로 바꾸면 최댓값은 1, 최솟값은 0이 되어 차이가 1이 되기 때문입니다.접근 방법배열의 길이가 4 이하라면 모든 원소를 같은 값으로 맞출 수 있으므로 차이는 항상 0

  13. Python으로 1로만 이루어진 부분 문자열 개수 구하기

    이진 문자열(binary string) s가 주어졌을 때, 모든 문자가 1로만 이루어진 부분 문자열(substring)의 개수를 구하는 문제입니다. 답이 매우 커질 수 있기 때문에 결과는 10^9 + 7로 나눈 나머지(modulo)를 반환해야 합니다.예를 들어 입력이 s = 1011010이라면 출력은 5가 됩니다. 그 이유는 다음과 같습니다.1 → 4번 등장11 → 1번 등장문제 해결 접근 방법핵심 아이디어는 간단합니다. 문자열을 0을 기준으로 분할하면, 연속된 1로만 이루어진 덩어리(블록)들이 남게 됩니다. 길이가 n인 연속된 1

  14. 파이썬으로 그래프에서 최대 확률 경로 찾는 프로그램 구현하기

    문제 개요 노드가 n개인 무방향 가중치 그래프가 주어진다고 가정해 봅시다(노드는 0부터 번호가 매겨집니다). 그래프는 간선 리스트 형태로 입력되며, 각 간선 e마다 해당 간선을 통과할 때의 성공 확률인 probability[e]가 함께 제공됩니다. 또한 시작 노드와 끝 노드도 주어지는데, 우리의 목표는 시작 노드에서 끝 노드까지 이동하는 경로 중 성공 확률이 가장 높은 경로를 찾아 그 확률값을 반환하는 것입니다. 만약 어떤 경로도 존재하지 않는다면 0을 반환하면 됩니다. 예를 들어 입력이 다음과 같다고 해보겠습니다. 이 경우 출

  15. Python으로 동일한 레이블을 가진 하위 트리의 노드 수 찾기

    노드가 n개인 루트가 있는 일반 트리가 있다고 가정해 보겠습니다. 노드는 0부터 n-1까지 번호가 매겨져 있으며, 각 노드에는 소문자 영어 알파벳 하나로 이루어진 레이블이 붙어 있습니다. 레이블은 labels 배열로 입력되며, labels[i]는 i번째 노드의 레이블을 담고 있습니다. 트리는 간선 목록으로 표현되는데, 각 간선 e의 [u, v]는 u가 부모이고 v가 자식임을 의미합니다.우리가 구해야 할 것은 크기가 n인 배열 A입니다. 여기서 A[i]에는 i번째 노드와 같은 레이블을 가진 노드 중에서 i번째 노드의 하위 트리(sub

  16. Python으로 합이 홀수인 부분 배열 개수 구하기 (접두사 합 활용)

    문제 이해하기 배열 arr가 주어졌을 때, 원소들의 합이 홀수가 되는 부분 배열(연속된 하위 배열)의 개수를 구하는 문제입니다. 만약 답이 너무 커진다면 결과를 10^9+7로 나눈 나머지를 반환하면 됩니다. 예를 들어 입력이 arr = [8,3,7]이라고 가정해 보겠습니다. 만들 수 있는 모든 부분 배열은 [[8], [3], [7], [8,3], [3,7], [8,3,7]]의 여섯 가지이며, 각각의 합은 순서대로 [8, 3, 7, 11, 10, 18]입니다. 이 중 합이 홀수인 경우는 3, 7, 11의 세 가지이므로 정답은 3이 됩

  17. 파이썬으로 문자열의 '좋은 분할(Good Split)' 개수 구하기

    문제 설명문자열 s가 하나 주어져 있다고 가정해 봅시다. s를 두 개의 비어 있지 않은 문자열 p와 q로 나누었을 때, p와 q를 이어 붙이면 다시 원래의 s가 되고, 동시에 p와 q에 포함된 서로 다른 문자(고유 문자)의 개수가 같다면, 이 분할을 좋은 분할(good split)이라고 합니다.우리가 구해야 할 것은 문자열 s에서 만들 수 있는 좋은 분할의 총 개수입니다.예를 들어 입력이 s = xxzxyx라면 출력은 2가 됩니다. 문자열을 나눌 수 있는 위치는 여러 곳이 있지만, (xxz, xyx) 또는 (xxzx, yx)처럼 나

  18. Python으로 전구 스위치 문제 해결하기: 바이너리 문자열 기반 최소 플립 횟수 구하기

    방에 n개의 전구가 있다고 가정해 보겠습니다. 전구들은 0부터 n-1까지 번호가 매겨져 있으며, 왼쪽에서 오른쪽으로 한 줄로 배치되어 있습니다. 처음에는 모든 전구가 꺼져 있는 상태(0)입니다. 우리의 목표는 주어진 목표 배열 t로 표현되는 구성을 만드는 것입니다. 여기서 t[i]는 i번째 전구가 켜져 있으면 1, 꺼져 있으면 0을 의미합니다. 또한 전구의 상태를 반전시키는 스위치가 하나 있으며, 플립(flip) 연산은 다음과 같이 정의됩니다. 임의의 전구 인덱스 i를 선택합니다. 인덱스 i부터 n-1까지의 모든 전구 상태를 반전

  19. 파이썬(Python)으로 이진 트리에서 좋은 리프 노드 쌍의 개수 찾기

    문제 설명이진 트리와 거리 값 d가 하나 주어집니다. 서로 다른 두 리프(잎) 노드로 이루어진 쌍은, 두 노드 사이의 최단 경로 길이가 d보다 작거나 같을 때 좋은(good) 쌍으로 정의됩니다.예를 들어 아래와 같은 이진 트리가 있다고 가정해 보겠습니다.이때 거리 d = 4라면 정답은 2입니다. 그 이유는 (8, 7)과 (5, 6) 두 쌍의 경로 길이가 각각 2로 조건을 만족하지만, (7, 5)나 (8, 6) 같은 나머지 쌍들은 경로 길이가 5로 d = 4보다 크기 때문에 좋은 쌍이 될 수 없습니다.해결 접근 방법이 문제는 후위 순

  20. Python으로 배열 게임의 승자 찾기: k번 연속 승리 알고리즘 완벽 가이드

    문제 개요 서로 다른 고유한 원소로 이루어진 배열 arr와 정수 k가 주어져 있다고 가정해 보겠습니다. 이제 다음 규칙을 따르는 간단한 게임을 생각할 수 있습니다. 매 라운드마다 배열의 첫 두 원소인 arr[0]과 arr[1]을 비교합니다. 더 큰 값이 승리하여 0번째 자리에 그대로 남고, 작은 값은 배열의 맨 끝으로 이동합니다. 어떤 값이 k번 연속으로 승리하면 게임이 종료되며, 그 값이 최종 승자가 됩니다. 예를 들어 입력이 arr = [1,5,6,3,4,2], k = 3이라면 출력은 6이 됩니다. 라운드별 진행 과정은 다음

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