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

Python

  1. 파이썬으로 불행한 친구의 수를 세는 프로그램 구현하기

    문제 개요짝수 명수인 n명의 서로 다른 친구에 대한 선호도 목록이 주어졌다고 가정해 보겠습니다. 각 사람 i에 대해 preferences[i]는 선호 순서대로 정렬된 친구 목록을 담고 있으며, 목록에서 앞쪽에 위치한 친구일수록 더 선호되는 친구입니다. 각 목록의 친구들은 0부터 n-1까지의 정수로 번호가 매겨집니다.모든 친구는 서로 다른 쌍으로 나뉘며, pairs[i] = [x, y]는 x와 y가 서로 짝을 이루었음을 의미합니다. 이때 어떤 친구 x는 다음 두 조건을 모두 만족하는 친구 u가 존재할 경우 불행한(unhappy) 상태

  2. 파이썬으로 모든 점을 최소 비용으로 연결하는 프로그램 – 프림 알고리즘 풀이

    문제 개요(x, y) 형태의 좌표로 이루어진 배열 points가 주어졌다고 가정해 보겠습니다. 두 점 (xi, yi)와 (xj, yj)를 연결할 때 드는 비용은 두 점 사이의 맨해튼 거리(Manhattan Distance)이며, 공식은 다음과 같습니다.|xi − xj| + |yi − yj|우리가 구해야 할 값은 바로 모든 점을 서로 연결하기 위한 최소 비용입니다.예시입력이 다음과 같다고 가정해 봅시다.points = [(0,0), (3,3), (2,10), (6,3), (8,0)]이 경우 출력은 22가 됩니다. 선택된 간선들의 비용

  3. Python에서 모든 순열 중 요청 구간 합의 최댓값을 구하는 프로그램

    문제 소개 배열 nums와 요청 배열 requests가 주어졌다고 가정해 보겠습니다. 각 요청은 requests[i] = [start_i, end_i] 형태로 표현되며, i번째 요청은 nums[start_i] + nums[start_i+1] + ... + nums[end_i]의 구간 합을 의미합니다. 우리가 구해야 할 것은 nums의 모든 순열 중에서 모든 요청의 총합이 최대가 되는 값입니다. 답이 매우 커질 수 있으므로 109+7로 나눈 나머지를 반환해야 합니다. 예를 들어 입력이 다음과 같다고 해보겠습니다. nums = [10

  4. 파이썬으로 배열의 합이 P로 나누어떨어지도록 만드는 최소 부분 배열 찾기

    문제 설명배열 nums와 정수 p가 주어졌을 때, 남은 값들의 합이 p로 나누어떨어지도록 가장 짧은 부분 배열(단, 전체 배열은 제외)을 제거해야 합니다. 우리가 구해야 할 것은 제거해야 하는 부분 배열의 최소 길이이며, 조건을 만족하는 부분 배열이 존재하지 않는다면 -1을 반환합니다.예를 들어 입력이 nums = [8,2,6,5,3], p = 7이라면 출력은 1이 됩니다. 값 3을 제거하면 전체 합이 24 - 3 = 21이 되고, 21은 7로 나누어떨어지기 때문입니다.해결 접근 방법이 문제는 누적 합(prefix sum)과 모듈로

  5. 파이썬으로 문자열을 고유한 부분 문자열의 최대 개수로 분할하는 방법

    문제 개요 문자열 s가 주어졌을 때, 이 문자열을 분할하여 만들 수 있는 고유한(중복되지 않는) 부분 문자열의 최대 개수를 구하는 프로그램을 작성해 보겠습니다. 문자열 s는 비어 있지 않은 부분 문자열들의 목록으로 분할할 수 있으며, 이 부분 문자열들을 순서대로 이어 붙였을 때 원래 문자열이 되어야 합니다. 단, 모든 부분 문자열은 서로 달라야 한다는 조건이 있습니다. 예를 들어 s = "pqpqrrr"인 경우 정답은 5입니다. [p, q, pq, r, rr]처럼 분할하면 모든 부분 문자열이 고유하기 때문입니다.

  6. 파이썬으로 행렬 경로의 음수가 아닌 최대 곱 찾기

    m × n 크기의 행렬이 하나 주어져 있다고 가정해 보겠습니다. 시작 지점은 왼쪽 위 모서리 셀인 (0, 0)이며, 매 단계마다 행렬 안에서 오른쪽 또는 아래 방향으로만 이동할 수 있습니다. 이때 왼쪽 위 (0, 0)에서 오른쪽 아래 모서리 (m-1, n-1)까지 이어지는 모든 가능한 경로 가운데, 경로에 놓인 값들의 곱이 음수가 아니면서 최대가 되는 경로를 찾아야 합니다. 만약 결과값이 너무 커진다면, 최대 곱을 109+7로 나눈 나머지를 반환하면 됩니다.문제 예제예를 들어 입력이 다음과 같은 3×3 행렬이라고 해보겠습니다.2-4

  7. 파이썬으로 행 합과 열 합이 주어진 유효한 행렬 찾기

    문제 개요음수가 아닌 값으로 이루어진 두 배열 rowSum과 colSum이 주어집니다. 여기서 rowSum[i]는 2차원 행렬의 i번째 행에 있는 원소들의 합을, colSum[j]는 j번째 열에 있는 원소들의 합을 의미합니다. 목표는 이 두 조건을 모두 만족하는, 크기가 (rowSum의 길이 × colSum의 길이)인 음수가 아닌 값의 행렬을 하나 찾는 것입니다.예를 들어 입력이 rowSum = [13, 14, 12], colSum = [9, 13, 17]이라면 다음과 같은 행렬이 정답이 될 수 있습니다.9400950012실제로 각

  8. Python으로 도시 네트워크의 최대 랭크(Maximal Network Rank) 구하기

    n개의 도시가 있고, 이 도시들을 연결하는 여러 개의 도로가 있다고 가정해 보겠습니다. 각 roads[i] = [u, v]는 도시 u와 도시 v 사이에 양방향 도로가 존재함을 의미합니다.여기서 네트워크 랭크(network rank)란 두 도시 중 하나에 직접 연결된 도로의 총 개수를 말합니다. 단, 하나의 도로가 두 도시 모두에 직접 연결되어 있는 경우에는 한 번만 계산합니다. 그리고 최대 네트워크 랭크(maximal network rank)는 서로 다른 도시 쌍들 중에서 가장 큰 네트워크 랭크 값을 의미합니다.예를 들어 다음과 같

  9. Python으로 겹치지 않는 k개 선분 집합의 개수 구하는 프로그램

    문제 개요수직선 위에 n개의 점이 있다고 가정해 보겠습니다. i번째 점(0부터 n-1까지)은 위치 x = i에 놓여 있습니다. 이때 각 선분이 두 개 이상의 점을 포함하도록 하면서, 정확히 k개의 서로 겹치지 않는 선분을 그릴 수 있는 경우의 수를 구해야 합니다.각 선분의 양 끝점은 반드시 정수 좌표여야 하며, k개의 선분이 모든 n개의 점을 덮을 필요는 없습니다. 또한 선분끼리 끝점을 공유하는 것도 허용됩니다. 만약 답이 너무 커진다면 10^9 + 7로 나눈 나머지를 반환하면 됩니다.예시입력이 n = 4, k = 2라고 가정해 봅

  10. Python으로 연산을 적용해 얻을 수 있는 사전순 최소 문자열 찾기

    문제 개요숫자로만 이루어진 문자열 s와 두 개의 정수 a, b가 주어졌다고 가정해 봅시다. 우리는 문자열 s에 대해 다음 두 가지 연산을 원하는 만큼, 임의의 순서로 적용할 수 있습니다.문자열 s의 홀수 인덱스(0부터 시작)에 위치한 모든 자릿수에 a를 더합니다. 만약 더한 결과가 9를 초과하면 0부터 다시 순환(cycle)됩니다.문자열 s를 오른쪽으로 b칸 회전시킵니다.이때 위 연산들을 몇 번이든 적용했을 때 얻을 수 있는 문자열 중 사전순(lexicographically)으로 가장 작은 문자열을 찾아야 합니다.예제 확인예를 들어

  11. 파이썬으로 충돌 없이 최고 점수의 팀 구성하는 프로그램 만들기

    문제 이해하기 농구 경기에 참가하는 선수들을 대상으로 최고의 팀을 구성하는 문제를 살펴보겠습니다. 두 개의 리스트 scores와 ages가 주어지며, 여기서 scores[i]와 ages[i]는 i번째 선수의 점수와 나이를 나타냅니다. 우리의 목표는 팀 전체 점수(모든 선수 점수의 합)가 가장 높은 팀을 선택하는 것입니다. 다만 한 가지 중요한 제약 조건이 있습니다. 바로 게임 내에서 충돌(conflict)이 발생하면 안 된다는 점입니다. 충돌이란 더 어린 선수의 점수가 더 나이 많은 선수의 점수보다 엄격하게 높은 경우를 의미합니다.

  12. Python으로 최소 노력 경로 찾기: 다익스트라 알고리즘 활용하기

    문제 설명 m × n 크기의 2차원 행렬 heights가 있다고 가정해 봅시다. heights[i][j]는 셀 (i, j)의 높이를 나타냅니다. 우리는 왼쪽 위 셀인 (0, 0)에서 출발하여 오른쪽 아래 끝 셀인 (m-1, n-1)까지 이동하려고 하며, 상·하·좌·우 네 방향으로 자유롭게 움직일 수 있습니다. 여기서 경로의 노력(effort)이란 경로상에서 연속된 두 셀 사이 높이 차이의 절댓값 중 최댓값을 의미합니다. 따라서 목적지에 도달하는 데 필요한 노력의 최솟값을 구하는 것이 이 문제의 목표입니다. 예시 입력이 다음과 같다

  13. Python으로 두 문자열에서 한 글자만 다른 부분 문자열 개수 구하기

    문제 이해하기 두 문자열 s와 t가 주어졌다고 가정해 봅시다. 우리가 구해야 하는 값은, s에서 비어 있지 않은 부분 문자열을 하나 골라 그 안의 정확히 한 글자를 다른 문자로 바꾸었을 때, 그 결과가 t의 부분 문자열 중 하나와 일치하게 되는 모든 경우의 수입니다. 예시로 살펴보기 입력이 s = sts, t = tsts라고 한다면 정답은 6입니다. 한 글자만 차이 나는 s와 t의 부분 문자열 쌍은 다음과 같습니다. s[0]의 s ↔ t[0]의 t s[0]의 s ↔ t[2]의 t s[1]의 t ↔ t[1]의 s s[1]의 t ↔

  14. Python으로 사전순 정렬된 모음 문자열 개수 구하는 프로그램

    문제 소개 숫자 n이 주어졌을 때, 모음(a, e, i, o, u)으로만 이루어진 길이 n의 문자열 중에서 사전순(lexicographical order)으로 정렬된 문자열의 개수를 구하는 프로그램을 만들어 보겠습니다. 여기서 문자열 s가 사전순으로 정렬되어 있다는 것은, 모든 유효한 인덱스 i에 대해 s[i]가 s[i+1]과 같거나 알파벳 순서상 그보다 앞에 위치한다는 뜻입니다. 예를 들어 n = 2가 입력으로 주어지면 출력은 15가 됩니다. ["aa", "ae", "ai",

  15. Python으로 문자열의 문자 빈도를 모두 고유하게 만들기 위한 최소 삭제 횟수 구하기

    문제 개요문자열 s가 주어졌을 때, 서로 다른 두 문자가 같은 빈도(등장 횟수)를 가지지 않으면 이 문자열을 좋은(good) 문자열이라고 정의합니다. 즉, 모든 문자의 등장 횟수가 서로 달라야 한다는 조건입니다.우리의 목표는 주어진 문자열을 좋은 문자열로 만들기 위해 삭제해야 하는 문자의 최소 개수를 구하는 것입니다.예시입력이 s = ssstttuu라고 가정해 보겠습니다. 현재 상태에서 s는 3번, t는 3번, u는 2번 등장하므로 s와 t의 빈도가 같아 좋은 문자열이 아닙니다.t 하나를 삭제하면 s: 3, t: 2, u: 2가 되

  16. 파이썬(Python)으로 배열 양 끝 요소를 제거해 X를 0으로 만드는 최소 연산 횟수 구하기

    문제 설명nums라는 배열과 값 x가 주어졌다고 가정해 봅시다. 한 번의 연산에서는 배열의 가장 왼쪽 또는 가장 오른쪽 요소를 삭제하고, 그 값을 x에서 뺄 수 있습니다. 우리의 목표는 x를 정확히 0으로 만들기 위해 필요한 최소 연산 횟수를 구하는 것이며, 만약 불가능하다면 -1을 반환해야 합니다.예시 이해하기예를 들어 nums = [4,2,9,1,4,2,3], x = 9라고 입력이 주어지면 출력은 3이 됩니다. 과정은 다음과 같습니다.먼저 가장 왼쪽 요소 4를 삭제합니다. 배열은 [2,9,1,4,2,3]이 되고, x는 5가 됩니

  17. 파이썬으로 길이 n과 숫자 값 k를 만족하는 사전순 최소 문자열 찾기

    문제 개요두 개의 값 n과 k가 주어졌다고 가정해 봅시다. 우리는 길이가 n이고 숫자 값이 k인 문자열 중에서 사전순(lexicographically)으로 가장 작은 문자열을 찾아야 합니다.여기서 소문자 알파벳의 숫자 값은 알파벳 순서상의 위치(1부터 시작)를 의미합니다. 즉, 문자 a의 숫자 값은 1, b는 2와 같은 식이며, 마지막 문자 z는 26입니다. 그리고 소문자로 이루어진 문자열의 숫자 값은 문자열에 포함된 모든 문자의 숫자 값의 합으로 정의됩니다.예시입력이 n = 4, k = 16일 때 출력 결과는 aaam입니다. 숫자

  18. 파이썬(Python)으로 '공정한 배열'을 만드는 인덱스 개수 구하기

    문제 소개nums라는 배열이 주어졌다고 가정해 봅시다. 우리는 정확히 하나의 인덱스를 골라 그 위치의 요소를 제거할 수 있습니다. 이때 제거된 요소 뒤에 있던 요소들은 한 칸씩 앞으로 당겨지면서 인덱스가 변경됩니다.배열에서 홀수 인덱스 값들의 합과 짝수 인덱스 값들의 합이 서로 같을 때, 이 배열을 공정한(fair) 배열이라고 정의합니다. 우리가 구해야 할 것은, 하나의 요소를 제거한 뒤 배열이 공정해지도록 만들 수 있는 인덱스의 개수입니다.예시 확인하기입력이 nums = [5, 3, 7, 2]일 때 출력은 1입니다. 각 인덱스를

  19. 파이썬으로 선호하는 음식 패킷을 받지 못하는 사람의 수 구하기

    어떤 컨퍼런스에 두 가지 유형의 사람들이 있다고 가정해 보겠습니다. 한 유형은 채식(vegetarian) 식사를 선호하고, 다른 유형은 비채식(non-vegetarian) 식사를 선호합니다. 그런데 음식 패킷의 수는 제한되어 있어서, 채식주의자가 비채식 패킷을 받게 되거나 그 반대의 경우에는 해당 패킷을 거절하고 자신이 원하는 패킷을 받을 때까지 기다립니다.여기서 두 가지 유형의 패킷과 사람은 각각 0 = 채식, 1 = 비채식으로 표현합니다. 프로그램에는 두 개의 배열이 주어집니다. 하나는 0과 1로 표시된 n개의 음식 패킷 목록이

  20. 파이썬으로 연결 리스트 구간 삭제 후 다른 리스트 병합하기

    문제 개요길이가 각각 m과 n인 두 개의 연결 리스트 L1과 L2가 있고, 위치를 나타내는 값 a와 b가 주어집니다. 이때 L1의 a번째 노드부터 b번째 노드까지를 제거한 뒤, 그 자리에 L2 전체를 끼워 넣어 하나의 리스트로 병합해야 합니다.예를 들어 입력이 다음과 같다고 가정해 보겠습니다.L1 = [1,5,6,7,1,6,3,9,12]L2 = [5,7,1,6]a = 3, b = 6이 경우 L1의 3번째 노드(7)부터 6번째 노드(6)까지가 제거되고, 그 사이에 L2가 들어가므로 출력은 [1, 5, 6, 5, 7, 1, 6, 9,

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