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

Python

  1. 파이썬으로 각 요소를 왼쪽 원소들의 최솟값으로 바꾸는 프로그램 구현하기

    숫자로 이루어진 리스트 nums가 있다고 가정해 보겠습니다. 이때 각 nums[i]를 i의 왼쪽에 있는 요소들 중 가장 작은 값으로 교체해야 하며, 첫 번째 요소인 nums[0]은 0으로 대체합니다.문제 예시예를 들어 입력이 다음과 같다면:[15, 7, 9, 16, 12, 25]출력은 아래와 같이 됩니다.[0, 15, 7, 7, 7, 7]출력 결과를 살펴보면, 인덱스 1부터는 해당 위치 왼쪽에 있는 값들 중 최솟값으로 바뀐 것을 확인할 수 있습니다. 인덱스 3 이후에는 왼쪽 원소 중 최솟값인 7이 반복되는 것을 볼 수 있습니다.해결

  2. Python으로 문자열 목록의 가장 긴 공통 접두사 찾기

    문제 소개 소문자로만 이루어진 문자열 목록이 주어졌을 때, 목록의 모든 문자열에 공통으로 포함되는 가장 긴 접두사, 즉 최장 공통 접두사(longest common prefix)를 찾아야 합니다. 예를 들어 입력이 [antivirus, anticlockwise, antigravity]라면 세 문자열이 모두 anti로 시작하므로 결과는 anti가 됩니다. 풀이 전략 핵심 아이디어는 한 문자열을 기준으로 삼아 한 글자씩 추가해 가면서, 나머지 모든 문자열과 해당 위치의 문자가 일치하는지 검증하는 것입니다. 단 하나의 문자라도 어긋나면

  3. 파이썬으로 같은 문자가 연속되는 가장 긴 부분 문자열의 길이 찾기

    문자열 s가 주어졌을 때, 동일한 문자가 연속으로 나타나는 가장 긴 부분 문자열(서브스트링)의 길이를 구하는 문제입니다.예를 들어 입력이 abbbaccabbbba라면, b가 네 번 연속으로 등장하는 구간이 있으므로 출력 결과는 4가 됩니다.해결 접근 방법이 문제는 문자열을 한 번만 순회하면서 인접한 두 문자를 비교하는 방식으로 효율적으로 해결할 수 있습니다. 단계별 과정은 다음과 같습니다.문자열 s의 길이가 0이라면 0을 반환합니다.문자열 끝에 공백 한 문자를 추가합니다. 이렇게 하면 마지막 문자 그룹도 비교 로직에서 자연스럽게 처

  4. Python으로 문자 교환하기: 같은 길이의 두 문자열을 동일하게 만들 수 있는지 확인하는 방법

    길이가 n인 두 문자열 s와 t가 있다고 가정해 봅시다. 우리는 s에서 한 문자를, t에서 다른 문자 하나를 골라 서로 교환할 수 있으며, 교환 횟수에는 제한이 없습니다. 이때 두 문자열을 동일하게 만들 수 있는지 확인하는 것이 목표입니다.예를 들어 입력이 s = xy, t = yx라면 출력은 True가 됩니다. x와 y를 한 번만 교환해도 두 문자열을 일치시킬 수 있기 때문입니다.해결 접근 방법이 문제의 핵심 아이디어는 간단합니다. 두 문자열을 합쳤을 때 모든 문자가 짝수 번씩 등장해야만 교환을 통해 두 문자열을 동일하게 만들 수

  5. Python으로 최장 연속 증가 부분 리스트 길이 구하기 (원소 1개 제거 허용)

    숫자로 이루어진 리스트 nums가 주어졌을 때, 리스트에서 원소를 최대 하나 제거할 수 있다고 가정해 봅시다. 이때 만들 수 있는 가장 긴 연속된(strictly increasing) 엄격히 증가하는 부분 리스트의 최대 길이를 구하는 것이 이번 문제입니다. 예를 들어 입력이 nums = [30, 11, 12, 13, 14, 15, 18, 17, 32]라면 출력은 7이 됩니다. 값 18을 제거하면 [11, 12, 13, 14, 15, 17, 32]라는 가장 긴 연속 증가 부분 리스트를 얻을 수 있고, 그 길이가 7이기 때문입니다. 풀

  6. 파이썬으로 문자열 속 문자들로 'pizza'를 몇 번 만들 수 있는지 세는 프로그램

    문제 설명소문자로만 이루어진 문자열 s가 주어졌을 때, s에 포함된 문자들을 조합하여 만들 수 있는 pizza 문자열의 개수를 구하는 것이 목표입니다. 문자들은 임의의 순서로 재배치할 수 있지만, 각 문자는 한 번만 사용할 수 있다는 점에 유의해야 합니다.예를 들어 입력이 ihzapezlzzilaop라면, pizza 두 개를 만들 수 있을 만큼의 문자가 충분히 포함되어 있으므로 출력은 2가 됩니다.접근 방법pizza는 총 5글자이며, 각 알파벳은 다음과 같이 필요합니다.p: 1개i: 1개z: 2개a: 1개따라서 해결 절차는 다음과

  7. 파이썬으로 서로 다른 두 요소의 최대 곱 찾는 방법

    숫자로 이루어진 리스트가 주어졌을 때, 서로 다른 두 요소의 곱 중 가장 큰 값을 찾아야 하는 경우가 자주 있습니다. 예를 들어 입력 리스트가 [5, 3, 7, 4]라면, 가장 큰 곱은 7 × 5 = 35가 됩니다.문제 해결 접근 방식이 문제는 브루트 포스(Brute Force) 방식으로 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.최댓값을 저장할 변수 curr_max를 음의 무한대(-inf)로 초기화합니다.이중 반복문을 사용하여 리스트 내 모든 서로 다른 두 요소의 조합(i, j)을 확인합니다.두 요소의 곱이 현재 cur

  8. 파이썬으로 숫자 리스트를 두 그룹으로 나눠 중앙값 차이를 최소화하는 프로그램

    문제 개요숫자로 이루어진 리스트 nums가 주어졌다고 가정해 보겠습니다. 이 리스트를 크기가 같은 두 부분으로 나누되, 각 부분의 중앙값(median)의 절대 차이가 최소가 되도록 만들고, 그 차이를 구하는 것이 목표입니다. 단, 이 문제에서는 리스트 길이의 절반(len(nums) / 2)이 항상 홀수라는 조건이 주어집니다.예시입력이 [2, 10, 8, 5, 4, 7]이라면 결과는 2가 됩니다. 리스트를 [2, 5, 10]과 [4, 7, 8]로 나누면 각각의 중앙값은 5와 7이며, 두 값의 차이는 2이기 때문입니다.풀이 아이디어핵심

  9. Python으로 정렬된 두 개의 리스트를 병합해 하나의 정렬된 리스트 만들기

    정렬되어 있는 두 개의 리스트 A와 B가 있다고 가정해 보겠습니다. 이 두 리스트를 병합하여 하나의 정렬된 리스트 C를 만들어야 하며, 두 리스트의 크기는 서로 달라도 괜찮습니다.예를 들어 A = [1,2,4,7], B = [1,3,4,5,6,8]이라면, 병합된 리스트 C는 [1,1,2,3,4,4,5,6,7,8]이 됩니다.병합 알고리즘의 동작 원리이 문제는 투 포인터(Two Pointer) 기법을 활용해 효율적으로 해결할 수 있습니다. 각 리스트의 첫 번째 요소부터 값을 하나씩 비교하면서, 더 작은 값을 결과 리스트에 순서대로 추가

  10. 파이썬으로 숫자 리스트를 오름차순 또는 내림차순으로 정렬할 때 필요한 최소 비용 구하기

    숫자 리스트 nums가 주어졌을 때, 이 리스트를 오름차순 또는 내림차순 중 어느 방향으로든 정렬하는 데 드는 최소 비용을 구하는 문제입니다. 여기서 비용이란 각 요소의 기존 값과 새로운 값 사이 차이의 절댓값을 모두 더한 합을 의미합니다.예를 들어 입력이 [2, 5, 4]라면 출력은 2가 됩니다.문제 해결 접근 방식이 문제는 다음 단계를 통해 해결할 수 있습니다.원본 배열 nums의 복사본 temp를 만듭니다.temp 리스트를 오름차순으로 정렬합니다.비용 변수 c1과 c2를 0으로 초기화합니다.n은 배열 nums의 크기입니다.i를

  11. 파이썬으로 리스트에서 값과 빈도가 같은 요소 찾는 방법

    숫자로 이루어진 리스트 nums가 주어졌을 때, 리스트 안에서 자신의 값과 출현 빈도가 정확히 일치하는 요소가 존재하는지 확인하는 문제입니다.예를 들어 입력이 [2, 4, 8, 10, 4, 4, 4]라면 출력은 True가 됩니다. 그 이유는 숫자 4가 리스트에 정확히 4번 등장하기 때문입니다.해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.각 값의 빈도를 저장할 새로운 딕셔너리(맵) res를 생성합니다.리스트를 순회하면서 각 숫자의 출현 횟수를 계산해 저장합니다.딕셔너리의 각 키-값 쌍 (k, v)를 하나씩 확인합니다

  12. Python으로 1부터 N까지 누락된 숫자 모두 찾기 — 선형 시간 풀이

    크기가 n인 숫자 리스트 nums가 있다고 가정해 봅시다. 리스트의 모든 숫자는 [1, n] 범위 안에 있으며, 일부 값은 두 번 나타나고 어떤 값은 한 번만 나타날 수 있습니다.이때 우리가 해야 할 일은 리스트에 존재하지 않는 [1, n] 범위의 숫자를 모두 찾아 오름차순으로 정렬하여 반환하는 것입니다. 조건은 선형 시간(O(n))과 상수 공간에 가까운 효율적인 해법을 찾는 것입니다.문제 예시입력이 [4, 4, 2, 2, 6, 6]이라면, 1~6 범위에서 실제로 등장한 숫자는 2, 4, 6뿐입니다. 따라서 출력은 [1, 3, 5]

  13. 파이썬에서 짝수는 오름차순, 홀수는 내림차순으로 위치를 유지하며 정렬하는 프로그램

    숫자로 이루어진 리스트 nums가 주어졌을 때, 다음 세 가지 조건을 만족하도록 배열을 정렬하는 문제입니다.짝수는 오름차순으로 정렬합니다.홀수는 내림차순으로 정렬합니다.짝수와 홀수의 상대적인 위치(인덱스 순서)는 절대 변경되지 않아야 합니다.예를 들어 입력이 [9, 14, 12, 91, -4, 5]라면 출력은 [91, -4, 12, 9, 14, 5]가 됩니다.문제 해결 접근 방법핵심 아이디어는 간단합니다. 짝수와 홀수를 각각 분리한 뒤 원하는 방향으로 정렬하고, 원래 배열에서 짝수였던 자리에는 정렬된 짝수를, 홀수였던 자리에는 정렬

  14. 파이썬으로 주어진 숫자가 자기애적 수(Narcissistic Number)인지 확인하는 방법

    어떤 숫자 n이 주어졌을 때, 이 숫자가 자기애적 수(Narcissistic Number)인지 판별하는 문제를 살펴보겠습니다.자기애적 수란 각 자릿수를 자릿수의 개수만큼 거듭제곱한 값의 합이 원래 숫자와 같아지는 수를 말합니다. 예를 들어 입력값이 9474라면 결과는 True입니다. 그 이유는 다음과 같습니다.9⁴ + 4⁴ + 7⁴ + 4⁴ = 6561 + 256 + 2401 + 256 = 9474해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.숫자 n을 문자열로 변환하여 각 자릿수를 리스트로 만듭니다.각 자릿수 x에

  15. Python으로 이진 탐색 트리(BST)에서 특정 범위에 속한 노드 개수 구하기

    이진 탐색 트리(BST)가 주어지고, 왼쪽 경계 l과 오른쪽 경계 r이 함께 제공된다고 가정해 봅시다. 이때 루트 노드를 기준으로 값이 l 이상 r 이하(경계값 포함)인 모든 노드의 개수를 구하는 것이 목표입니다.예를 들어 다음과 같은 BST가 있다고 가정해 보겠습니다.여기서 l = 7, r = 13이라면, 값이 7 이상 13 이하인 노드는 8, 10, 12로 총 3개이므로 출력 결과는 3이 됩니다.문제 해결 접근 방법이 문제는 스택을 활용한 반복적 순회(iterative traversal) 방식으로 효율적으로 해결할 수 있습니다.

  16. 파이썬으로 n×n 체스판에 룩을 서로 공격하지 않게 배치하는 경우의 수 구하기

    문제 개요크기가 n × n인 체스판이 주어졌다고 가정해 보겠습니다. 이때 n개의 룩(rook)을 배치하되, 어떤 룩도 다른 룩을 공격할 수 없도록 하는 배치 방법의 수를 구해야 합니다.룩은 같은 행(row) 또는 같은 열(column)에 있는 기물을 공격할 수 있습니다. 따라서 모든 룩이 서로 다른 행과 서로 다른 열에 위치해야 합니다. 또한 두 가지 배치 방법 중 어느 하나라도 특정 칸의 점유 여부가 다르다면, 그 두 방법은 서로 다른 것으로 간주합니다.예를 들어 입력값이 3이라면, 출력은 6이 됩니다.풀이 접근 방법핵심 아이디어

  17. 파이썬으로 N번째 피보나치 수 구하기: 초보자도 이해하는 완벽 가이드

    피보나치 수열은 프로그래밍을 배울 때 가장 먼저 접하는 고전적인 문제 중 하나입니다. 이 글에서는 숫자 n이 주어졌을 때 n번째 피보나치 항을 구하는 방법을 단계별로 알아보겠습니다.피보나치 수열이란?피보나치 수열은 각 항이 바로 앞의 두 항의 합으로 정의되는 수열입니다. 즉, i번째 피보나치 항은 다음과 같은 점화식으로 표현됩니다.f(i) = f(i-1) + f(i-2)수열의 첫 두 항은 각각 0과 1로 시작합니다. 따라서 전체 수열은 다음과 같습니다.0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...문제 예시예를 들

  18. 파이썬으로 숫자의 이진수 표현에서 1인 비트 개수 구하기

    숫자 n이 주어졌을 때, 그 숫자를 이진수(binary)로 표현했을 때 포함된 1의 비트 개수를 구하는 문제입니다.예를 들어 입력값이 12라면, 12의 이진수 표현은 1100이므로 출력 결과는 2가 됩니다.문제 해결 접근 방법이 문제는 비트 연산을 활용하면 간단하게 해결할 수 있습니다. 다음 단계를 따릅니다:카운트 변수를 0으로 초기화합니다.n이 0이 아닌 동안 반복합니다:현재 n과 1을 비트 AND(&) 연산하여 가장 오른쪽 비트가 1인지 확인하고, 그 결과를 카운트에 더합니다.n을 오른쪽으로 한 비트 시프트(즉, 2로 나

  19. 파이썬으로 이진 트리에서 길이가 k인 고유 경로 개수 구하기

    문제 설명서로 다른 고유한 값을 가진 이진 트리와 정수 k가 주어졌다고 가정해 보겠습니다. 이때 트리 안에서 길이가 k인 고유한 경로의 개수를 구해야 합니다. 경로는 부모 노드에서 자식 노드 방향으로 내려갈 수도 있고, 반대로 자식 노드에서 부모 노드 방향으로 거슬러 올라갈 수도 있습니다. 두 경로를 비교했을 때 한쪽에만 포함된 노드가 하나라도 존재한다면, 그 두 경로는 서로 다른 경로로 간주합니다.예를 들어 다음과 같은 트리가 주어지고,k = 3이라면 출력은 4가 됩니다. 해당하는 경로가 [12,8,3], [12,8,10], [8

  20. 파이썬으로 고유 문자 하나만 포함하는 부분 문자열의 총 개수 구하기

    문제 소개소문자로만 구성된 문자열 s가 주어졌을 때, 단 하나의 고유한 문자만 포함하는 부분 문자열(substring)의 총 개수를 구하는 것이 목표입니다.예를 들어 입력 문자열이 xxyy라면, 조건을 만족하는 부분 문자열은 [x, x, xx, y, y, yy]로 총 6개이므로 결과값은 6이 됩니다.해결 아이디어핵심은 문자열을 왼쪽에서 오른쪽으로 한 글자씩 살펴보면서 같은 문자가 연속해서 나타나는 구간(run)의 길이를 추적하는 것입니다.어떤 위치까지 같은 문자가 k번 연속되었다면, 그 위치를 끝으로 하는 유효한 부분 문자열은 정확

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:173/450  20-컴퓨터/Page Goto:1 167 168 169 170 171 172 173 174 175 176 177 178 179