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

Python

  1. C++을 활용해 행렬의 각 대각선 요소를 오름차순으로 정렬하는 프로그램

    n × m 크기의 행렬 Mat가 주어졌을 때, 왼쪽 위에서 오른쪽 아래로 향하는 각 대각선의 요소들을 오름차순으로 정렬해야 합니다. 즉, 모든 대각선 상의 값들이 정렬된 상태가 되도록 만드는 것입니다.예를 들어 입력 행렬이 다음과 같다면 −331122121112출력 결과는 다음과 같습니다 −111112221233문제 해결 접근 방법이 문제는 각 대각선을 하나씩 추출하여 정렬한 뒤, 다시 원래 위치에 배치하는 방식으로 해결할 수 있습니다. 구체적인 단계는 다음과 같습니다 −solve()라는 메서드를 정

  2. 파이썬으로 이진 트리의 대각선 경로 요소 합 구하기

    문제 개요이진 트리가 주어졌을 때, 트리의 왼쪽 위에서 오른쪽 아래 방향으로 내려가는 각 대각선 경로에 포함된 노드 값들의 합을 구하는 문제입니다.예를 들어 다음과 같은 이진 트리가 있다고 가정해 보겠습니다.이 트리의 대각선 경로는 [12, 15], [8, 10], [3] 세 가지이며, 따라서 출력 결과는 [27, 18, 3]이 됩니다.접근 방법핵심 아이디어는 재귀적으로 트리를 순회하면서, 왼쪽 자식으로 이동할 때는 대각선 번호를 1 증가시키고, 오른쪽 자식으로 이동할 때는 대각선 번호를 그대로 유지하는 것입니다.알고리즘 단계tra

  3. 파이썬으로 n개의 주사위를 던져 목표 합계를 만드는 방법의 수를 세는 프로그램

    숫자 n(주사위 개수), 면의 개수(faces), 그리고 목표 합계(total)가 주어졌다고 가정해 봅시다. 이때 각각 faces개의 면을 가진 n개의 주사위를 던져 그 합이 정확히 total이 되도록 만들 수 있는 경우의 수를 구해야 합니다. 결과값이 매우 커질 수 있으므로 10**9 + 7로 나눈 나머지를 반환하면 됩니다. 예를 들어 입력이 n = 2, faces = 6, total = 8이라면 출력은 5가 됩니다. 두 개의 6면체 주사위로 8을 만드는 방법은 다음과 같이 5가지이기 때문입니다: (2와 6), (6과 2), (

  4. Python으로 그래프 정점 간 도달 가능성 행렬(Reachability Matrix) 계산하기

    그래프가 인접 리스트(adjacency list) 형태로 주어졌을 때, 모든 정점 쌍 사이에 경로가 존재하는지를 나타내는 2차원 행렬 M을 구해야 합니다. 행렬의 각 원소는 다음과 같이 정의됩니다.M[i, j] = 1 : 정점 i와 정점 j 사이에 경로가 존재하는 경우M[i, j] = 0 : 경로가 존재하지 않는 경우예를 들어 아래와 같은 그래프가 입력으로 주어진다고 가정해 보겠습니다.이때 기대되는 출력 결과는 다음과 같습니다.1111101111011110111101111첫 번째 행이 모두 1인 이유는 정점 0에서 시작하면 그래프의

  5. 파이썬(Python)으로 문자열 문자를 사용해 만들 수 있는 고유한 회문 개수 계산하기

    문제 설명 문자열 s가 주어졌을 때, 주어진 모든 문자를 사용하여 만들 수 있는 서로 다른 회문(palindrome)의 개수를 구해야 합니다. 답이 매우 커질 수 있으므로 결과는 10^9 + 7로 나눈 나머지를 반환합니다. 예를 들어 입력이 s = xyzzy라면 출력은 2가 됩니다. zyxyz와 yzxzy라는 두 가지 회문을 만들 수 있기 때문입니다. 풀이 접근 방법 회문의 핵심 성질은 문자들이 좌우 대칭으로 배치되어야 한다는 점입니다. 따라서 홀수 번 등장하는 문자는 최대 1개만 존재할 수 있으며, 존재한다면 정확히 문자열의 가

  6. 파이썬(Python)으로 각 노드에 왼쪽·오른쪽 서브트리 합을 더해 트리를 변환하는 프로그램

    이진 트리(binary tree)가 하나 주어져 있다고 가정해 보겠습니다. 이때 구해야 할 것은 기존 트리와 구조는 같지만, 모든 노드의 값을 자기 자신의 값 + 왼쪽 서브트리의 합 + 오른쪽 서브트리의 합으로 대체한 새로운 트리입니다.예를 들어 입력 트리가 다음과 같다면,출력 결과는 아래와 같습니다.문제 해결 접근 방법이 문제는 재귀적인 후위 순회(post-order traversal)를 활용하면 간단하게 해결할 수 있습니다. 자식 노드들의 합계를 먼저 계산한 뒤 부모 노드의 값을 갱신하는 방식입니다. 알고리즘의 동작 순서는 다음

  7. Python으로 리스트의 모든 요소를 같게 만들 때 최소 총비용 구하는 프로그램

    두 개의 숫자 리스트 nums와 costs가 있다고 가정해 봅시다. 여기서 사용할 수 있는 연산은 nums[i]의 값을 1만큼 증가 또는 감소시킬 때 비용 costs[i]를 지불하는 것입니다. 이 연산은 원하는 만큼 몇 번이든 수행할 수 있으며, 우리의 목표는 nums의 모든 요소를 동일한 값으로 만드는 것입니다. 이때 지불해야 하는 최소 총비용을 구하는 것이 문제입니다.문제 예시예를 들어 입력이 다음과 같다고 해봅시다.nums = [3, 2, 4]costs = [1, 10, 2]이 경우 정답은 5입니다. 그 이유는 다음과 같습니다

  8. 파이썬으로 주어진 숫자의 모든 소인수를 오름차순으로 구하는 프로그램

    1보다 큰 수 n이 주어졌을 때, 이 수의 모든 소인수(素因數)를 찾아 정렬된 순서로 반환하는 문제를 생각해 봅시다. 어떤 수는 소수들의 곱으로 표현할 수 있으며, 이때 곱해지는 소수들이 바로 그 수의 소인수입니다. 같은 소인수가 여러 번 나타날 수도 있다는 점에 유의해야 합니다.예를 들어 입력이 42라면, 출력은 다음과 같습니다.[2, 3, 7]문제 해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.결과를 저장할 빈 리스트 res를 생성합니다.n이 2로 나누어떨어지는 동안 반복합니다.res의 끝에 2를 추가합니다.n을

  9. 파이썬으로 리스트에 피타고라스 삼중항이 존재하는지 확인하는 프로그램

    숫자로 구성된 리스트 nums가 주어졌을 때, 세 개의 수 a, b, c가 존재하여 a² + b² = c² 관계를 만족하는지 확인하는 문제입니다. 즉, 리스트 안에 피타고라스 삼중항(Pythagorean triple)이 포함되어 있는지 판별해야 합니다.예를 들어, 입력이 [10, 2, 8, 5, 6]이라면 출력은 True가 됩니다. 그 이유는 8² + 6² = 64 + 36 = 100 = 10²이 성립하기 때문입니다.해결 접근 방법이 문제는 정렬과 투 포인터(Two Pointer) 기법을 활용하면 효율적으로 해결할 수 있습니다. 알

  10. 파이썬으로 두 직사각형의 겹침 여부를 확인하는 방법

    이 글에서는 파이썬을 이용해 두 개의 직사각형이 서로 겹치는지(overlap) 판별하는 알고리즘과 구현 방법을 살펴보겠습니다.문제 정의직사각형은 네 개의 요소를 가진 리스트 [x1, y1, x2, y2]로 표현합니다. 여기서 (x1, y1)은 왼쪽 아래(bottom-left) 모서리의 좌표이고, (x2, y2)는 오른쪽 위(top-right) 모서리의 좌표입니다.두 직사각형이 겹친다는 것은 두 직사각형의 교집합 영역의 면적이 양수일 때를 의미합니다. 따라서 모서리의 꼭짓점 한 점에서만 맞닿거나, 변끼리만 접하는 경우에는 겹치는 것으

  11. 파이썬으로 문자열에서 첫 번째 반복 문자의 인덱스 찾기

    문자열 s가 주어졌을 때, 이 문자열에서 가장 먼저 반복해서 등장하는 문자의 인덱스를 찾아야 합니다. 만약 반복되는 문자가 하나도 없다면 -1을 반환하면 됩니다.예를 들어 입력이 abcade라면 출력은 3입니다. 왜냐하면 첫 번째 문자 a가 인덱스 3에서 다시 나타나기 때문입니다.해결 접근 방법이 문제는 해시맵(딕셔너리)을 활용하면 효율적으로 풀 수 있습니다. 문자열을 왼쪽부터 오른쪽으로 순회하면서 이미 본 적 있는 문자인지 확인하는 방식입니다.등장한 문자를 기록하기 위한 맵(map)인 chars를 정의합니다.i를 0부터 s의 길이

  12. Python에서 재귀 인덱싱으로 요소 집합의 개수를 계산하는 프로그램

    문제 소개숫자로 이루어진 리스트 A와 정수 k가 주어졌을 때, 다음과 같은 형태의 새로운 집합을 만들어야 합니다.{A[k], A[A[k]], A[A[A[k]]], ...}이 과정은 인덱스가 리스트 범위를 벗어나기 직전까지 반복됩니다. 최종적으로 이 집합의 크기를 구하는 것이 목표이며, 만약 탐색 도중 사이클(cycle)이 발견된다면 -1을 반환해야 합니다.예시입력이 A = [1,2,3,4,5,6,7], k = 1이라고 가정해 보겠습니다.A[1] = 2A[2] = 3A[3] = 4A[4] = 5A[5] = 6A[6] = 7따라서 생성

  13. Python으로 리스트의 중복 요소를 찾아 마지막 등장 항목만 삭제하는 방법

    문제 개요 숫자로 이루어진 리스트 A가 주어졌을 때, 리스트 안의 모든 중복 숫자를 찾아낸 뒤 각 숫자의 마지막으로 등장한 항목만 제거하는 프로그램을 만들어 보겠습니다. 예를 들어 입력이 [10, 30, 40, 10, 30, 50]이라면, 10과 30이 각각 두 번씩 등장합니다. 따라서 마지막에 등장한 10과 30을 제거한 결과인 [10, 30, 40, 50]이 출력됩니다. 해결 접근 방식 핵심 아이디어는 딕셔너리(맵) 두 개를 활용하는 것입니다. d: 각 숫자가 리스트 전체에서 몇 번 등장하는지 저장하는 맵 seen: 왼쪽부터

  14. Python에서 한 글자를 제거하여 한 문자열을 다른 문자열로 변환할 수 있는지 확인하는 프로그램

    두 개의 문자열 s와 t가 주어졌을 때, s에서 딱 한 글자를 제거하여 t와 동일하게 만들 수 있는지 확인하는 프로그램을 작성해야 합니다.예를 들어, 입력이 s = world, t = wrld라면 s에서 o 한 글자만 제거하면 wrld가 되므로 출력은 True가 됩니다.문제 해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다:인덱스 변수 i를 0으로 초기화합니다.n에 문자열 s의 길이를 저장합니다.i < n인 동안 다음을 반복합니다:temp에 s의 인덱스 0부터 i-1까지의 부분 문자열과 인덱스 i+1부터 끝까지의

  15. 파이썬으로 한 자리 수가 될 때까지 자릿수의 합 구하기

    문제 이해하기양의 정수 n이 주어졌을 때, 모든 자릿수를 더해 새로운 숫자를 만들고, 그 결과가 10보다 작아질 때까지 이 과정을 반복하는 문제입니다.예를 들어 입력이 9625라면 다음과 같이 진행됩니다.9 + 6 + 2 + 5 = 222 + 2 = 4결과가 한 자리 수인 4가 되었으므로 최종 출력은 4입니다. 참고로 이렇게 얻어지는 값은 수학에서 디지털 루트(Digital Root)라고 불리는 개념과 같습니다.해결 접근 방법이 문제는 재귀(Recursion)를 활용하면 간단하게 해결할 수 있습니다.solve() 메서드를 정의하고,

  16. Python으로 문자열에서 두 번 이상 나타나는 길이 k의 부분 문자열 개수 구하기

    문자열 s와 숫자 k가 주어졌을 때, 문자열 s 안에서 두 번 이상 등장하는 길이 k의 부분 문자열이 몇 개인지 구하는 문제입니다.문제 예시예를 들어 입력이 다음과 같다고 가정해 보겠습니다.s = xxxyyy, k = 2이 경우 출력은 2가 됩니다. 길이가 2인 부분 문자열 중 xx와 yy가 각각 두 번 이상 나타나기 때문입니다.풀이 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.모든 길이 k의 부분 문자열을 순서대로 추출하여 리스트에 저장합니다.추출한 부분 문자열들의 등장 횟수를 카운트합니다.등장 횟수가 1보다 큰(즉,

  17. 파이썬으로 문자열이 반복 패턴인지 확인하는 프로그램 작성하기

    문자열이 하나 주어졌을 때, 그 문자열이 동일한 부분 문자열이 여러 번 이어진 반복 문자열인지 확인해야 하는 경우가 있습니다.예를 들어 입력이 helloworldhelloworld라면, helloworld가 두 번 반복된 형태이므로 결과는 True가 됩니다.알고리즘이 문제는 다음 단계를 통해 해결할 수 있습니다.문자열의 길이를 n에 저장합니다.n의 모든 약수를 구하는 findFactors() 함수를 정의합니다.빈 집합(set) f를 만들고, 탐색용 변수 i를 1로 초기화합니다.i × i ≤ n인 동안 다음을 반복합니다.n을 i로 나

  18. Python에서 한 리스트의 부분 리스트를 뒤집어 다른 리스트로 변환 가능한지 확인하는 프로그램

    두 개의 숫자 리스트 A와 B가 주어졌다고 가정해 보겠습니다. 우리는 리스트 A에서 연속된 부분 리스트(sublist)를 골라 뒤집을 수 있으며, 이 작업은 원하는 만큼 몇 번이든 반복할 수 있습니다. 목표는 이러한 뒤집기 작업만으로 A를 B로 변환할 수 있는지 판단하는 것입니다. 예를 들어, 입력이 A = [2, 3, 4, 9, 10], B = [4, 3, 2, 10, 9]라면 결과는 True가 됩니다. [2, 3, 4] 구간과 [9, 10] 구간을 각각 한 번씩 뒤집으면 B와 동일한 리스트를 얻을 수 있기 때문입니다. 핵심 아이

  19. 파이썬으로 문자열의 단어 순서 뒤집기: 각 단어의 위치를 바꾸는 프로그램

    공백으로 구분된 여러 개의 단어로 이루어진 문자열이 있다고 가정해 보겠습니다. 이때 우리가 수행해야 할 작업은 단어들의 순서를 거꾸로 뒤집는 것입니다. 예를 들어 입력 문자열이 Hello world, I love python programming이라면, 출력 결과는 programming python love I world, Hello가 되어야 합니다. 문제 해결 접근 방법 이 문제는 다음 세 단계를 거쳐 간단하게 해결할 수 있습니다. 1단계: 문자열 s를 공백을 기준으로 분할(split)하여 단어들의 리스트를 생성하고 temp에

  20. 파이썬으로 투자 원금이 목표 금액에 도달하는 데 걸리는 연수 구하기

    매개변수 P(원금), O, E, T가 주어졌다고 가정해 보겠습니다. P달러의 원금을 주식 시장에 투자하려고 하는데, 이 주식 시장은 매년 수익률이 번갈아 나타납니다. 즉, 첫 해에는 E%의 수익률을, 다음 해에는 O%의 수익률을 기록하는 식입니다. 우리가 구해야 할 값은 원금이 최소 T달러에 도달하는 데 몇 년이 걸리는지입니다. 문제 이해하기 예를 들어 입력이 P = 200, O = 10, E = 25, T = 300이라면 결과는 3이 됩니다. 과정을 하나씩 살펴보면 다음과 같습니다. 1년 차: 25%의 수익 발생 → 200 +

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