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

Python

  1. 파이썬으로 특정 날짜에 원하는 캔디를 먹을 수 있는지 확인하는 프로그램

    캔디 종류별 개수가 저장된 배열 candiesCount가 있다고 가정해 봅시다. 여기서 candiesCount[i]는 i번째 종류의 캔디가 몇 개 있는지를 나타냅니다. 또 다른 배열 queries도 주어지며, queries[i]는 [favoriteType_i, favoriteDay_i, dailyCap_i]라는 세 가지 값으로 구성됩니다. 문제의 규칙 0일차부터 캔디를 먹기 시작합니다. i번째 종류의 캔디는 앞선 0번부터 i-1번까지의 모든 캔디를 다 먹은 후에야 먹을 수 있습니다. 모든 캔디를 소진할 때까지 매일 최소 한 개

  2. Python으로 부분 배열의 최대 절대합을 구하는 방법

    nums라는 배열이 주어졌을 때, 부분 배열 [nums_l, nums_l+1, ..., nums_r-1, nums_r]의 절대합은 |nums_l + nums_l+1 + ... + nums_r-1 + nums_r|로 정의됩니다. 이때 nums의 모든 부분 배열 중에서 가장 큰 절대합을 찾아야 합니다. 단, 부분 배열은 빈 배열일 수도 있습니다.문제 예시예를 들어 입력이 nums = [2,-4,-3,2,-6]이라면 결과는 11입니다. 부분 배열 [2,-4,-3,2]의 절대합 |2 + (-4) + (-3) + 2| = 11이 모든 부분

  3. Python으로 모든 과목을 수강하기 위한 최소 학기 수 계산하기

    문제 설명n개의 서로 다른 과목이 있으며, 각 과목에는 1부터 n까지 번호가 붙어 있다고 가정해 보겠습니다. 또한 relations 배열이 주어지는데, relations[i]는 (선수과목_i, 후속과목_i) 쌍을 담고 있어 두 과목 사이의 선수 관계를 나타냅니다. 즉, 후속과목_i를 수강하려면 반드시 먼저 선수과목_i를 이수해야 합니다.마지막 매개변수인 k는 한 학기에 수강할 수 있는 최대 과목 수를 의미합니다. 단, 어떤 과목을 수강하려면 그 과목의 선수과목들을 이전 학기까지 모두 이수한 상태여야 합니다. 우리의 목표는 모든 과목

  4. Python으로 동일한 접두사와 접미사를 제거한 뒤 문자열의 최소 길이 구하기

    문제 개요문자열 s가 있으며, 이 문자열은 오직 세 가지 문자인 a, b, c로만 구성되어 있다고 가정해 보겠습니다. 우리는 다음 알고리즘을 원하는 만큼(0회 포함) 반복해서 적용할 수 있습니다.모든 문자가 서로 같은 비어 있지 않은 접두사(prefix)를 선택합니다.모든 문자가 서로 같은 비어 있지 않은 접미사(suffix)를 선택합니다.선택한 접두사와 접미사는 서로 겹쳐서는 안 됩니다(disjoint).접두사와 접미사를 구성하는 문자는 반드시 서로 같아야 합니다.선택한 접두사와 접미사를 문자열 s에서 모두 제거합니다.목표위 연산

  5. Python으로 세 개의 돌더미에서 최대 점수 구하는 프로그램

    문제 개요 세 개의 값 a, b, c가 주어져 있다고 가정해 봅시다. 우리는 크기가 각각 a, b, c인 세 개의 돌더미로 솔리테어 게임을 진행합니다. 매 턴마다 플레이어는 서로 다른 두 개의 비어 있지 않은 더미를 골라 각각에서 돌을 하나씩 꺼내고, 점수에 1점을 추가합니다. 비어 있지 않은 더미가 2개 미만으로 남으면 게임이 종료됩니다. 이때 얻을 수 있는 최대 점수를 구하는 것이 목표입니다. 예를 들어 입력이 a = 4, b = 4, c = 6이라면 출력은 7이 됩니다. 초기 상태는 (4, 4, 6)이며, 다음과 같은 순서로

  6. 파이썬으로 두 문자열의 사전순 최대 병합 찾기

    문제 이해하기두 개의 문자열 s와 t가 주어졌다고 가정해 봅시다. 우리는 다음 규칙에 따라 merge라는 새로운 문자열을 만들어야 합니다.s 또는 t 중 하나라도 비어 있지 않은 동안, 아래 두 가지 동작 중 하나를 선택해 수행합니다.s가 비어 있지 않다면, s의 첫 번째 문자를 merge 끝에 붙이고 해당 문자를 s에서 제거합니다.t가 비어 있지 않다면, t의 첫 번째 문자를 merge 끝에 붙이고 해당 문자를 t에서 제거합니다.이렇게 만들 수 있는 병합 문자열 중 사전순으로 가장 큰(lexicographically largest

  7. 파이썬으로 방정식의 최댓값 찾기: 투 포인터 알고리즘 완벽 가이드

    문제 개요2차원 평면 위의 좌표점들을 담은 배열 points가 있다고 가정해 보겠습니다. 이 배열은 x값을 기준으로 오름차순으로 정렬되어 있으며, 각 원소는 points[i] = (xi, yi) 형태로 표현됩니다. 즉, 모든 1 <= i < j <= 점의 개수에 대해 xi < xj가 성립합니다.여기에 추가로 하나의 정수 k가 주어졌을 때, 다음 방정식의 최댓값을 구하는 것이 목표입니다.yi + yj + |xi − xj|단, 이때 조건 |xi − xj| <= k 를 만족하는 점 쌍(1 <= i <

  8. 파이썬으로 동종(Homogeneous) 부분 문자열 개수 구하는 방법

    동종 부분 문자열이란? 주어진 문자열 s에서 동종(homogeneous) 부분 문자열의 총 개수를 구하는 문제입니다. 동종 문자열이란 문자열을 구성하는 모든 문자가 서로 동일한 경우를 의미합니다. 답이 매우 커질 수 있으므로 최종 결과는 10^9 + 7로 나눈 나머지를 반환해야 합니다. 예를 들어 입력 문자열이 s = "xyyzzzxx"라면 출력값은 13입니다. 해당 문자열에서 발견되는 동종 부분 문자열은 다음과 같습니다. "x" → 3회 등장 "xx" → 1회 등장 "

  9. Python으로 가방 속 공의 최소 페널티 찾기 – 이진 탐색 완전 정복

    문제 설명 정수 배열 nums가 주어지며, 각 원소 nums[i]는 i번째 가방에 들어 있는 공의 개수를 나타냅니다. 또한 연산을 수행할 수 있는 최대 횟수를 의미하는 값 mx가 함께 주어집니다. 우리가 사용할 수 있는 연산은 다음과 같습니다. 공이 든 가방 하나를 선택해, 각각 최소 한 개 이상의 공을 포함하도록 두 개의 새로운 가방으로 나눕니다. 페널티(penalty)란 모든 가방 중 가장 많은 공을 담고 있는 가방의 공 개수를 의미합니다. 연산을 최대 mx번까지 수행한 뒤 얻을 수 있는 최소 페널티를 구하는 것이 이 문제의

  10. Python으로 최대 k번의 인접 자릿수 교환으로 만들 수 있는 최소 정수 구하기

    매우 큰 정수를 나타내는 문자열 num과 정수 k가 주어진다고 가정해 봅시다. 우리는 인접한 두 자릿수를 서로 교환(swap)할 수 있으며, 이러한 교환은 최대 k번까지만 허용됩니다. 이때 만들 수 있는 가장 작은 정수를 구하는 것이 목표입니다.예를 들어 num = 5432, k = 4가 입력으로 주어지면 결과는 2453이 됩니다. 과정을 살펴보면 처음 숫자는 5432이고, 첫 번째 교환 후 4532, 다음 4523, 그다음 4253, 마지막 교환 후 2453이 됩니다.문제 해결 접근 방법이 문제는 그리디(Greedy) 방식으로 해

  11. Python으로 다른 배열의 하위 배열들을 연결하여 배열을 만들 수 있는지 확인하는 방법

    문제 설명2차원 배열 groups와 일반 배열 nums가 주어졌다고 가정해 보겠습니다. 우리가 확인해야 할 것은 nums 배열에서 서로 겹치지 않는 n개의 하위 배열을 순서대로 선택할 수 있는지 여부입니다. 이때 i번째 하위 배열은 groups[i](0-인덱스 기준)와 정확히 같아야 하며, i > 0인 경우 (i-1)번째 하위 배열이 nums에서 i번째 하위 배열보다 먼저 나타나야 합니다.예를 들어, 입력이 다음과 같다고 해봅시다.groups = [[2,-2,-2],[4,-3,0]]nums = [1,-1,0,2,-2,-2,4,

  12. 파이썬으로 Amal이 돌 가져오기 게임에서 승리할 수 있는지 확인하는 프로그램

    문제 개요Amal과 Bimal 두 플레이어가 돌 게임을 진행하며, Amal이 먼저 시작합니다. 처음에는 더미에 n개의 돌이 놓여 있습니다. 각 플레이어는 자신의 차례에 더미에서 0이 아닌 제곱수(1, 4, 9, 16, ...) 개만큼 돌을 가져가야 합니다. 더 이상 가져갈 돌이 없어 움직일 수 없게 된 플레이어가 패배합니다. 따라서 n이 주어졌을 때, 선공인 Amal이 이 게임에서 승리할 수 있는지 확인해야 합니다.예를 들어 입력이 n = 21이라면 결과는 True입니다. Amal이 먼저 16개를 가져가고, Bimal이 4개를 가져

  13. 파이썬으로 서비스 센터 최적 입지 찾기: 최소 유클리드 거리의 합 구하기

    여러 좌표 점(집들의 위치)이 담긴 리스트가 주어졌다고 가정해 봅시다. 이때 모든 집에서 서비스 센터까지의 유클리드 거리(Euclidean distance)의 합이 최소가 되도록 센터를 (xc, yc)에 설치하려면, 그 최소 거리의 합을 구하는 것이 문제입니다.예를 들어 입력이 positions = [(10,11),(11,10),(11,12),(12,11)]이라면, 출력은 4.0이 됩니다.문제 해결 접근 방식: 삼분 탐색(Ternary Search)거리의 합 함수는 볼록(convex)한 성질을 가지므로, x축과 y축 각각에 대해 삼

  14. 파이썬으로 겹치지 않는 부분 문자열의 최대 개수 찾기

    문제 소개 소문자로만 이루어진 문자열 s가 주어졌을 때, 아래 두 조건을 동시에 만족하는 비어 있지 않은 부분 문자열의 최대 개수를 구하는 프로그램을 만들어 보겠습니다. 선택한 부분 문자열들은 서로 겹치지 않아야 합니다. 어떤 부분 문자열에 특정 문자 ch가 포함되어 있다면, 원본 문자열에서 ch가 나타나는 모든 위치가 그 부분 문자열 범위 안에 포함되어야 합니다. 조건을 만족하는 부분 문자열의 개수를 최대화해야 하며, 같은 개수를 만족하는 해답이 여러 개라면 그중 총 길이가 가장 짧은 해답을 반환해야 합니다. 예시 확인 입력이

  15. 파이썬으로 모든 공을 각 상자에 모으기 위한 최소 이동 횟수 구하기

    이 문제에서는 boxes라는 이름의 이진 문자열이 주어집니다. 문자열에서 각 인덱스는 하나의 상자를 의미하며, boxes[i]가 0이면 i번째 상자가 비어 있다는 뜻이고, 1이면 해당 상자에 공이 하나 들어 있다는 뜻입니다.한 번의 연산으로 공 하나를 인접한 상자로 옮길 수 있으며, 연산 후에는 특정 상자에 여러 개의 공이 모여 있을 수도 있습니다. 우리가 구해야 할 것은 크기 n인 배열 answer로, answer[i]는 모든 공을 i번째 상자로 옮기는 데 필요한 최소 연산 횟수를 나타냅니다.문제 예시입력이 boxes = 1101

  16. 파이썬으로 목표 배열 만들기: 부분 배열 증가 연산의 최소 횟수 구하는 방법

    문제 설명 양의 정수로 이루어진 target(목표) 배열이 하나 주어집니다. 또한 크기가 같고 모든 원소가 0으로 채워진 initial(초기) 배열이 있다고 가정합니다. 우리는 아래와 같은 연산만을 반복해서 초기 배열을 목표 배열로 바꿔야 하며, 이때 필요한 최소 연산 횟수를 구해야 합니다. 연산 정의: 배열에서 임의의 부분 배열(연속된 구간)을 하나 선택하고, 그 구간에 속한 모든 값을 1씩 증가시킵니다. 입출력 예시 예를 들어 입력이 target = [2,3,4,3,2]라고 해보겠습니다. 이 경우 정답은 4입니다. 과정은

  17. Python으로 배열의 양끝에서 값을 선택해 곱셈 연산 후 최대 점수 찾기

    크기가 각각 n과 m(n ≥ m)인 두 개의 배열 nums와 multipliers가 있다고 가정해 보겠습니다. 두 배열은 모두 1부터 인덱싱되며, 초기 점수는 0입니다. 우리는 정확히 m번의 연산을 수행해야 하며, i번째 연산(1-indexed)에서는 다음과 같은 작업을 진행합니다.nums 배열의 시작 또는 끝에서 값 x를 하나 선택합니다.점수에 multipliers[i] * x를 더합니다.선택한 값 x를 nums 배열에서 제거합니다.목표는 m번의 연산을 모두 수행한 후 얻을 수 있는 최대 점수를 구하는 것입니다.예시예를 들어 nu

  18. 파이썬으로 최대 k개의 문자를 제거한 후 런 길이 인코딩(RLE)의 최소 길이 구하기

    문제 이해하기문자열 s와 정수 k가 주어졌을 때, s에서 최대 k개의 문자를 삭제하여 런 길이 인코딩(Run-Length Encoding) 결과물의 길이가 최소가 되도록 만드는 문제입니다.런 길이 인코딩은 연속으로 반복되는 동일한 문자(2회 이상)를 문자 + 반복 횟수 형태로 압축하는 방식입니다. 예를 들어 문자열 xxyzzz는 xx가 x2로, zzz가 z3으로 치환되어 최종적으로 x2yz3이라는 압축 문자열이 됩니다. 따라서 이 문제의 목표는 최대 k개의 문자를 삭제한 후 얻을 수 있는 런 길이 인코딩 결과의 최소 길이를 구하는

  19. Python으로 두 배열의 모든 유효한 경로 중 최대 점수를 구하는 프로그램

    두 개의 배열 nums1과 nums2가 주어졌다고 가정해 보겠습니다. 여기서 유효한 경로(valid path)는 다음과 같이 정의됩니다.nums1 또는 nums2 중 하나를 선택하여 인덱스 0부터 탐색을 시작합니다.선택한 배열을 왼쪽에서 오른쪽 방향으로 순회합니다.순회 도중 현재 값이 두 배열 모두에 존재하는 값이라면, 그 지점에서 다른 배열로 경로를 전환할 수 있습니다. 이때 점수(score)는 유효한 경로에 포함된 고유한 값들의 합으로 정의되며, 우리는 가능한 모든 유효한 경로 중에서 얻을 수 있는 최대 점수를 구해야 합니다.

  20. Python으로 가장 긴 '멋진 부분 문자열(Awesome Substring)'의 길이 찾기

    숫자로 이루어진 문자열 s가 주어졌다고 가정해 봅시다. 여기서 멋진 부분 문자열(Awesome Substring)이란, 문자들의 순서를 원하는 만큼 서로 교환(swap)했을 때 회문(palindrome)으로 만들 수 있는 비어 있지 않은 부분 문자열을 의미합니다. 우리의 목표는 문자열 s에서 가장 긴 멋진 부분 문자열의 길이를 구하는 것입니다.예를 들어 입력이 s = 4353526이라면 출력은 5가 됩니다. 왜냐하면 35352가 가장 긴 멋진 부분 문자열이며, 이를 35253처럼 재배열하면 회문이 되기 때문입니다.핵심 아이디어어떤

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:359/450  20-컴퓨터/Page Goto:1 353 354 355 356 357 358 359 360 361 362 363 364 365