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

Python

  1. 파이썬(Python)으로 두 배 쌍 배열 찾는 프로그램 구현하기

    길이가 짝수인 배열 nums가 주어졌다고 가정해 봅시다. 이 배열을 적절히 재배열하여 모든 인덱스 0 <= i < len(nums)/2에 대해 다음 조건을 만족할 수 있는지 확인하는 것이 목표입니다.nums[2*i + 1] = 2*nums[2*i]즉, 배열을 [x, 2x] 형태의 쌍들로 완전히 나눌 수 있는지 판별하는 문제입니다. 예를 들어 입력이 nums = [4,-2,2,-4]라면, [-4, -2]와 [2, 4] 두 쌍으로 묶을 수 있으므로 출력은 True가 됩니다.문제 해결 접근 방법그리디(Greedy) 방식과 카운

  2. 파이썬으로 버킷 속 공들 사이의 최소 힘을 최대화하는 프로그램

    문제 이해하기여러 개의 버킷과 x개의 공이 주어진 상황을 가정해 보겠습니다. 공을 버킷에 넣으면 공들 사이에 특수한 힘이 작용하는데, 우리는 이 힘의 최솟값을 최대화하는 방법을 찾아야 합니다. 위치 p와 q에 있는 두 공 사이의 힘은 |p − q|로 정의됩니다.입력으로는 버킷들의 위치를 담고 있는 배열과 공의 개수 x가 주어지며, 가능한 모든 배치 중에서 두 공 사이의 최소 힘이 가장 커지도록 공을 배치해야 합니다.예시입력이 다음과 같다고 해봅시다.pos = [2, 4, 6, 8, 10, 12], x = 3이 경우 출력은 4입니다.

  3. Python으로 배열에서 크기 k의 가장 경쟁력 있는 부분 수열 찾기

    배열 nums와 값 k가 주어졌을 때, nums에서 크기가 k인 가장 경쟁력 있는 부분 수열(most competitive subsequence)을 찾아야 합니다.여기서 부분 수열 s1이 같은 크기의 부분 수열 s2보다 더 경쟁력이 있다는 것은, 두 수열이 처음으로 서로 다른 위치에서 s1의 숫자가 s2의 해당 숫자보다 작다는 의미입니다.예제 이해하기입력이 nums = [4,6,3,7], k = 2라고 가정해 보겠습니다. 크기 2인 모든 부분 수열은 다음과 같습니다.{[4,6], [4,3], [4,7], [6,3], [6,7], [

  4. 파이썬으로 두 문자열을 분할해 회문 만들기 – 구현 방법과 예제

    길이가 서로 같은 두 문자열 a와 b가 있다고 가정해 보겠습니다. 임의의 인덱스를 하나 선택해 두 문자열을 모두 해당 위치에서 분할합니다. 이때 문자열 a는 a_pref와 a_suff로 나뉘어 a = a_pref | a_suff를 만족하고(|는 연결 연산자), 문자열 b 역시 b_pref와 b_suff로 나뉘어 b = b_pref + b_suff가 됩니다. 우리가 확인해야 할 것은 a_pref + b_suff 또는 b_pref + a_suff가 회문(palindrome)을 이루는지 여부입니다. 단, 분할 지점은 자유롭게 정할 수

  5. 파이썬으로 보완 배열(Complementary Array)을 만드는 최소 이동 횟수 구하기

    짝수 길이의 배열 nums와 하나의 값 limit이 주어져 있다고 가정해 봅시다. 한 번의 이동(move)으로 nums 안의 임의의 값을 1부터 limit까지(양 끝값 포함) 범위에 있는 다른 값으로 교체할 수 있습니다.모든 인덱스 i에 대해 nums[i] + nums[n-1-i]가 서로 동일한 값을 가질 때, 이 배열을 보완 배열(complementary)이라고 부릅니다. 즉, 배열의 양끝에서부터 짝지은 요소들의 합이 전부 같아야 한다는 의미입니다. 우리가 구해야 하는 것은 nums를 보완 배열로 만들기 위해 필요한 최소 이동 횟

  6. Python으로 부분 배열이 등차수열로 재배열 가능한지 확인하는 프로그램

    문제 개요숫자로 이루어진 배열 nums와 두 개의 배열 l, r이 있다고 가정해 봅시다. 이때 l과 r은 각각 [l[i], r[i]] 형태의 범위 쿼리를 나타냅니다. 우리가 구해야 할 것은 불리언 배열 ans로, 부분 배열 nums[l[i]], nums[l[i]+1], ..., nums[r[i]]를 재배열하여 등차수열을 만들 수 있다면 ans[i]는 True, 그렇지 않다면 False가 됩니다.여기서 등차수열이란 최소 두 개 이상의 요소로 구성되며, 인접한 두 요소 사이의 차이(공차)가 모두 동일한 수열을 의미합니다. 예를 들어 [

  7. 파이썬으로 풀어보는 파쿠르 문제: 도달할 수 있는 가장 먼 건물 찾기

    문제 정의높이가 서로 다른 n개의 건물이 있고, 한 명의 파쿠르 예술가가 벽돌과 사다리를 이용해 건물 사이를 이동하려고 합니다. 각 건물의 높이는 배열로 주어지며, 벽돌 하나의 길이는 1입니다. 사다리와 벽돌은 각각 한 번씩만 사용할 수 있으며, 이 예술가가 도달할 수 있는 가장 먼 건물의 위치를 구해야 합니다.예를 들어 heights = [5, 8, 7, 6, 2, 3, 1, 4], bricks = 3, ladders = 2가 입력으로 주어지면 출력은 7이 됩니다.이동 과정 살펴보기예술가는 0번 건물에서 출발합니다.벽돌 3개를 모

  8. 파이썬으로 가치가 감소하는 색상 공을 판매해 최대 수익 구하는 프로그램

    문제 이해하기 inventory라는 배열이 주어져 있다고 가정해 봅시다. 여기서 inventory[i]는 처음에 보유하고 있는 i번째 색상 공의 개수를 나타냅니다. 그리고 고객이 구매하려는 공의 총 개수를 뜻하는 orders 값도 있습니다. 공은 어떤 순서로든 판매할 수 있으며, 고객은 어떤 색상의 공이든 상관없이 원합니다. 이 문제에서 공의 가치는 독특한 규칙을 따릅니다. 각 색상 공의 가치는 현재 재고에 남아 있는 해당 색상 공의 개수와 같습니다. 예를 들어 지금 파란 공이 6개 있다면, 첫 번째 파란 공은 가격 6에 판매됩니

  9. Python으로 문자열 균형을 맞추는 최소 삭제 횟수 찾기

    s와 t 두 문자로만 이루어진 문자열 s가 있다고 가정해 봅시다. 문자열을 균형 잡힌 상태로 만들기 위해 임의의 개수만큼 문자를 삭제할 수 있습니다.문제 이해하기문자열 s가 균형 잡혔다(balanced)는 것은 i < j이면서 s[i] = t이고 s[j] = s를 만족하는 인덱스 쌍 (i, j)이 존재하지 않는 경우를 의미합니다. 쉽게 말해, 어떤 s보다 앞쪽에 t가 나타나서는 안 된다는 뜻입니다. 우리가 구해야 할 값은 s를 균형 잡히게 만들기 위해 필요한 최소 삭제 횟수입니다.예를 들어 입력이 s = sststtst라면 출

  10. Python으로 관람차 수익 극대화를 위한 최소 회전 횟수 구하기

    관람차에 객실이 4개 있고, 각 객실에는 승객 4명씩 탑승할 수 있다고 가정해 보겠습니다. 관람차는 반시계 방향으로 회전하며, 한 번 회전할 때마다 run만큼의 운영 비용이 발생합니다. 배열 cust에는 n개의 값이 담겨 있으며, i번째 값은 i번째 회전 직전에 탑승을 기다리는 사람의 수를 나타냅니다. 승객은 탑승할 때마다 board만큼의 요금을 지불하며, 이 요금은 반시계 방향 한 번의 회전에 해당하는 금액입니다. 또한 대기 줄에 있는 사람들은 어느 객실에든 빈자리가 있다면 더 이상 기다리게 해서는 안 됩니다. 그렇다면 주어진

  11. Python으로 집에 도달하기 위한 최소 점프 횟수 찾기

    금지된 위치를 나타내는 배열 forbidden이 있다고 가정해 보겠습니다. 여기서 forbidden[i]는 벌레(bug)가 해당 위치로 점프할 수 없음을 의미하며, 추가로 세 값 a, b, x가 주어집니다. 벌레의 집은 수직선 위의 위치 x에 있고, 벌레는 처음에 위치 0에서 출발합니다. 벌레는 아래 규칙에 따라 점프할 수 있습니다.정확히 a만큼 앞쪽(오른쪽)으로 점프할 수 있습니다.정확히 b만큼 뒤쪽(왼쪽)으로 점프할 수 있습니다.뒤로 두 번 연속해서 점프할 수 없습니다.배열에 지정된 금지된 위치로는 점프할 수 없습니다.집보다 더

  12. 파이썬(Python)으로 가족 상속 순서 계산하는 프로그램 구현하기

    여러 세대로 구성된 가족이 있다고 가정해 봅시다. 아버지와 그의 자녀들, 그리고 자녀들의 할머니까지 한데 모인 가족처럼 말입니다. 하지만 어떤 가족에서든 출생과 사망은 반복되기 마련입니다. 가족 안에서 최연장자는 가장(head)으로 불립니다. 가장이 사망하면 직계 후계자인 자녀가 새로운 가장 자리를 승계합니다. 우리는 세 가지 함수를 구현해야 합니다. 첫 번째 함수는 가족에게 자녀가 태어났을 때 사용되며, 부모의 이름과 자녀의 이름을 입력받아 기록에 추가하는 역할을 합니다. 두 번째 함수는 가족 구성원이 사망했을 때 사용됩니다.

  13. 파이썬으로 다른 점이 포함되지 않는 가장 넓은 수직 영역 구하기

    문제 개요n개의 점이 좌표 (x, y) 형태로 주어졌다고 가정해 봅시다. 여기서 수직 영역(vertical area)이란 y축 방향으로 무한히 뻗어 있는 영역을 의미합니다. 우리가 구해야 할 것은 두 점 사이에 존재하는 수직 영역 중, 그 내부에 어떤 점도 포함되지 않으면서 폭이 가장 넓은 영역입니다.예를 들어 입력이 다음과 같다면,pts = [[10,9],[11,11],[9,6],[11,9]]출력 결과는 1이 됩니다.아래 그림에서 빨간색과 파란색으로 표시된 영역이 최적의 답이며, 해당 영역 안에는 어떤 점도 존재하지 않습니다.접근

  14. Python으로 두 문자열이 '가까운' 문자열인지 판별하는 프로그램

    문제 이해하기두 개의 문자열 s와 t가 주어졌을 때, 이 두 문자열이 서로 가까운(close) 관계인지 확인하는 프로그램을 작성해 보겠습니다. 두 문자열이 가깝다고 판단하려면, 아래 두 가지 연산만으로 한 문자열을 다른 문자열로 변환할 수 있어야 합니다.문자열 내에 이미 존재하는 임의의 두 문자를 서로 맞바꿉니다. (예: abcde → aecdb)한 문자의 모든 등장 위치를 다른 기존 문자로 일괄 변경하고, 그 반대도 동시에 적용합니다. (예: aacabb → bbcbaa — 모든 a는 b로, 모든 b는 a로 변환)이 연산들은 어느

  15. 파이썬으로 앞·중간·뒤에서 삽입과 삭제가 가능한 큐 구현하기

    문제 개요큐(queue)의 앞(front), 중간(middle), 뒤(back) 세 위치에서 모두 값을 삽입(push)하고 삭제(pop)할 수 있는 자료구조를 구현해야 한다고 가정해 보겠습니다.세 가지 위치 각각에 대해 삽입 함수와 삭제 함수를 한 쌍씩 만들고, 추가로 현재 큐의 전체 상태를 확인할 수 있는 함수도 함께 구현합니다.입력 예시push_from_back(10)push_from_back(20)push_from_front(30)push_from_middle(40)push_from_front(50)show_queue()pop

  16. 파이썬으로 그리드 상자에서 공이 떨어지는 위치 찾기

    문제 설명m × n 크기의 격자 상자가 주어져 있다고 가정해 보겠습니다. 각 칸에는 대각선 방향으로 기울어진 판이 하나씩 놓여 있으며, 판은 왼쪽 위 → 오른쪽 아래 방향이거나 오른쪽 위 → 왼쪽 아래 방향입니다. 상자 맨 윗줄에서 공을 하나씩 넣었을 때, 그 공이 상자 바닥까지 무사히 도달하는지 확인해야 합니다.격자는 행렬 형태로 주어집니다. 칸의 값이 1이면 해당 판은 왼쪽 위에서 오른쪽 아래로 향하고, 값이 -1이면 오른쪽 위에서 왼쪽 아래로 향합니다. n개의 공을 상자에 넣을 때, 각 공이 최종적으로 빠져나가는 열 번호를 구

  17. Python으로 풀어보는 집 페인팅 최소 비용 문제

    문제 소개 작은 도시에 일렬로 늘어선 m개의 집이 있다고 가정해 보겠습니다. 각 집은 n가지 색상(1부터 n까지 번호가 매겨짐) 중 하나로 반드시 칠해야 하며, 일부 집은 이미 칠해져 있어 다시 칠할 필요가 없습니다. 여기서 이웃(neighborhood)은 인접한 집들 중 같은 색으로 연속되어 묶인 그룹을 의미합니다. 배열 houses에서 houses[i]는 i번째 집의 현재 색상을 나타내고, 값이 0이면 아직 칠해지지 않았음을 뜻합니다. 2차원 배열 cost에서 cost[i][j]는 i번째 집을 j+1번 색으로 칠할 때 드는 비용

  18. 파이썬으로 집과 가장 가까운 우편함 사이의 최소 총 거리 구하기

    거리를 따라 위치한 집들을 나타내는 houses 배열과 우편함 개수 k가 주어졌다고 가정해 봅시다. 여기서 houses[i]는 거리 위에 있는 i번째 집의 좌표를 의미합니다. 우리는 이 거리에 k개의 우편함을 배치해야 하며, 각 집에서 가장 가까운 우편함까지의 거리 합이 최소가 되도록 만들어야 합니다.문제 예시 이해하기입력이 houses = [6, 7, 9, 16, 22], k = 2라고 해보겠습니다. 이때 정답은 9입니다. 7과 18 위치에 우편함을 설치하면 각 집에서 가장 가까운 우편함까지의 거리 합은 다음과 같습니다.|6−7|

  19. Python으로 트리 노드의 K번째 조상 찾는 프로그램

    n개의 노드(0부터 n-1까지 번호가 매겨짐)로 구성된 트리가 있다고 가정해 보겠습니다. 트리는 parent 배열로 주어지며, parent[i]는 노드 i의 부모 노드를 나타냅니다. 트리의 루트는 0번 노드입니다. 우리가 해야 할 일은 주어진 노드의 k번째 조상을 찾는 것이고, 만약 해당 조상이 존재하지 않는다면 -1을 반환하면 됩니다.예를 들어 입력이 다음과 같다고 해보겠습니다.그렇다면 출력은 2가 됩니다. 노드 6의 첫 번째 조상은 5이고, 두 번째 조상은 2이기 때문입니다.문제 해결 접근 방식이 문제는 단순히 k번 반복하며 부

  20. Python으로 그래프의 최소 신장 트리(MST)에서 임계 간선과 의사 임계 간선 찾기

    정점이 0부터 n-1까지 번호가 매겨진 n개의 정점으로 구성된 그래프가 주어졌다고 가정해 보겠습니다. 이 그래프는 무방향 그래프이며, 각 간선에는 가중치가 부여되어 있습니다. 이때 그래프의 최소 신장 트리(MST, Minimum Spanning Tree)에서 임계 간선(critical edge)과 의사 임계 간선(pseudo-critical edge)을 찾아야 합니다.임계 간선이란 해당 간선을 삭제했을 때 MST의 총 가중치가 증가하는 간선을 의미합니다. 반면 의사 임계 간선은 어떤 MST에는 나타날 수 있지만 모든 MST에 공통으

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