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

Python

  1. 파이썬(Python)으로 연결 리스트 뒤집기 – 재귀 방식 구현 가이드

    연결 리스트(Linked List)가 주어졌을 때, 이를 역순으로 뒤집는 문제를 해결해 보겠습니다. 예를 들어 리스트가 2 → 4 → 6 → 8 형태라면, 뒤집은 후의 리스트는 8 → 6 → 4 → 2가 됩니다. 접근 방식: 재귀적 해결 이 문제는 재귀(recursion)를 활용하면 깔끔하게 해결할 수 있습니다. 핵심 아이디어는 리스트를 순회하면서 각 노드의 next 포인터가 이전 노드를 가리키도록 방향을 바꾸는 것입니다. solve(head, back)이라는 재귀 함수를 정의하고, 다음 순서로 처리합니다. 기저 조건: head

  2. Python으로 방향 그래프 반전하기: 인접 리스트 기반 구현 가이드

    방향 그래프(directed graph)가 주어졌을 때, 이를 반전(reversal)시킨 그래프를 구하는 문제를 생각해 볼 수 있습니다. 반전이란 간선의 방향을 모두 뒤집는 것으로, 원래 그래프에서 간선이 u에서 v로 향한다면, 반전된 그래프에서는 v에서 u로 향하게 됩니다.입력은 인접 리스트(adjacency list) 형태로 주어지며, 노드가 총 n개라면 노드 번호는 0부터 n-1까지 차례대로 매겨져 있다고 가정합니다.예를 들어 다음과 같은 그래프가 입력으로 주어지면,출력으로는 아래와 같이 모든 간선의 방향이 뒤집힌 그래프를 얻

  3. Python으로 연결 리스트를 k개씩 그룹 단위로 뒤집는 프로그램

    문제 개요단일 연결 리스트(singly linked list)와 정수 k가 주어졌을 때, 연속된 k개의 노드로 이루어진 각 그룹을 순서대로 뒤집는 것이 목표입니다.예를 들어 리스트가 [1,2,3,4,5,6,7,8,9,10]이고 k = 3이라면, 앞의 세 노드(1, 2, 3)는 3→2→1로, 다음 세 노드(4, 5, 6)는 6→5→4로 뒤집혀 최종 결과는 [3, 2, 1, 6, 5, 4, 9, 8, 7, 10]이 됩니다. 만약 마지막에 남은 노드 수가 k보다 적다면, 해당 부분은 원래 순서를 그대로 유지합니다.해결 알고리즘이 문제는

  4. Python으로 구조에 필요한 최소 로켓 수 구하는 방법

    사람들의 몸무게를 담은 숫자 리스트 weights와 한 대의 로켓이 실을 수 있는 최대 하중을 나타내는 값 limit이 주어진다고 가정해 보겠습니다. 각 로켓에는 최대 두 명까지만 탑승할 수 있으며, 우리는 모든 사람을 행성으로 구출하는 데 필요한 최소 로켓 수를 구해야 합니다. 예를 들어 입력이 weights = [300, 400, 300], limit = 600이라면 출력은 2가 됩니다. 몸무게가 300인 두 사람은 한 대의 로켓에 함께 태울 수 있고, 몸무게가 400인 사람은 별도의 로켓 한 대가 더 필요하기 때문입니다. 이

  5. 파이썬으로 방문한 좌표를 건너뛰며 로봇이 목표 지점에 도달하는지 확인하는 방법

    문제 정의 데카르트 좌표평면의 원점 (0, 0)에 로봇이 서 있다고 가정해 봅시다. 로봇에는 N(북), S(남), W(서), E(동)로 이루어진 이동 명령 목록이 주어집니다. 여기에 독특한 규칙이 하나 있습니다. 로봇이 이미 방문했던 지점에 도달하면, 새로운 미방문 지점에 도달할 때까지 같은 방향으로 계속 직진합니다. 모든 이동을 마친 뒤 로봇이 최종적으로 목표 좌표 (x, y)에 도착하는지 판별하는 것이 이번 문제의 목표입니다. 예시로 이해하기 입력이 다음과 같다고 가정해 보겠습니다. moves = [N, N, E, N, W,

  6. Python으로 정사각형 행렬을 시계 반대 방향으로 90도 회전하는 방법

    정사각형 행렬(square matrix)이 주어졌을 때, 이 행렬을 시계 반대 방향(counter-clockwise)으로 90도 회전해야 한다고 가정해 보겠습니다.147258369위 행렬을 회전하면 출력 결과는 다음과 같습니다.789456123문제 해결 접근 방법이 문제는 다음과 같은 단계를 거쳐 해결할 수 있습니다.행렬이 비어 있다면 빈 리스트를 반환합니다.n을 행렬의 행(row) 개수로 설정합니다.행렬의 각 행을 역순으로 뒤집습니다(reverse).i를 0부터 n-1까지 순회하면서, j를 0부터 i-1까지 순회하며 matrix[

  7. Python으로 구간별 동시 작업 개수를 병합해 찾는 프로그램

    여러 개의 구간(interval) 리스트와 작업 유형(types) 문자열 리스트가 주어졌다고 가정해 보겠습니다. 각 구간은 [start, end) 형태이며, intervals[i]는 누군가 types[i]라는 작업을 start부터 end 직전까지 수행했음을 의미합니다. 단, 같은 유형의 두 구간은 서로 겹치거나 맞닿지 않는다는 조건이 있습니다.우리가 구해야 할 것은 정렬된 병합 리스트입니다. 각 항목은 [start, end, num_types] 형태로, start부터 end 사이에 num_types개의 작업이 동시에 진행되고 있었음

  8. 파이썬으로 적대 관계가 있는 사람끼리 같은 그룹에 속하지 않도록 두 그룹으로 나누는 프로그램

    문제 이해하기숫자 n과 2차원 배열 enemies가 주어졌다고 가정해 보겠습니다. 여기서 n은 [0, n-1] 범위로 번호가 매겨진 n명의 사람을 의미하며, enemies 배열의 각 행은 [a, b] 형태입니다. 이는 a와 b가 서로 적대적인 관계임을 나타냅니다. 우리가 해야 할 일은 n명의 사람을 두 개의 그룹으로 나누되, 적대적인 관계에 있는 두 사람이 절대 같은 그룹에 속하지 않도록 할 수 있는지 확인하는 것입니다.예를 들어 입력이 n = 4, enemies = [[0, 3], [3, 2]]라고 해보겠습니다. 이 경우 출력은

  9. 파이썬으로 포식자 관계를 고려해 동물을 나누는 최소 그룹 수 구하는 방법

    문제 설명숫자 리스트 nums가 주어진다고 가정해 보겠습니다. 이때 nums[i]는 i번째 동물의 포식자(잡아먹는 동물)를 나타내며, 포식자가 없으면 -1이 저장됩니다. 우리가 구해야 할 것은 어떤 동물도 자신의 직접적 또는 간접적 포식자와 같은 그룹에 속하지 않도록 동물들을 나눌 때 필요한 그룹 수의 최솟값입니다.예를 들어 입력이 nums = [1, 2, -1, 4, 5, -1]라면 출력은 3입니다. 그룹을 [0, 3], [1, 4], [2, 5] 형태로 구성할 수 있기 때문입니다.핵심 아이디어0번 동물은 1번에게, 1번 동물은

  10. Python으로 0부터 n까지 모든 숫자의 세트 비트(Set Bit) 총합 구하기

    문제 소개숫자 num이 주어졌을 때, 0부터 num까지의 모든 정수 i에 대해 해당 숫자를 이진수로 나타냈을 때 포함되는 1의 개수(세트 비트 수)를 계산하고, 그 값들을 모두 더한 합계를 반환하는 프로그램을 Python으로 작성해 보겠습니다.예를 들어 num이 5라면 대상 숫자는 [0, 1, 2, 3, 4, 5]입니다. 각 숫자의 이진수 표현과 세트 비트 수는 다음과 같습니다.숫자이진수1의 개수000111210131124100151012따라서 각 숫자별 1의 개수는 [0, 1, 1, 2, 1, 2]이며, 최종 결과는 이들의 합인

  11. 파이썬으로 리스트를 '합이 같고 첫 번째 그룹의 원소가 더 작은' 두 그룹으로 분할하기

    문제 개요숫자로 구성된 리스트 nums가 주어졌을 때, 이 리스트를 두 그룹 A와 B로 나눌 수 있는지 확인해야 합니다. 이때 다음 두 가지 조건을 동시에 만족해야 합니다.A의 원소 합과 B의 원소 합이 서로 같아야 합니다.A에 속한 모든 숫자는 B에 속한 모든 숫자보다 엄격하게 작아야 합니다.예를 들어 입력이 nums = [3, 4, 5, 12]라면 결과는 True입니다. A = [3, 4, 5], B = [12]로 나누면 두 그룹의 합이 각각 12로 동일하고, A의 모든 원소(3, 4, 5)는 B의 원소(12)보다 작기 때문입니

  12. Python으로 이진 탐색 트리에서 노드의 형제 값 찾기

    문제 개요 값 k와 이진 탐색 트리(Binary Search Tree)가 하나씩 주어져 있다고 가정해 봅시다. 이 트리의 각 노드는 리프 노드이거나 정확히 두 개의 자식 노드를 가지고 있습니다. 목표는 값 k를 가진 노드를 찾아, 그 노드의 형제(sibling) 노드의 값을 반환하는 것입니다. 예를 들어 위 트리에서 k = 4라면, 4의 형제 노드는 10이므로 출력 결과는 10입니다. 풀이 접근 방법 이 문제는 이진 탐색 트리의 정렬된 성질을 활용해 재귀적으로 해결할 수 있습니다. 핵심 아이디어는 k를 가진 노드를 향해 트리를

  13. Python으로 2D 행렬에서 모든 행에 공통으로 존재하는 가장 작은 숫자 찾기

    각 행이 오름차순으로 정렬되어 있는 2D(2차원) 행렬이 있다고 가정해 보겠습니다. 이때 모든 행에 공통으로 존재하는 숫자 중 가장 작은 값을 찾아야 합니다. 만약 그러한 숫자가 존재하지 않는다면 -1을 반환하면 됩니다.예를 들어 입력이 다음과 같다고 해보죠.23551010135세 행 모두에 공통으로 포함된 숫자는 5뿐이므로, 출력 결과는 5가 됩니다.문제 해결 접근 방법이 문제는 집합(set)의 교집합 개념을 활용하면 매우 간단하게 해결할 수 있습니다. 단계별로 살펴보면 다음과 같습니다.행렬이 비어 있다면 -1을 반환합니다.행렬의

  14. Python으로 배열을 짝수·홀수 패리티 기준으로 정렬하는 방법

    문제 개요정수로 이루어진 배열 A가 있다고 가정해 보겠습니다. 이때 짝수가 먼저 오고, 그 뒤에 홀수가 오도록 배열을 정렬해야 합니다.예를 들어, 배열이 A = [1, 5, 6, 8, 7, 2, 3]이라면 결과는 [6, 8, 2, 5, 7, 1, 3]처럼 앞쪽에는 짝수(6, 8, 2), 뒤쪽에는 홀수(5, 7, 1, 3)가 배치되어야 합니다.풀이 접근 방법이 문제는 투 포인터(Two Pointer) 기법을 활용하면 효율적으로 해결할 수 있습니다. 해결 과정은 다음과 같습니다.두 개의 인덱스 i와 j를 모두 0으로 초기화합니다. i는

  15. 파이썬으로 합이 n이 되는 수들의 최대 곱 구하는 프로그램

    문제 소개하나의 자연수 n이 주어졌을 때, 합이 정확히 n이 되도록 두 개 이상의 수로 나누고, 그 수들의 곱이 최대가 되도록 만들어야 하는 문제입니다. 우리가 최종적으로 구해야 할 값은 바로 이 곱의 최댓값입니다.예를 들어 입력이 n = 12라고 가정해 봅시다. 3 + 3 + 3 + 3 = 12를 만족하며, 곱은 3 × 3 × 3 × 3 = 81이 됩니다. 다른 방식으로 나누는 것보다 이 조합이 가장 큰 곱을 만들어 내므로 출력은 81입니다.해결 접근 방식이 문제는 동적 계획법(Dynamic Programming)과 재귀 호출을

  16. Python으로 스택 요소를 팝한 뒤 모든 스택의 최대 공통 합계 구하기

    여러 개의 스택이 리스트 형태로 주어져 있다고 가정해 보겠습니다. 우리는 임의의 스택에서 원하는 만큼 요소를 팝(pop)해 제거할 수 있으며, 이때 모든 스택의 합계가 서로 같아지도록 만들면서 얻을 수 있는 최대 합계를 구해야 합니다. 문제 예시 예를 들어 입력이 다음과 같다고 해봅시다. stacks = [[3, 4, 5, 6], [5, 6, 1, 4, 4], [10, 2, 2, 2]] 이 경우 정답은 12입니다. 아래와 같은 연산을 수행하면 세 스택 모두 합계를 12로 맞출 수 있습니다. 첫 번째 스택에서 [6]을 팝 → 남은

  17. Python으로 부분 리스트의 합이 전체 리스트 총합보다 큰지 확인하는 프로그램

    숫자로 이루어진 리스트 nums가 주어졌을 때, 그 합이 리스트 전체의 총합보다 엄격하게 큰 부분 리스트(sublist)가 존재하는지 확인하는 문제입니다.예를 들어 입력이 nums = [1, -2, 3, 4]라면 결과는 True입니다. 리스트 전체의 합은 6이고, 부분 리스트 [3, 4]의 합은 7로 전체 합보다 크기 때문입니다.문제 해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.total := nums 요소들의 총합을 구합니다.s := 0으로 초기화합니다.nums의 각 요소 i에 대해 왼쪽부터 순회하며:s := s

  18. 파이썬으로 값 차이와 인덱스 차이가 동일한 부분 수열의 최대 합 구하기

    숫자로 이루어진 리스트 nums가 주어졌을 때, 값이 엄격하게 증가하는 부분 수열을 선택하는 문제를 생각해 보겠습니다. 여기서 중요한 조건은 인접한 두 숫자의 값 차이가 반드시 해당 인덱스의 차이와 같아야 한다는 점입니다. 우리의 목표는 이러한 조건을 만족하는 부분 수열 중 합이 최대가 되는 것을 찾는 것입니다. 예를 들어 입력이 nums = [6, 7, 9, 9, 8, 5]라고 한다면, 정답은 22입니다. 인덱스 [0, 1, 3]에 위치한 부분 수열 [6, 7, 9]를 선택하면, 연속된 값들의 차이는 [1, 2]이고 이는 인덱스

  19. Python으로 한 트리가 다른 트리의 하위 트리인지 확인하는 방법

    두 개의 이진 트리가 주어졌을 때, 두 번째 트리가 첫 번째 트리의 하위 트리(subtree)에 해당하는지 판별하는 문제입니다. 하위 트리란 어떤 노드를 루트로 삼는 부분 트리가, 대상 트리와 구조 및 노드 값 모두에서 완전히 일치하는 경우를 의미합니다. 예를 들어 아래와 같은 두 트리가 있다고 가정해 보겠습니다. 두 번째 트리는 첫 번째 트리의 노드 4를 루트로 하는 부분과 정확히 일치하므로, 결과는 True가 됩니다. 접근 방법 이 문제는 재귀(recursion)를 활용하면 깔끔하게 해결할 수 있습니다. 알고리즘은 다음 단계

  20. 파이썬으로 스도쿠 그리드 유효성 검사하기: 완전 해결 가이드

    스도쿠 그리드 유효성 검사 문제란?9×9 크기의 스도쿠 보드가 주어졌을 때, 해당 그리드가 유효한(valid) 스도쿠인지 판별하는 프로그램을 파이썬으로 작성해 보겠습니다. 여기서 중요한 점은 빈 칸은 무시하고, 숫자가 채워진 셀만 아래 규칙에 따라 검증하면 된다는 것입니다.유효성 검사의 세 가지 기본 규칙각 행(row)에는 1부터 9까지의 숫자가 중복 없이 한 번씩만 나타나야 합니다.각 열(column)에는 1부터 9까지의 숫자가 중복 없이 한 번씩만 나타나야 합니다.그리드를 이루는 9개의 3×3 서브 박스(sub-box) 각각에도

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:181/450  20-컴퓨터/Page Goto:1 175 176 177 178 179 180 181 182 183 184 185 186 187