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

Python

  1. C++로 K-유사 문자열의 최소 교환 횟수 K 구하기 (BFS 알고리즘)

    문제 개요 두 문자열 s와 t가 있을 때, s에서 임의의 두 문자의 위치를 정확히 K번 교환(swap)하여 t를 만들 수 있다면 이 두 문자열은 K-유사(K-similar)하다고 정의합니다. 서로 애너그램(anagram) 관계인 문자열 s와 t가 주어졌을 때, 두 문자열이 K-유사가 되는 가장 작은 K를 구하는 것이 이 문제의 목표입니다. 예를 들어 s = abc, t = bac라고 하면, 앞의 두 글자 a와 b의 자리를 한 번만 바꾸면 t가 되므로 결과는 1입니다. 접근 방법: 너비 우선 탐색(BFS) 각 교환을 그래프 탐색의

  2. 파이썬으로 문자열의 고유한 부분 수열 개수 세기

    문자열 s가 주어졌을 때, 이 문자열에서 만들 수 있는 서로 다른(고유한) 부분 수열의 개수를 세는 프로그램을 작성해 보겠습니다. 답이 너무 커질 수 있으므로, 결과는 10^9 + 7로 나눈 나머지를 반환합니다. 예를 들어 입력이 s = bab라면 출력은 6입니다. 만들 수 있는 서로 다른 부분 수열은 다음과 같습니다. 길이 1: b, a 길이 2: bb, ba, ab 길이 3: bab 즉, 총 6개의 고유한 부분 수열이 존재합니다. 접근 방법: 동적 계획법(DP) 이 문제는 동적 계획법을 이용해 효율적으로 해결할 수

  3. Python으로 모든 작업 완료에 필요한 최소 시간 찾기

    문제 설명 jobs라는 배열이 있다고 가정해 보겠습니다. 여기서 jobs[i]는 i번째 작업을 완료하는 데 필요한 시간을 의미합니다. 또 하나의 값 k가 주어지는데, 이는 작업을 배정받을 수 있는 작업자(worker)의 수입니다. 각 작업은 반드시 정확히 한 명의 작업자에게 배정되어야 하며, 한 작업자의 작업 시간이란 그 작업자에게 배정된 모든 작업을 완료하는 데 걸리는 총 시간을 뜻합니다. 우리의 목표는 어떤 배정 방식이든 최대 작업 시간이 최소가 되도록 만드는 것입니다. 예를 들어 입력이 jobs = [2,1,3,8,5], k

  4. 파이썬(Python)으로 목표 문자열을 만드는 스탬프 순서 찾기 프로그램

    문제 개요소문자로 구성된 목표 문자열을 만들려고 한다고 가정해 봅시다. 처음에는 목표 문자열의 길이 n만큼 물음표(?)로 이루어진 시퀀스가 주어지며, 소문자로 이루어진 하나의 스탬프(stamp)를 사용할 수 있습니다. 각 턴마다 스탬프를 시퀀스 위에 놓아 해당 위치의 문자들을 스탬프의 문자로 덮어쓸 수 있으며, 최대 10 × n턴까지 진행할 수 있습니다.예를 들어 초기 시퀀스가 ?????이고 스탬프가 abc라면, 첫 턴에 abc??, ?abc?, ??abc 같은 문자열을 만들 수 있습니다. 목표 문자열을 만드는 것이 가능하다면 각

  5. 파이썬(Python)으로 돌 무더기 병합 최소 비용 구하기 – 구간 DP 풀이

    문제 설명N개의 돌 무더기가 한 줄로 나열되어 있고, i번째 무더기에는 stones[i]개의 돌이 들어 있다고 가정해 보겠습니다. 한 번의 이동은 연속된 K개의 무더기를 하나로 합치는 작업이며, 이때 드는 비용은 해당 K개 무더기에 있는 돌의 총 개수와 같습니다. 목표는 모든 돌 무더기를 하나로 합칠 때 드는 최소 비용을 구하는 것이고, 합치는 것이 불가능한 경우에는 -1을 반환해야 합니다.예시입력이 nums = [3, 2, 4, 1], K = 2라고 해봅시다. 이때 출력은 20이 됩니다.처음 상태: [3, 2, 4, 1][3, 2

  6. 파이썬으로 문자열이 세 개의 회문으로 나누어지는지 확인하는 방법

    문제 이해하기문자열 s가 하나 주어졌을 때, 이 문자열을 세 개의 회문(palindrome) 부분 문자열로 나눌 수 있는지 확인해야 합니다.예를 들어 입력이 s = levelpopracecar라면, level, pop, racecar 세 부분으로 나눌 수 있고 각각이 모두 회문이므로 결과는 True가 됩니다.접근 방법 (알고리즘)이 문제는 동적 계획법(DP)을 활용해 효율적으로 해결할 수 있습니다. 먼저 모든 부분 문자열에 대한 회문 여부를 미리 계산해 둔 뒤, 세 구간으로 나누는 모든 경우를 확인하는 방식입니다.n := 문자열 s

  7. Python으로 K명의 직원을 최소 비용으로 고용하는 프로그램 작성하기

    문제 설명각 직원의 능력을 담은 배열 quality와 각 직원의 최저 임금 기대치를 담은 배열 wage, 그리고 정수 K가 주어집니다. i번째 직원은 quality[i]만큼의 능력을 가지고 있으며, 최소한 wage[i] 이상의 임금을 받기를 기대합니다. 우리는 K명의 직원을 고려하여 하나의 유급 그룹을 구성하려고 하며, 이때 다음 두 가지 규칙을 반드시 지켜야 합니다.유급 그룹에 속한 모든 직원은 그룹 내 다른 직원들과 비교했을 때 자신의 능력(quality) 비율에 맞게 급여를 받아야 합니다.유급 그룹에 속한 모든 직원은 최소한

  8. 파이썬으로 가르쳐야 할 최소 사용자 수 구하기

    문제 설명숫자 n, 배열 languages, 배열 friendships가 주어진다고 가정해 봅시다. 여기서 n은 1부터 n까지 번호가 매겨진 언어의 개수를 의미하고, languages[i]는 i번째 사용자가 아는 언어들의 집합을 나타내며, friendships[i]는 [ui, vi] 형태의 쌍으로 사용자 ui와 vi 사이의 우정 관계를 나타냅니다.우리는 하나의 언어를 선택해 일부 사용자에게 가르칠 수 있으며, 이를 통해 모든 친구 관계에 있는 사람들이 서로 소통할 수 있도록 만들어야 합니다. 목표는 가르쳐야 할 사용자의 최소 수를

  9. 파이썬으로 XOR로 인코딩된 순열 배열 복호화하는 프로그램

    문제 개요 배열 enc가 하나 주어져 있다고 가정해 보겠습니다. 처음 n개의 양의 정수(n은 홀수)로 이루어진 순열(permutation) 배열 perm이 존재하며, 이 배열은 길이가 n-1인 배열 enc로 다음 규칙에 따라 인코딩되어 있습니다. enc[i] = perm[i] XOR perm[i+1] 즉, 인접한 두 원소를 XOR한 결과가 차례대로 enc에 저장된 형태입니다. 우리가 해야 할 일은 이렇게 압축된 정보만으로 원래의 순열 배열 perm을 복원하는 것입니다. 예시 입력이 enc = [2, 5, 6, 3]이라면 출력은 [

  10. Python으로 두 문자열이 세 조건 중 하나를 만족하게 하는 최소 문자 변경 수 구하기

    문제 설명 소문자로만 이루어진 두 문자열 s와 t가 있다고 가정해 보겠습니다. 한 번의 연산으로 s 또는 t의 임의의 문자를 다른 소문자 알파벳으로 바꿀 수 있으며, 다음 세 조건 중 하나를 반드시 만족해야 합니다. s의 모든 문자가 알파벳 순서에서 t의 모든 문자보다 엄격하게 앞서 있어야 합니다. t의 모든 문자가 알파벳 순서에서 s의 모든 문자보다 엄격하게 앞서 있어야 합니다. s와 t가 모두 단 하나의 동일한 문자로만 이루어져야 합니다. 목표는 세 조건 중 하나를 달성하기 위해 필요한 최소 연산 횟수를 구하는 것입니다.

  11. 파이썬(Python)으로 k번째로 큰 XOR 좌표 값 찾는 방법

    문제 소개m × n 크기의 행렬과 정수 k가 하나 주어진다고 가정해 봅시다. 이때 행렬의 좌표 (a, b)에 해당하는 값은, i가 0부터 a까지, j가 0부터 b까지의 범위에 있는 모든 matrix[i][j] 요소들을 XOR한 결과값입니다. 우리가 구해야 할 것은 행렬의 모든 좌표 값들 중에서 k번째로 큰 값(1부터 시작하는 인덱스)입니다.예를 들어 입력이 다음과 같다면,5216k = 1일 때의 출력은 7이 됩니다. 좌표 (0, 1)의 값이 5 XOR 2 = 7로 계산되는데, 이것이 전체 좌표 값 중 가장 큰 값이기 때문입니다.참고

  12. 파이썬으로 이진 트리에서 두 노드 사이의 거리 구하기

    이진 트리가 주어졌을 때, 그 안에서 두 노드 사이의 거리를 찾아야 하는 상황을 가정해 보겠습니다. 그래프에서처럼 두 노드를 연결하는 간선(edge)들을 따라가며, 그 경로에 있는 간선의 개수를 세어 거리로 반환하면 됩니다. 이때 트리의 노드는 다음과 같은 구조를 가집니다. data : <정수 값> right : <트리의 다른 노드를 가리키는 포인터> left : <트리의 다른 노드를 가리키는 포인터> 예를 들어 입력이 다음과 같다고 해보겠습니다. 거리를 구해야 할 두 노드가 2와 8이라면, 출력

  13. 파이썬(Python)으로 인접한 쌍 정보만으로 원본 배열 복원하기

    크기가 n-1인 2차원 배열 adPair가 있다고 가정해 보겠습니다. 각 adPair[i]는 두 개의 요소 [ui, vi]를 담고 있으며, 이는 배열 nums에서 ui와 vi가 서로 인접해 있음을 의미합니다. nums에는 중복 없는 고유한 요소 n개가 들어 있습니다. 우리의 목표는 이 인접 정보만으로 원래의 배열 nums를 복원하는 것이며, 가능한 답이 여러 개라면 그중 아무거나 하나를 반환하면 됩니다. 예를 들어 입력이 adPair = [[3,2],[4,5],[4,3]]이라면 출력은 [2,3,4,5]가 됩니다. 해결 접근 방식

  14. 파이썬으로 한 번의 제곱 연산 후 최대 부분 배열 합 구하기

    문제 설명정수로 이루어진 배열이 하나 주어졌다고 가정해 보겠습니다. 우리는 배열의 특정 요소 array[i]를 그 제곱 값(array[i] * array[i])으로 바꾸는 연산을 딱 한 번 수행할 수 있습니다. 이 연산을 적용한 뒤 만들 수 있는 최대 부분 배열(subarray)의 합을 반환해야 하며, 부분 배열은 비어 있으면 안 됩니다.예를 들어 입력이 다음과 같다면,array = [4, 1, -2, -1]출력은 17이 됩니다.배열의 첫 번째 요소 array[0]을 제곱 값으로 바꾸면 배열은 [16, 1, -2, -1]이 됩니다.

  15. 파이썬으로 가장 최근에 사용한(MRU) 요소를 큐의 끝으로 이동시키는 큐 설계하기

    문제 소개 정수 1부터 n까지의 값으로 초기화되는 특별한 큐(queue)를 설계해야 한다고 가정해 보겠습니다. 이 큐는 함수가 호출될 때마다 입력으로 전달된 위치에 있는 요소를 큐의 맨 뒤로 이동시키고, 이동 작업이 끝난 후 현재 큐의 맨 뒤에 있는 값을 반환하는 기능을 수행합니다. 예를 들어 n = 5로 큐를 초기화하면 [1, 2, 3, 4, 5] 상태가 되며, 이동 명령이 위치 5, 2, 3, 1 순서로 호출될 때의 동작은 다음과 같습니다. solve(5): 5번째 요소(값 5)를 맨 뒤로 이동 → [1, 2, 3, 4, 5]

  16. 파이썬으로 전망이 좋은 건물 찾기: 배열 탐색 알고리즘 구현

    문제 개요여러 건물의 높이가 담긴 배열이 주어졌다고 가정해 보겠습니다. 건물들은 한 줄로 나란히 서 있으며, 어떤 건물의 시야가 그보다 높은 다른 건물에 가려지지 않는다면 해당 건물은 전망이 좋은 건물이라고 정의할 수 있습니다. 따라서 높이 정보가 담긴 배열이 주어졌을 때, 다른 더 높은 건물에 의해 시야가 막히지 않는 건물들을 찾아 조건을 만족하는 인덱스들을 반환해야 합니다.예를 들어 입력이 height = [5, 6, 8, 7]이라면 출력은 [2, 3]이 됩니다. 인덱스 0과 1에 있는 건물(높이 5, 6)은 인덱스 2의 더 높

  17. 문장 속 등장 횟수를 기준으로 구문을 정렬하는 파이썬 프로그램

    문제 소개두 개의 리스트가 주어졌다고 가정해 보겠습니다. 하나는 몇 가지 선별된 구문(phrase)을 담고 있는 phrases 리스트이고, 다른 하나는 해당 구문들이 포함되어 있을 수도 있고 없을 수도 있는 여러 문장을 담고 있는 sentences 리스트입니다. 우리가 해야 할 일은 첫 번째 리스트의 각 구문이 두 번째 리스트의 문장들 속에서 실제로 사용되는지 확인한 뒤, 등장 횟수를 기준으로 구문을 정렬하여 그 결과를 반환하는 것입니다.예를 들어 입력이 다음과 같다면,phrases = [strong, durable, efficie

  18. Python으로 두 문자열에서 동일한 부분 문자열 쌍의 개수 찾기

    문제 개요 소문자 알파벳으로만 구성된 두 개의 문자열이 주어집니다. 이때 아래 조건을 모두 만족하는 인덱스 사중조(p, q, r, s)의 개수를 구해야 합니다. 0 ≤ p ≤ q ≤ 첫 번째 문자열의 길이 0 ≤ r ≤ s ≤ 두 번째 문자열의 길이 첫 번째 문자열에서 인덱스 p로 시작해 q에서 끝나는 부분 문자열과, 두 번째 문자열에서 인덱스 r로 시작해 s에서 끝나는 부분 문자열이 서로 동일해야 합니다. 위 조건을 만족하는 모든 사중조 중에서 q − r의 값이 가능한 한 최소여야 합니다. 핵심은 각 문자에 대해 첫 번째 문

  19. Python 이분 매칭 알고리즘으로 수락 가능한 초대의 최대 개수 구하기

    남자 m명과 여자 n명이 있다고 가정해 보겠습니다(m = n). 곧 파티가 열릴 예정이며, 각 남자는 반드시 여자 한 명과 함께 참석해야 합니다. 그래서 모든 남자가 여자들에게 초대장을 보내지만, 한 명의 여자는 오직 하나의 초대만 수락할 수 있습니다. 이때 우리가 구해야 할 것은 여자들이 실제로 수락할 수 있는 초대장의 총 개수입니다. 입력은 m x n 크기의 행렬로 주어집니다. 행렬의 각 위치 (i, j)는 남자 i가 여자 j에게 초대장을 보냈는지를 나타내며, 값이 1이면 초대장을 보낸 것이고 0이면 보내지 않은 것입니다. 예제

  20. 파이썬으로 동전 조합으로 만들 수 있는 연속 값의 최대 개수 찾기

    문제 설명 n개의 요소를 가진 coins라는 배열이 있다고 가정해 보겠습니다. 이 배열은 우리가 소유한 동전들을 나타내며, i번째 동전의 가치는 coins[i]로 표현됩니다. n개의 동전 중 일부를 선택했을 때 그 합이 x가 된다면, 우리는 값 x를 만들 수 있습니다. 이 문제에서는 0부터 시작하여 연속적으로 만들 수 있는 값의 최대 개수를 구해야 합니다. 예를 들어, 입력이 coins = [1,1,3,4]라면 출력은 10이 됩니다. 그 이유는 다음과 같습니다: 0 = [] 1 = [1] 2 = [1,1] 3 = [3] 4 =

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:363/450  20-컴퓨터/Page Goto:1 357 358 359 360 361 362 363 364 365 366 367 368 369