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

Python

  1. 파이썬으로 최종 경기에서 승리할 수 있는 수영 선수 수 계산하기

    문제 개요 길이가 n인 숫자 리스트 nums가 주어져 있다고 가정해 보겠습니다. 이 리스트의 각 요소는 수영 대회 참가 선수들의 현재 점수를 나타냅니다. 마지막 결승에서는 이번 라운드의 1위 선수가 n점, 2위 선수가 n-1점을 받는 식으로 순위에 따라 점수가 차등 지급됩니다. 우리가 구해야 할 값은 현재 라운드가 끝난 후, 결승이 종료되었을 때 여전히 우승할 수 있는 선수가 몇 명인지입니다. 단, 최고 점수가 동률인 경우에도 우승으로 간주합니다. 예제로 이해하기 입력이 nums = [9, 6, 11, 12]라고 해봅시다. 이때

  2. Python으로 스택 연산을 순서대로 처리한 뒤 최종 결과 확인하기

    문자열로 이루어진 리스트 ops가 있다고 가정해 보겠습니다. 이 리스트의 각 요소는 아래 연산 중 하나입니다.음수가 아닌 정수 값 — 해당 숫자를 스택에 push합니다.POP — 스택의 맨 위(top) 요소를 삭제합니다.DUP — 맨 위 요소를 한 번 더 삽입하여 복제합니다.+ — 맨 위 두 개의 요소를 pop한 뒤, 그 합을 다시 push합니다.- — 맨 위 두 개의 요소를 pop한 뒤, (맨 위 요소 − 그 아래 요소)의 결과를 push합니다.모든 연산을 차례대로 수행한 후, 스택의 맨 위에 남아 있는 요소를 구해야 합니다. 만

  3. 파이썬으로 풀어보는 비행기 좌석 셔플 문제: 마지막 승객이 지정된 좌석에 앉을 확률

    문제 설명비행기에 n개의 좌석이 있다고 가정해 봅시다. 첫 번째 승객은 항공권을 잃어버려서 남은 좌석 중 하나를 무작위로 선택합니다. 나머지 승객들은 각자 자신의 항공권을 가지고 있지만, 자신에게 배정된 좌석이 이미 다른 사람이 차지하고 있다면 비어 있는 좌석 중 하나를 무작위로 선택하게 됩니다. 이때 마지막 승객이 자신에게 배정된 좌석에 앉게 될 확률을 구하는 것이 이 문제의 목표입니다.예를 들어 입력이 n = 5라면 출력은 0.5(50%)입니다. 흥미롭게도 승객이 두 명 이상인 경우 답은 항상 일정합니다. 마지막 승객은 결국 제

  4. 파이썬으로 한 글자만 다른 단어 쌍이 있는지 확인하는 프로그램

    문제 개요소문자로만 구성된 문자열 리스트 words가 주어지며, 모든 단어의 길이는 서로 같다고 가정합니다. 이때 우리가 확인해야 할 것은 이 단어들 중에서 딱 한 글자만 다른 두 문자열이 존재하는지 여부입니다.예를 들어 입력이 words = ["seed", "pick", "lick", "root", "live"]라면 결과는 True가 됩니다. "pick"과 "lick"은 첫 번째 글자만 다를 뿐 나머지 세

  5. Python에서 동등 관계 쌍을 활용해 문자열이 회문인지 확인하는 방법

    문제 개요소문자 알파벳으로 구성된 문자열 s와 쌍(pairs)이라는 리스트가 있다고 가정해 보겠습니다. pairs의 각 요소는 [a, b] 형태의 두 문자로 이루어져 있으며, 여기서 문자 a와 b는 서로 동일하다고 간주됩니다.만약 [a, b]와 [b, c]라는 두 쌍이 존재한다면, a와 b가 동등하고 b와 c도 동등하므로, 추이성에 의해 a와 c 역시 동등하다고 볼 수 있습니다. 또한 모든 값은 자기 자신과 항상 동등합니다. 이러한 동등 관계를 바탕으로 문자열 s가 회문(palindrome)인지 판별하는 것이 목표입니다.예시입력이

  6. Python으로 행복하게 만들 수 있는 최대 고객 수 구하는 프로그램

    문제 개요길이가 같은 두 개의 리스트 customers(방문 고객 수)와 mood(기분 상태), 그리고 정수 k가 주어집니다. 매 분 i에 customers[i]명의 고객이 매장을 방문하며, mood[i]가 1이면 해당 고객들은 행복하고, 0이면 불행한 상태를 의미합니다.여기서 우리는 길이가 k인 연속된 구간의 mood 값을 모두 1로 변경할 수 있습니다(예: 프로모션 진행). 이 조건에서 행복하게 만들 수 있는 고객 수의 최댓값을 구하는 것이 목표입니다.입력 예시다음과 같은 입력이 주어졌다고 가정해 보겠습니다.customers =

  7. Python으로 산술 수열 판별 쿼리의 참 개수 세기 – 효율적인 알고리즘 구현

    숫자 리스트 nums와 쿼리 리스트 queries가 주어져 있다고 가정해 봅시다. 각 쿼리는 [i, j] 형태로 구성되며, 해당 쿼리는 nums의 i번째부터 j번째까지(양 끝 인덱스 포함) 부분 리스트가 산술 수열(arithmetic sequence)인지를 묻습니다. 우리의 목표는 참(true)을 반환하는 쿼리의 개수를 구하는 것입니다. 예제로 이해하기 예를 들어 입력이 다음과 같다고 해보겠습니다. nums = [2, 4, 6, 8, 7, 6, 5, 2] queries = [[3, 4], [0, 3], [2, 4]] 이때 출

  8. 파이썬(Python)으로 방향 문자열 균형 맞추기: 네 방향이 각각 n/4회씩 등장하도록 최소 교체 구간 구하기

    문제 소개문자열 s가 주어지며, 이 문자열은 북(N), 남(S), 서(W), 동(E)을 나타내는 네 가지 방향 문자 N, S, W, E로만 구성되어 있다고 가정해 봅시다. 우리의 목표는 네 방향이 각각 정확히 n/4번씩(단, n은 문자열 s의 길이) 등장하도록 문자열의 일부를 교체할 때, 교체 대상이 되는 가장 짧은 부분 문자열의 길이를 구하는 것입니다.예를 들어 입력이 s = NNSWWESN라고 해보겠습니다. 이때 n은 8이므로 각 방향은 8 ÷ 4 = 2번씩 나타나야 합니다. 마지막 문자 N을 E로 단 한 글자만 바꾸면 모든 방

  9. 파이썬으로 모든 공을 각 위치로 이동시키는 데 필요한 총 거리 리스트 구하기

    0과 1로만 구성된 이진 리스트 nums가 있다고 가정해 봅시다. 여기서 0은 빈 칸을, 1은 공이 놓여 있는 칸을 의미합니다. 우리의 목표는 nums와 같은 크기의 새로운 리스트 L을 만드는 것입니다. 이때 L[i]에는 모든 공을 i번째 위치로 이동시키는 데 필요한 총 거리가 저장됩니다. 인덱스 j에 있는 공을 인덱스 i로 옮길 때의 거리는 |j − i|로 정의됩니다. 문제 예시 예를 들어 nums = [1, 1, 0, 1]이 주어지면 결과는 [4, 3, 4, 5]가 됩니다. L[0] = |0 − 0| + |1 − 0| + |3

  10. 파이썬으로 이진 리스트에서 합이 k인 부분 리스트의 개수 구하기

    0과 1로만 이루어진 이진 리스트가 있다고 가정해 봅시다. 여기에 또 다른 입력값 k가 주어졌을 때, 합이 k와 같은 연속된 부분 리스트의 개수를 구하는 것이 목표입니다.예를 들어, 입력이 nums = [1, 0, 0, 1, 1, 1, 0, 1], k = 3이라면 출력은 8이 됩니다. 조건을 만족하는 부분 리스트가 [1,0,0,1,1], [0,0,1,1,1], [0,0,1,1,1,0], [0,1,1,1], [0,1,1,1,0], [1,1,1], [1,1,1,0], [1,1,0,1]로 총 8개이기 때문입니다.해결 방법이 문제는 누적

  11. 파이썬으로 주어진 범위 내 모든 숫자의 비트 AND(Bitwise AND) 구하기

    문제 이해두 값 start와 end가 주어졌을 때, [start, end] 범위(양 끝값 포함)에 속한 모든 숫자의 비트 AND 연산 결과를 구하는 것이 목표입니다.예를 들어 start = 8, end = 12가 입력으로 주어지면 출력은 8이 됩니다. 그 이유는 다음과 같습니다.8은 이진수로 10009는 이진수로 100110은 이진수로 101011은 이진수로 101112는 이진수로 1100따라서 1000 AND 1001 AND 1010 AND 1011 AND 1100의 결과는 1000, 즉 십진수로 8입니다.알고리즘 접근 방법이 문

  12. 파이썬으로 로봇이 경계 상자 안에서만 움직이는지 확인하는 프로그램

    문자열 s가 로봇의 이동 명령을 나타낸다고 가정해 보겠습니다. 로봇은 현재 좌표 (0, 0)에 위치하고 있으며 북쪽을 바라보고 있습니다. 이동 문자열 s에는 다음과 같은 문자들이 포함될 수 있습니다.F : 현재 바라보는 방향으로 한 칸 전진L : 왼쪽으로 90도 회전R : 오른쪽으로 90도 회전로봇이 문자열 s에 담긴 이동을 순서대로 무한히 반복한다고 할 때, 평면 위에 로봇이 절대 벗어날 수 없는 경계 상자(bounding box)가 존재하는지 확인하는 것이 문제입니다.예를 들어 입력이 s = FFRFRFFRF라면 출력은 True

  13. 파이썬으로 두 리스트의 제곱값 합이 주어진 범위에 속하는 쌍의 개수 찾기 (bisect 활용)

    두 개의 숫자 리스트 nums1과 nums2, 그리고 경계값 lower와 upper가 주어졌다고 가정해 봅시다. 이때 lower ≤ nums1[i]^2 + nums2[j]^2 ≤ upper 조건을 만족하는 쌍 (i, j)의 개수를 구하는 것이 문제입니다.예를 들어, 입력이 다음과 같다면,nums1 = [5, 3, 2]nums2 = [8, 12, 6]lower = 10upper = 50출력은 2가 됩니다. 조건을 만족하는 쌍은 (1, 2)와 (2, 2)이며, 각각 다음과 같이 계산됩니다.10 ≤ 3² + 6² ≤ 50 → 10 ≤ 4

  14. Python으로 가로 벽돌 배치 패턴 수 세기 – 동적 계획법 풀이

    숫자로 이루어진 리스트 bricks와 두 개의 값 width(너비), height(높이)가 주어졌다고 가정해 보겠습니다. bricks[i]의 각 원소는 길이가 bricks[i] 단위이고 폭이 1단위인 벽돌 하나를 나타냅니다. 목표는 주어진 너비와 높이에 맞게 벽돌로 공간을 빈틈없이 채우는 배치 방법이 총 몇 가지인지 구하는 것입니다. 이때 벽돌은 자유롭게 재사용할 수 있지만, 반드시 가로 방향으로만 놓아야 한다는 조건이 있습니다.예를 들어 bricks = [2, 1], width = 3, height = 2가 입력으로 주어지면 정답

  15. 파이썬으로 지정된 횟수만큼 문자를 이동한 후 최종 문자열 구하기

    소문자로만 이루어진 문자열 s와, s와 길이가 같은 정수 리스트 shifts가 있다고 가정해 보겠습니다. shifts[i]의 각 원소는 s의 첫 i + 1개 문자(인덱스 0부터 i까지)를 shifts[i]칸씩 밀라는 명령을 의미합니다. 이동 중 z를 넘어가면 다시 a로 순환됩니다. 목표는 모든 이동 명령을 s에 적용한 뒤의 최종 문자열을 구하는 것입니다. 예를 들어 입력이 s = "tomato", shifts = [2, 5, 2, 3, 7, 4]라고 해보겠습니다. 첫 번째 문자를 2칸 밀면 t가 v가 되어 문자열

  16. Python에서 괄호 깊이별 문자 'X' 개수를 계산하는 프로그램

    문자열 s가 오직 세 가지 문자인 X, (, ) 로만 구성되어 있다고 가정해 보겠습니다. 이 문자열에는 균형이 맞는 괄호가 포함되어 있으며, 그 사이에 여러 개의 X가 존재하고, 괄호는 재귀적으로 중첩될 수도 있습니다. 우리의 목표는 문자열 s에서 가장 얕은 깊이부터 가장 깊은 깊이까지, 각 괄호 깊이별로 X가 몇 개 있는지 계산하는 것입니다. 예를 들어, 입력이 s = (XXX(X(XX))XX)라고 한다면, 출력은 [5, 1, 2]가 됩니다. 첫 번째 괄호 깊이(가장 바깥쪽)에는 5개, 두 번째 깊이에는 1개, 세 번째 깊이(가장

  17. Python으로 순환 리스트의 단방향 사이클 존재 여부 확인하기

    문제 소개 순환(circular) 리스트 nums가 있다고 가정해 보겠습니다. 순환 리스트는 첫 번째 요소와 마지막 요소가 서로 이웃하여 시작과 끝이 연결된 원형 구조를 말합니다. 임의의 인덱스 i에서 출발할 때, nums[i]가 양수이면 nums[i]칸 앞으로 이동하고, 음수이면 그만큼 뒤로 이동합니다. 이때 확인해야 할 것은 길이가 1보다 크면서 경로가 오직 한 방향(앞으로만 또는 뒤로만)으로 진행되는 사이클이 존재하는지 여부입니다. 예를 들어 입력이 nums = [-1, 2, -1, 1, 2]라면 결과는 True입니다. [1

  18. 파이썬으로 주어진 서버 코어 안에서 모든 작업을 실행할 수 있는지 확인하는 방법

    문제 이해하기두 개의 리스트 cores와 tasks가 주어졌다고 가정해 보겠습니다. cores[i]는 i번째 서버에서 사용 가능한 코어 수를 의미하고, tasks[i]는 해당 작업을 실행하는 데 필요한 코어 수를 의미합니다. 각 작업은 반드시 단 하나의 서버에서만 실행되어야 하며, 하나의 서버는 여러 개의 작업을 동시에 맡을 수 있습니다. 이때 주어진 코어 용량만으로 모든 작업을 실행할 수 있는지 판단하는 것이 목표입니다.예를 들어 입력이 cores = [10, 7], tasks = [7, 3, 2, 2, 1]이라면 결과는 True

  19. 파이썬으로 사라지는 코인 매트릭스의 최대 코인 개수 구하기

    2차원 매트릭스가 주어지고, 각 셀 matrix[r, c]에는 그 위치에 놓인 코인의 개수가 저장되어 있다고 가정해 봅시다. 특정 셀 matrix[r, c]에서 코인을 가져가면, 바로 위 행(r - 1)과 아래 행(r + 1)의 모든 코인이 사라지며, 같은 행에 있는 좌우 이웃 셀인 matrix[r, c + 1]과 matrix[r, c - 1]의 코인 역시 함께 사라집니다. 이러한 규칙 속에서 우리가 수집할 수 있는 최대 코인 개수를 구하는 것이 목표입니다.예를 들어 입력이 다음과 같다고 해 보겠습니다.28761010425923이

  20. 파이썬(Python)으로 그래프에서 두 노드에 공통으로 도달할 수 있는 노드 찾기

    유향 그래프(directed graph)의 간선 리스트가 주어졌다고 가정해 봅시다. 그래프에는 n개의 노드가 있으며, 노드 이름은 0부터 n-1까지 번호가 매겨져 있습니다. 또한 두 개의 정수 a와 b가 함께 주어집니다. 우리가 확인해야 할 것은 c에서 출발하여 a에 도달할 수 있고, 동시에 b에도 도달할 수 있는 노드 c가 존재하는지 여부입니다.예를 들어 위 그래프에서 a = 2, b = 3이라면 결과는 True가 됩니다. c = 0인 경우 0에서 2로 가는 경로와 0에서 3으로 가는 경로가 모두 존재하기 때문입니다.해결 전략:

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:388/450  20-컴퓨터/Page Goto:1 382 383 384 385 386 387 388 389 390 391 392 393 394