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

Python

  1. 파이썬으로 분리된 구간 기준 배열 분할 지점 찾는 프로그램

    문제 이해하기 배열 nums가 주어졌을 때, 이를 left와 right라는 두 개의 하위 배열로 분할하려고 합니다. 단, 다음 세 가지 조건을 반드시 만족해야 합니다. left의 모든 원소는 right의 모든 원소보다 작거나 같아야 합니다. left와 right는 모두 비어 있으면 안 됩니다. left의 크기는 가능한 한 가장 작아야 합니다. 이러한 조건대로 분할했을 때, left의 길이를 구하는 것이 이 문제의 핵심입니다. 예를 들어 입력이 [5, 0, 3, 8, 6]이라면 결과는 3입니다. left가 [5, 0, 3], ri

  2. Python으로 제한된 조건의 배열에서 주어진 인덱스의 최댓값 찾기

    세 개의 값 n, index, maxSum이 주어졌다고 가정해 봅시다. 우리는 아래 조건을 모두 만족하는 배열 nums에서 nums[index]가 가질 수 있는 최댓값을 구해야 합니다. 배열 nums의 크기는 정확히 n입니다. 배열의 모든 요소는 양수여야 합니다. 인접한 두 요소의 차이는 1 이하입니다. 즉, 모든 i(0 ≤ i < n-1)에 대해 |nums[i] − nums[i+1]| ≤ 1을 만족합니다. 배열 요소들의 총합은 maxSum을 초과하지 않습니다. nums[index]의 값이 최대화되어야 합니다. 예시 입력이

  3. 파이썬(Python)으로 배열 정렬에 필요한 최소 스왑 횟수 구하기

    nums라는 이름의 배열이 주어졌을 때, 이 배열을 오름차순 또는 내림차순 중 어느 한쪽이라도 정렬된 상태로 만들기 위해 필요한 스왑(교환) 횟수의 최솟값을 구해야 합니다.예를 들어 입력이 nums = [2, 5, 6, 3, 4]라고 가정해 보겠습니다. 이 경우 출력은 2가 됩니다. 처음 배열은 [2, 5, 6, 3, 4]입니다. 먼저 6과 4를 교환하면 [2, 5, 4, 3, 6]이 되고, 이어서 5와 3을 교환하면 [2, 3, 4, 5, 6]이 됩니다. 따라서 배열을 오름차순으로 정렬하는 데 총 2번의 스왑이 필요합니다.문제 해

  4. 파이썬으로 연속된 자릿수 차이가 K인 숫자 찾기 — BFS 완전 정리

    이번 글에서는 길이가 N인 숫자 중에서 연속된 두 자릿수의 절대 차이가 항상 K가 되는 모든 숫자를 찾는 프로그램을 파이썬으로 구현해 보겠습니다. 단, 정답에 포함되는 숫자는 0 자체를 제외하고 맨 앞자리가 0으로 시작해서는 안 된다는 조건이 있습니다. 예를 들어 입력이 N = 4, K = 7이라면 출력은 다음과 같습니다. [1818, 2929, 7070, 8181, 9292] 여기서 0707은 실제로 조건을 만족하지만 맨 앞자리가 0으로 시작하기 때문에 유효하지 않은 숫자로 제외됩니다. 문제 해결 접근 방법 이 문제는 너

  5. Python으로 유효한 괄호 문자열을 만들기 위한 최소 괄호 제거 개수 찾기

    문자열 s에 괄호 (, )와 영어 소문자가 섞여 있다고 가정해 봅시다. 이때 임의의 위치에서 여는 괄호 또는 닫는 괄호를 최소 개수만큼 삭제하여 결과 문자열이 유효한(valid) 괄호 문자열이 되도록 만들고, 그 결과로 얻을 수 있는 유효한 문자열 하나를 반환해야 합니다.여기서 괄호 문자열이 유효하다는 것은 다음 조건 중 하나를 만족하는 경우를 말합니다.문자열이 비어 있거나 소문자만 포함하는 경우문자열이 AB 형태(A와 B의 연결)로 표현될 수 있고, A와 B가 모두 유효한 문자열인 경우문자열이 (A) 형태로 표현될 수 있고, A가

  6. 파이썬으로 문자열 형태 숫자의 모든 부분 문자열 합계 구하기

    문자열 형태로 주어진 숫자가 있을 때, 해당 숫자의 모든 부분 문자열(substring)의 합을 구하는 문제를 살펴보겠습니다. 결과값이 매우 커질 수 있으므로, 최종 답은 109+7로 나눈 나머지를 반환해야 합니다.예를 들어 입력이 s = 268이라면, 만들 수 있는 부분 문자열은 2, 6, 8, 26, 68, 268이고, 이들의 총합은 다음과 같습니다.2 + 6 + 8 + 26 + 68 + 268 = 378문제 해결 접근 방법모든 부분 문자열을 직접 생성하면 시간 복잡도가 급격히 증가하므로, 각 자릿수가 전체 합에 기여하는 정도를

  7. 파이썬으로 두 문장이 유사한지 확인하는 프로그램 만들기

    문제 개요두 문장 s와 t가 주어졌을 때, 이 두 문장이 유사한지 판별하는 프로그램을 만들어 보겠습니다. 여기서 문장은 영어 알파벳으로만 구성된다고 가정합니다.두 문장이 유사하다는 것은, 한 문장의 임의의 위치에 다른 문장(빈 문장도 허용)을 삽입했을 때 두 문장이 완전히 같아질 수 있는 경우를 의미합니다.예를 들어, 입력이 s = "we live at city Kolkata", t = "city Kolkata"라면 결과는 True입니다. t의 앞부분에 "we live at"이라

  8. 파이썬으로 시각(시·분)을 영어 텍스트 형식으로 변환하는 프로그램 만들기

    문제 개요시(hour)와 분(minute)이라는 두 개의 입력값이 주어졌을 때, 해당 시각을 영어 텍스트 형식으로 출력하는 프로그램을 작성해 보겠습니다. 영어에서는 시각을 다음과 같이 특수한 방식으로 표현합니다.8:00 → eight o clock (여덟 시 정각)8:01 → one minute past eight (여덟 시 1분 지남)8:10 → ten minutes past eight (여덟 시 10분 지남)8:15 → quarter past eight (여덟 시 15분, quarter는 15분을 의미)8:30 → half pa

  9. 파이썬으로 배열에서 '좋은 쌍(Nice Pair)' 개수 계산하기

    문제 개요 음이 아닌 정수로 구성된 배열 nums가 주어졌을 때, 배열에 존재하는 좋은 쌍(nice pair)의 개수를 구하는 프로그램을 작성해 보겠습니다. 답이 매우 커질 수 있으므로, 최종 결과는 10^9 + 7로 나눈 나머지를 반환해야 합니다. 인덱스 쌍 (i, j)가 다음 두 조건을 모두 만족할 때 좋은 쌍이라고 정의합니다. 0 <= i < j < nums의 길이 nums[i] + rev(nums[j]) == nums[j] + rev(nums[i]) 참고: rev() 함수는 정수의 숫자만 뒤집습니다. 예를

  10. 파이썬으로 문자열과 모든 접미사의 유사도 합계 구하기 (Z-알고리즘)

    문자열 s가 주어졌을 때, 이 문자열과 자기 자신의 모든 접미사(suffix) 사이의 유사도 합계를 구하는 문제입니다. 여기서 두 문자열 간의 유사도란 두 문자열이 공통으로 가지는 가장 긴 접두사(prefix)의 길이를 의미합니다. 문제 예시 입력이 s = pqpqpp라고 가정해 보겠습니다. 이 문자열의 접미사는 pqpqpp, qpqpp, pqpp, qpp, pp, p로 총 6개이며, 각 접미사와 원본 문자열 pqpqpp의 유사도는 순서대로 6, 0, 3, 0, 1, 1입니다. 따라서 전체 합계는 다음과 같습니다. 6 + 0 + 3

  11. Python으로 두 문자열을 병합해 사전순으로 가장 큰 문자열 만들기

    문제 설명 두 개의 문자열 s와 t가 주어져 있다고 가정해 봅시다. 다음 규칙에 따라 merge라는 새로운 문자열을 만들어야 합니다. s 또는 t 중 하나라도 비어 있지 않은 동안, 아래 작업 중 하나를 반복적으로 수행합니다. s가 비어 있지 않으면, s의 첫 번째 문자를 merge 끝에 추가하고 s에서 제거합니다. t가 비어 있지 않으면, t의 첫 번째 문자를 merge 끝에 추가하고 t에서 제거합니다. 목표는 이렇게 만들 수 있는 병합 결과 중 사전순(lexicographically)으로 가장 큰 문자열을 찾는 것입니다. 예

  12. 파이썬으로 최소 절대 합 차이 구하기: 단 한 번의 원소 교체로 최적화하는 방법

    알고리즘 문제를 풀다 보면 배열 사이의 차이를 최소화해야 하는 상황을 자주 만나게 됩니다. 이번 글에서는 절대 합 차이(Absolute Sum Difference) 개념과, nums1 배열의 원소를 최대 한 번만 교체할 수 있을 때 이 값을 최소화하는 파이썬 풀이법을 알아보겠습니다.문제 정의같은 크기를 가진 두 개의 양수 배열 nums1과 nums2가 주어집니다. 이때 두 배열의 절대 합 차이는 다음과 같이 정의됩니다.|nums1[i] - nums2[i]| 의 합 (0 <= i < n, 0-인덱스 기준)여기서 우리는 nu

  13. Python으로 정확히 k개의 홀수를 포함하는 Nice 부분 배열 개수 구하기

    문제 소개 배열 nums와 정수 k가 주어졌다고 가정해 봅시다. 이때 nice 부분 배열의 개수를 구하는 것이 목표입니다. 부분 배열(subarray) 안에 정확히 k개의 홀수가 포함되어 있으면, 그 부분 배열을 nice 부분 배열이라고 정의합니다. 예를 들어, 입력이 nums = [1,1,2,1,1], k = 3이라면 출력은 2가 됩니다. 조건을 만족하는 부분 배열이 [1,1,2,1]과 [1,2,1,1] 두 개뿐이기 때문입니다. 접근 방법 이 문제는 다음 단계를 통해 해결할 수 있습니다. 홀수의 위치(인덱스)를 저장할 새 리스

  14. Python으로 가장 긴 피보나치 유사 부분 수열의 길이 찾기

    수열 X_1, X_2, ..., X_n이 다음 조건을 만족하면 피보나치 유사(fibonacci-like) 수열이라고 정의합니다.n >= 3모든 i + 2 <= n에 대해 X_i + X_i+1 = X_i+2 성립엄격하게 증가하는 배열 A가 하나의 수열을 이룬다고 할 때, A에서 가장 긴 피보나치 유사 부분 수열의 길이를 구해야 합니다. 만약 그러한 수열이 존재하지 않는다면 0을 반환합니다.예를 들어 입력이 A = [1,2,3,4,5,6,7,8]이라면 출력은 5가 됩니다. 이는 길이가 5인 수열 [1,2,3,5,8]이 존재하

  15. 파이썬(Python)으로 각 쿼리별 최대 XOR 값 구하는 프로그램

    크기가 n인 배열 nums와 하나의 값 m이 주어져 있다고 가정해 보겠습니다. 우리는 다음과 같은 작업을 n번 반복해서 수행해야 합니다.nums의 모든 원소와 k를 XOR 연산했을 때 결과가 최대가 되는 음이 아닌 정수 k(단, k < 2m)를 찾습니다. 이때 찾은 k가 i번째 쿼리의 답이 됩니다.현재 배열 nums에서 마지막 원소를 제거합니다.answer[i]가 i번째 쿼리의 답이 되도록 배열 answer를 완성합니다.예를 들어 입력이 nums = [0,1,1,3], m = 2라면 출력은 [0,3,2,3]이 됩니다. 그 과정

  16. Python 그리디 알고리즘으로 구매 가능한 아이스크림 최대 개수 구하기

    코딩 테스트에서 자주 등장하는 대표적인 그리디(Greedy) 문제를 Python으로 해결해 보겠습니다. 길이가 n인 costs 배열이 주어지며, 여기서 costs[i]는 i번째 아이스크림 막대의 가격을 의미합니다. 우리에게는 처음에 c개의 동전이 있으며, 이 동전으로 최대한 많은 아이스크림을 구매하는 것이 목표입니다.예를 들어 입력이 costs = [3,1,4,5,2], c = 10이라면 출력은 4가 됩니다. 인덱스 0, 1, 2, 4에 해당하는 아이스크림을 구매하면 총 가격이 3 + 1 + 4 + 2 = 10이 되어 정확히 예산

  17. 파이썬으로 k번 연산 후 요소의 최대 빈도 찾기 — 슬라이딩 윈도우 알고리즘

    문제 이해하기배열 nums와 정수 k가 주어졌다고 가정해 봅시다. 한 번의 연산에서는 nums의 인덱스를 하나 선택하여 해당 위치의 요소를 1만큼 증가시킬 수 있습니다. 우리의 목표는 최대 k번의 연산을 수행한 후 얻을 수 있는 특정 요소의 최대 빈도(maximum frequency)를 구하는 것입니다.예를 들어, nums = [8, 3, 6], k = 9인 경우를 살펴보겠습니다. 값 3을 5번 증가시키고, 값 6을 2번 증가시키면 배열이 [8, 8, 8]이 됩니다. 총 7번의 연산으로 세 요소가 모두 같아지므로, 이 경우 최대 빈

  18. 파이썬으로 알파벳 순서대로 모든 모음을 포함하는 가장 긴 부분 문자열 찾기

    문제 개요영어 모음으로만 이루어진 문자열 s가 주어졌을 때, 가장 긴 아름다운(beautiful) 부분 문자열의 길이를 찾는 프로그램을 작성해 보겠습니다. 만약 조건을 만족하는 부분 문자열이 존재하지 않는다면 0을 반환해야 합니다.문자열이 아름다운 문자열이 되려면 다음 두 가지 조건을 충족해야 합니다.5개의 모음(a, e, i, o, u)이 각각 최소 한 번 이상 나타나야 합니다.문자들이 알파벳 순서(a → e → i → o → u)로 정렬되어 있어야 합니다.예를 들어 입력이 s = "aaioaaaaeiiouuooaauu&

  19. 파이썬으로 목표값에 가장 가까운 부분 수열의 합 찾기

    배열 nums와 하나의 값 goal이 주어져 있다고 가정해 보겠습니다. 우리의 목표는 nums에서 부분 수열(subsequence)을 선택하여 그 합이 goal에 최대한 가깝도록 만드는 것입니다. 즉, 선택한 부분 수열의 합을 s라고 할 때, 절대 차이 |s - goal|를 최소화해야 합니다.예를 들어, 입력이 nums = [8,-8,16,-1], goal = -3이라면 출력은 2가 됩니다. 부분 수열 [8,-8,-1]을 선택하면 합이 -1이 되고, 이때 절대 차이는 |-1 - (-3)| = 2로 가능한 최솟값입니다.해결 접근 방법

  20. 파이썬(Python)으로 K-유사 문자열의 최소 스왑 횟수 K 구하기

    두 문자열 s와 t가 있다고 가정해 보겠습니다. 문자열 s 안에서 두 글자의 위치를 정확히 K번 교환(swap)했을 때 결과가 t와 같아진다면, s와 t는 K-유사(K-similar)하다고 정의합니다. 즉, 서로 애너그램(anagram) 관계인 두 문자열 s와 t가 주어졌을 때, 두 문자열이 K-유사가 되도록 만드는 가장 작은 K를 구하는 것이 이 문제의 목표입니다. 예를 들어 s = abc, t = bac라면, 첫 번째 문자 a와 두 번째 문자 b를 단 한 번만 바꾸면 되므로 출력은 1이 됩니다. 해결 전략: 너비 우선 탐색(BF

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