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

Python

  1. 파이썬으로 각 문자가 최대 한 조각에만 등장하도록 문자열을 분할하고 파티션 크기 구하기

    소문자로만 이루어진 문자열 s가 주어졌다고 가정해 봅시다. 이 문제의 목표는 모든 알파벳이 최대 한 개의 조각에만 등장하도록 문자열을 최대한 많은 조각으로 분할한 뒤, 각 파티션(partition)의 크기를 리스트 형태로 반환하는 것입니다. 예를 들어 입력이 s = momoplaykae라면, 문자열은 [momo, p, l, ayka, e]처럼 다섯 개의 조각으로 나뉩니다. 모든 문자가 자신이 속한 조각 안에서만 등장하므로 조건을 만족하며, 따라서 출력은 [4, 1, 1, 4, 1]이 됩니다. 문제 해결 접근 방식 이 문제의 핵심은

  2. Python으로 두 지점의 금을 줍는 최소 비용 구하기 – 다익스트라 알고리즘 완벽 정리

    문제 개요2차원 행렬(matrix)과 여러 값들이 주어집니다: row, col, erow0, ecol0, erow1, ecol1. 현재 우리의 위치는 matrix[row, col]이며, 이곳에서 출발해 matrix[erow0, ecol0]와 matrix[erow1, ecol1] 두 곳에 있는 금을 모두 줍고자 합니다.이동은 상하좌우 네 방향으로 자유롭게 할 수 있지만, 셀(r, c)에 도착할 때마다 해당 셀의 비용인 matrix[r, c]를 지불해야 합니다. 단, 같은 셀을 여러 번 방문하더라도 비용은 한 번만 지불합니다. 목표는

  3. 파이썬으로 한 직선 위의 점 개수를 세는 프로그램

    문제 설명 좌표 목록이 주어져 있다고 가정해 보겠습니다. 각 좌표는 x와 y 두 값을 가지며, 데카르트 좌표평면 위의 한 점을 나타냅니다. 우리가 구해야 하는 것은 하나의 직선 위에 동시에 놓여 있는 점들의 최대 개수입니다. 예를 들어 입력이 coordinates = [[6, 2], [8, 3], [10, 4], [1, 1], [2, 2], [6, 6], [7, 7]]이라면, [1, 1], [2, 2], [6, 6], [7, 7] 네 점이 하나의 직선(y = x) 위에 위치하고 있으므로 출력은 4가 됩니다. 접근 방법 핵심 아이디

  4. Python으로 트리에서 특정 간선을 포함하는 고유한 경로의 수 계산하기

    문제 설명 (u, v) 형태의 간선 목록이 주어지며, 이 간선들은 하나의 트리를 구성한다고 가정해 보겠습니다. 이때 각 간선마다 해당 간선을 지나는 고유한 경로의 총 개수를 구하고, 결과를 입력된 순서 그대로 반환해야 합니다. 예를 들어 edges = [[0, 1], [0, 2], [1, 3], [1, 4]]가 입력으로 주어진다면, 출력은 [6, 4, 4, 4]가 됩니다. 알고리즘 접근 방법 이 문제를 해결하기 위해 다음 단계를 따릅니다 − 주어진 간선들로부터 인접 리스트(adj)를 생성합니다. count := 빈 맵(딕셔너리

  5. 파이썬에서 정규 표현식 패턴이 문자열과 일치하는지 확인하는 방법

    문제 개요문자열 s와 정규 표현식 패턴 p가 주어졌을 때, 주어진 패턴이 문자열 전체와 일치하는지 확인하는 프로그램을 작성해야 합니다. 이 문제에서 정규 표현식은 다음 두 가지 규칙만 지원합니다.. (마침표) — 임의의 단일 문자 하나와 일치합니다.* (별표) — 바로 앞의 요소가 0번 이상 반복되는 경우와 일치합니다.예를 들어 입력이 pattern = h.l*o, s = hello라면 결과는 True입니다. h는 h와, .은 e와, l*은 연속된 ll과, 마지막 o는 o와 각각 일치하기 때문입니다.해결 접근 방법이 문제는 재귀(백

  6. Python으로 S-표현식(S-expression) 문자열을 계산하는 방법

    S-표현식(S-expression)이란?문자열 s가 S-표현식(S-expression)으로 주어졌을 때, 이를 평가하여 그 결과를 정수로 반환하는 프로그램을 작성해 보겠습니다.S-표현식은 하나의 숫자이거나, 괄호로 감싸진 재귀적인 표현식입니다. 예를 들어 (+ (- 3 2) (* 3 3))은 일반적인 수학 표기법으로 (3 - 2) + (3 * 3)과 같으며, 그 결과는 10이 됩니다. 사용할 수 있는 유효한 연산자는 +, -, *, / 네 가지입니다.예를 들어 입력이 s = (- (+ 3 2) 2)라면, 이는 ((3 + 2) - 2

  7. Python으로 두 섬을 잇는 최단 다리 길이 찾기

    0은 물을, 1은 육지를 나타내는 이진 행렬(binary matrix)이 주어졌다고 가정해 봅시다. 여기서 섬(island)이란 상하좌우 4방향으로 서로 연결된 1들의 묶음을 의미하며, 모든 섬은 물(0) 또는 행렬의 가장자리에 의해 둘러싸여 있습니다. 우리가 구해야 할 것은 두 섬을 연결하는 가장 짧은 다리의 길이입니다.문제 예시예를 들어 다음과 같은 입력이 주어진다고 해보겠습니다.001101100이 경우 출력 결과는 1이 됩니다. 즉, 좌표 (1,0)에 있는 섬과 좌표 (1,2)에 있는 섬을 다리 하나로 연결할 수 있다는 뜻입니

  8. 파이썬으로 두 문자열의 최단 공통 초수열(Shortest Supersequence) 길이 구하기

    두 개의 문자열 s와 t가 주어졌을 때, 두 문자열을 모두 부분 수열(subsequence)로 포함하는 가장 짧은 문자열, 즉 최단 공통 초수열(Shortest Common Supersequence)의 길이를 구하는 문제입니다.예를 들어 입력이 s = pipe, t = people이라면 출력은 7이 됩니다. 이 경우 가능한 초수열 중 하나는 pieople입니다.해결 접근 방법이 문제는 최장 공통 부분 수열(LCS, Longest Common Subsequence)을 활용하면 효율적으로 해결할 수 있습니다. 두 문자열 길이의 합에서

  9. 파이썬으로 물에 완전히 둘러싸인 섬 제거하기 – BFS 알고리즘 구현 가이드

    문제 정의이진 행렬(binary matrix)이 주어졌을 때, 1은 육지(land), 0은 물(water)을 나타냅니다. 여기서 섬(island)이란 상하좌우로 인접한 1들의 그룹을 의미하며, 이 그룹은 물 또는 행렬의 가장자리에 의해 둘러싸여 있습니다.우리가 찾아야 할 대상은 물로 완전히 둘러싸인 섬, 즉 행렬의 가장자리와 맞닿아 있지 않은 섬입니다. 이런 섬을 모두 찾아내어 0으로 변경하는 것이 목표입니다. 단, 이웃 판정 시 대각선 방향은 제외하고 수평·수직 방향만 고려합니다.예시로 이해하기다음과 같은 입력이 주어졌다고 가정해

  10. 파이썬으로 합이 목표값 이상이 되는 최단 부분 리스트의 길이 구하기

    문제 설명숫자로 이루어진 리스트 nums와 정수 target이 주어졌을 때, 원소들의 합이 target과 같거나 그보다 큰 가장 짧은 연속 부분 리스트의 길이를 찾아야 합니다. 만약 조건을 만족하는 부분 리스트가 존재하지 않는다면 -1을 반환합니다.예를 들어 nums = [2, 11, -4, 17, 4], target = 19가 입력으로 주어지면 결과는 2가 됩니다. [17, 4]를 선택하면 합이 21이 되어 19 이상이라는 조건을 충족하기 때문입니다.접근 방법이 문제는 누적 합(prefix sum)과 단조 큐(monotonic d

  11. Python으로 이진 행렬에서 안전 거리 k의 최댓값 찾기

    0과 1로만 이루어진 이진 행렬(binary matrix)이 하나 주어졌다고 가정해 보겠습니다. 여기서 0은 빈 칸을, 1은 사람이 있는 칸을 의미합니다. 두 칸 사이의 거리는 x 좌표 차이와 y 좌표 차이 중 더 큰 값, 즉 체비셰프 거리(Chebyshev distance)로 정의됩니다. 만약 어떤 빈 칸이 존재하여 그 칸에서 행렬 안의 모든 사람까지의 거리와 행렬의 네 변(경계)까지의 거리가 모두 k 이상이라면, 이 행렬을 안전 인자(safety factor) k에 대해 안전하다고 말합니다. 우리가 구해야 하는 것은 바로 이

  12. 파이썬으로 인접한 나무의 높이가 모두 다르도록 만드는 최소 비용 구하기

    문제 소개 식물의 높이를 담은 숫자 리스트 heights와, 각 식물의 높이를 1만큼 올릴 때 드는 비용을 담은 리스트 costs가 주어집니다. 이때 인접한 식물끼리는 서로 다른 높이를 갖도록 만들어야 하며, 그렇게 하기 위해 필요한 최소 비용을 구하는 것이 목표입니다. 예를 들어 heights = [3, 2, 2], costs = [2, 5, 3]라고 한다면 정답은 3입니다. 세 번째 나무의 높이를 1만큼 올리면 비용이 3이 들고, 그 결과 높이는 [3, 2, 3]이 되어 인접한 나무들의 높이가 모두 달라지기 때문입니다. 풀이

  13. Python으로 n(t) 형식의 압축 문자열 확장(디코딩)하는 프로그램

    문제 소개문자열 s가 주어졌다고 가정해 봅시다. 이 문자열은 어떤 더 긴 원본 문자열을 인코딩한 결과입니다. 인코딩 규칙은 다음과 같습니다.n(t)는 문자열 t를 n번 반복하여 이어 붙인 결과를 의미합니다.t는 일반 문자열일 수도 있고, 또 다른 인코딩된 문자열이 재귀적으로 포함될 수도 있습니다.예를 들어 입력이 s = 3(pi)2(3(am))0(f)1(u)라면, 디코딩된 출력은 pipipiamamamamamamu가 됩니다. 각 부분을 살펴보면 다음과 같습니다.3(pi) → pipipi2(3(am)) → amamamamamam (내

  14. 파이썬으로 최솟값 × 크기가 최대가 되는 부분 리스트 찾기

    문제 개요 숫자로 구성된 목록 nums와 인덱스 값 pos가 주어졌을 때, 인덱스 pos를 반드시 포함하는 연속된 부분 리스트 A를 찾아 (A의 최솟값) × (A의 크기)가 최대가 되는 값을 구해 반환해야 합니다. 예를 들어 입력이 nums = [-2, 2, 5, 4], pos = 3이라면 결과는 8입니다. 가장 좋은 부분 리스트는 [5, 4]이며, 최솟값은 4, 크기는 2이므로 4 × 2 = 8이 되기 때문입니다. 접근 방법: 탐욕(Greedy) 알고리즘 이 문제는 탐욕 기법으로 효율적으로 해결할 수 있습니다. 시작 지점 pos

  15. 파이썬으로 요소 하나를 삭제한 뒤 최댓값·최솟값을 모두 포함하는 부분 리스트 개수 구하기

    숫자로 이루어진 리스트 nums가 주어지고, 이 리스트에서 최대 한 개의 요소를 삭제할 수 있다고 가정해 보겠습니다. 이때 구해야 할 것은, 삭제가 끝난 뒤의 리스트에서 최댓값과 최솟값을 동시에 포함하는 연속 부분 리스트(sublist)의 최대 개수입니다. 예를 들어 입력이 nums = [3, 2, 6, 2, 4, 10]이라면 출력은 8이 됩니다. 값 10을 제거하면 리스트는 [3, 2, 6, 2, 4]가 되는데, 이때 최댓값 6과 최솟값 2를 모두 담고 있는 부분 리스트는 다음과 같이 여덟 개입니다. [2, 6] [6, 2]

  16. 파이썬(Python)으로 숫자 리스트의 모든 부분 수열 너비 합 구하기

    문제 개요숫자 리스트 nums가 주어졌을 때, 하나의 수열 너비(width)는 그 수열 안에서 최댓값과 최솟값의 차이로 정의합니다. 이때 nums로 만들 수 있는 모든 부분 수열(subsequence)의 너비를 각각 구한 뒤, 그 합을 계산하는 것이 목표입니다. 단, 결과 값이 매우 커질 수 있으므로 109+7로 나눈 나머지를 반환해야 합니다.예를 들어 입력이 nums = [7, 4, 9]라고 해보겠습니다. 만들 수 있는 부분 수열은 [7], [4], [9], [7, 4], [7, 9], [4, 9], [7, 4, 9]이고, 각 수

  17. 파이썬으로 2D 행렬에서 k×k 부분 행렬의 최솟값 구하기

    문제 개요2차원 행렬과 정수 k가 주어졌을 때, 행렬 안에 존재하는 모든 k × k 부분 행렬(sub-matrix) 각각의 최솟값들을 모아 새로운 행렬로 반환하는 것이 이번 문제의 목표입니다.예를 들어, 다음과 같은 3×3 행렬이 입력으로 주어진다고 가정해 보겠습니다.3568654312여기서 k = 2라고 하면, 출력은 [[3, 5], [3, 3]]이 됩니다.부분 행렬별 최솟값 확인왼쪽 위 부분 행렬의 최솟값은 3입니다.3 5 8 6오른쪽 위 부분 행렬의 최솟값은 5입니다.5 6 6 5왼쪽 아래 부분 행렬의 최솟값은 3입니다.8 6

  18. Python으로 간선이 최소 신장 트리(MST)에 포함되는지 확인하는 방법

    2차원 리스트 edges가 하나의 무방향 그래프를 나타낸다고 가정해 봅시다. 이 리스트의 각 항목은 (u, v, w) 형태의 간선 정보를 담고 있으며, 이는 노드 u와 v가 가중치 w를 가지는 간선으로 연결되어 있음을 의미합니다. 여기에 정수 a와 b가 추가로 주어지는데, 이 값들은 간선 (a, b)를 나타냅니다. 우리가 확인해야 할 것은 바로 이 간선 (a, b)가 최소 신장 트리(Minimum Spanning Tree, MST)의 일부에 해당하는지 여부입니다.참고: 그래프는 반드시 연결 그래프여야 하며, 간선 (a, b)는 그래

  19. 파이썬(Python)으로 단어들이 연결되어 원을 이루는지 확인하는 프로그램

    문제 정의단어 목록이 주어졌다고 가정해 보겠습니다. 이때 주어진 단어들을 서로 연결하여 하나의 원(circle) 형태로 만들 수 있는지 확인해야 합니다. 단어 A가 다른 단어 B 앞에 배치될 수 있는 유일한 조건은 A의 마지막 문자가 B의 첫 번째 문자와 동일할 때입니다. 또한 모든 단어를 빠짐없이 사용해야 하며, 각 단어는 정확히 한 번만 사용할 수 있습니다.예를 들어 입력이 다음과 같다면,[ant, dog, tamarind, nausea, gun]출력 결과는 True가 됩니다.알고리즘 접근 방식이 문제는 그래프 이론의 오일러 회

  20. Python으로 트리의 특수 노드(Special Node) 찾기

    n개의 노드로 구성된 n-ary 트리가 인접 리스트 형태의 2차원 리스트 tree로 주어지고, 각 노드의 색상 정보는 리스트 color에 담겨 있습니다. 트리의 루트는 tree[0]에 해당합니다.문제 정의i번째 노드의 특성은 다음과 같습니다.tree[i]: i번째 노드의 자식 노드와 부모 노드 정보color[i]: i번째 노드의 색상어떤 노드 N을 루트로 하는 서브트리에 속한 모든 노드의 색상이 중복 없이 고유할 때, 이 노드 N을 특수(special) 노드라고 부릅니다. 즉, 주어진 트리에서 특수 노드가 총 몇 개인지 구하는 것이

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:203/450  20-컴퓨터/Page Goto:1 197 198 199 200 201 202 203 204 205 206 207 208 209