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

Python

  1. 파이썬으로 target 문자열을 만들기 위한 source 부분 수열의 최소 개수 찾기

    두 문자열 source와 target이 주어졌을 때, source의 부분 수열(subsequence)들을 여러 개 추출하여 이어 붙였을 때 target과 완전히 같은 문자열이 되도록 하는 최소 개수를 구하는 문제입니다. 만약 어떻게 조합해도 target을 만들 수 없다면 -1을 반환해야 합니다.예를 들어 source = xyz, target = xyzyzz가 입력으로 주어지면, [xyz + yz + z]처럼 세 개의 부분 수열을 이어 붙일 수 있으므로 출력은 3이 됩니다.문제 해결 접근 방법이 문제는 그리디(greedy) 방식으로

  2. 파이썬으로 문자열 s의 부분 수열에 해당하는 단어 개수 찾기

    단어 목록(words)과 하나의 문자열 s가 주어졌을 때, 목록에 포함된 문자열 중에서 s의 부분 수열(subsequence)에 해당하는 것의 개수를 구하는 문제입니다.예를 들어 words = [xz, xw, y], s = xyz가 입력으로 주어지면 결과는 2가 됩니다. xz와 y는 xyz의 부분 수열이지만, xw는 그렇지 않기 때문입니다.문제 해결 접근 방법이 문제는 각 단어를 다음에 매칭해야 할 글자를 기준으로 버킷(bucket)에 분류한 뒤, 문자열 s를 한 글자씩 순회하며 진행 상황을 갱신하는 방식으로 효율적으로 풀 수 있습

  3. 파이썬으로 이진 트리의 모든 루트-리프 경로 숫자 합 구하기

    각 노드에 0부터 9 사이의 한 자릿수가 저장되어 있는 이진 트리가 있다고 가정해 보겠습니다. 루트(root)에서 리프(leaf)까지 이어지는 각 경로는 노드의 값을 순서대로 이어 붙여 하나의 숫자를 만들어냅니다. 이때 우리가 구해야 하는 것은 트리 안의 모든 경로가 나타내는 숫자들의 총합입니다.예를 들어 입력 트리가 다음과 같다면,출력은 913이 됩니다. 루트에서 리프까지의 경로는 세 가지가 있으며, 각 경로가 만드는 숫자는 다음과 같습니다.4 → 6 = 464 → 3 → 2 = 4324 → 3 → 5 = 435따라서 전체 합은

  4. 파이썬으로 행렬에서 완전히 둘러싸인 섬의 개수 구하기

    0과 1로 이루어진 이진 행렬(binary matrix)이 있다고 가정해 보겠습니다. 여기서 1은 육지를, 0은 물을 나타냅니다. 섬이란 물에 둘러싸여 있는 1들의 집합을 의미하는데, 이번 문제에서 구해야 할 것은 바로 완전히 물에 둘러싸인 섬, 즉 행렬의 가장자리와 맞닿아 있지 않은 섬의 개수입니다.예를 들어 입력이 다음과 같다면,출력은 2가 됩니다. 전체 섬은 세 개지만, 그중 두 개만 사방이 물로 완전히 둘러싸여 있기 때문입니다.문제 해결 접근 방식: DFS(깊이 우선 탐색)이 문제는 DFS(깊이 우선 탐색)를 활용하면 효율적

  5. 파이썬으로 n명이 스위치를 조작한 뒤 켜져 있는 스위치 개수 구하기

    문제 설명 숫자 n이 주어지고, 방 안에는 n개의 스위치가 있다고 가정해 보겠습니다. 처음에 모든 스위치는 꺼져 있는 상태입니다. 이제 n명의 사람이 다음 규칙에 따라 차례로 스위치를 조작합니다. 1번 사람: 1의 배수에 해당하는 모든 스위치(즉, 전체 스위치)를 조작합니다. 2번 사람: 2의 배수(2, 4, 6, ...)에 해당하는 스위치를 조작합니다. i번 사람: i의 배수에 해당하는 스위치를 조작합니다. 목표는 모든 사람이 조작을 마친 후 최종적으로 켜져 있는 스위치의 개수를 구하는 것입니다. 예시 입력이 n = 5라면 출

  6. 파이썬으로 투표 데이터에서 최종 순위 계산하기: 높은 순위부터 낮은 순위까지

    소문자로만 구성된 문자열 리스트 votes가 있다고 가정해 보겠습니다. 각 항목은 선호도가 가장 높은 순서부터 가장 낮은 순서까지 후보자에게 표현된 투표를 의미합니다.후보자의 순위는 다음 규칙에 따라 결정됩니다.먼저 1순위(최고 선호) 득표 수가 많은 순서대로 정렬됩니다.1순위 득표 수가 같다면, 2순위 득표 수를 비교하고, 그래도 같으면 그다음 선호도 순위의 득표 수를 차례대로 비교합니다.모든 순위에서 득표 수가 동일하다면, 알파벳 순서로 최종 순위를 매깁니다.이 규칙을 적용하여 전체 팀(후보)의 최종 순위를 높은 순위부터 낮은

  7. 파이썬으로 트리 색칠하기: 인접 노드가 같은 색을 갖지 않도록 할 수 있는지 확인하는 방법

    각 노드의 값이 그 노드의 색을 나타내는 이진 트리가 있다고 가정해 보겠습니다. 트리에는 최대 2가지 색만 존재합니다. 이때 노드들의 색을 원하는 만큼 자유롭게 교환하여 연결된(인접한) 두 노드가 같은 색을 갖지 않도록 만들 수 있는지 확인해야 합니다.예를 들어 입력 트리가 다음과 같다면,출력은 True입니다. 아래 그림처럼 색을 재배치하면 인접한 노드가 서로 다른 색을 갖도록 만들 수 있기 때문입니다.해결 접근 방법이 문제는 깊이 우선 탐색(DFS)을 한 번만 수행하면 해결할 수 있습니다. 알고리즘의 단계는 다음과 같습니다.col

  8. 파이썬으로 이진 트리에서 합이 k인 경로 개수 구하기 (접두사 합 + DFS)

    문제 소개 이진 트리(binary tree)와 목표값 k가 주어졌을 때, 어떤 노드에서 시작해 그 아래 자손 노드로 내려가는 경로 중에서 노드 값들의 합이 정확히 k가 되는 고유한 경로의 개수를 세는 프로그램을 작성해 보겠습니다. 예를 들어 다음과 같은 이진 트리가 있다고 가정해 봅시다. 이때 k = 5라면 출력 결과는 2가 됩니다. 합이 5가 되는 경로가 [2, 3]과 [1, 4], 총 두 가지이기 때문입니다. 접근 방법: 접두사 합(Prefix Sum) 활용 이 문제는 접두사 합(prefix sum) 기법과 DFS(깊이 우선

  9. 파이썬으로 숲의 모든 나무가 불타는 데 걸리는 일수 구하기

    2차원 행렬로 표현된 숲이 있다고 가정해 보겠습니다. 각 칸은 다음 세 가지 상태 중 하나입니다.0: 빈 칸1: 나무가 있는 칸2: 불타고 있는 나무가 있는 칸매일, 인접한 칸(상, 하, 좌, 우 — 대각선 제외)에 불타고 있는 나무가 있으면 그 나무에도 불이 붙습니다. 우리가 구해야 할 것은 모든 나무에 불이 붙기까지 걸리는 일수이며, 만약 모든 나무를 태울 수 없다면 -1을 반환해야 합니다.예를 들어 입력이 다음과 같다고 해보겠습니다.121101111이 경우 출력은 4가 됩니다.문제 접근 방법이 문제는 너비 우선 탐색(BFS)과

  10. 파이썬으로 숫자 사이에 연산자를 배치해 24를 만들 수 있는지 확인하는 방법

    각 숫자가 1부터 9 범위 안에 있는 숫자 리스트가 고정된 순서로 주어져 있다고 가정해 보겠습니다. 숫자들 사이에 +(덧셈), -(뺄셈), *(곱셈), /(정수 나눗셈) 연산자를 배치하고, 필요하다면 괄호로 묶었을 때 결과값을 24로 만들 수 있는지 확인하는 것이 이번 문제의 목표입니다.예를 들어 입력이 nums = [5, 3, 6, 8, 7]이라면 출력은 True입니다. (5 * 3) - 6 + (8 + 7) = 24가 성립하기 때문입니다.해결 전략이 문제는 분할 정복(divide and conquer) 기반의 재귀적 탐색으로 해

  11. 파이썬으로 8-퍼즐 최소 이동 횟수 구하기: BFS 알고리즘 완벽 가이드

    문제 소개 0부터 8까지의 숫자가 중복 없이 하나씩 배치된 3×3 보드가 있다고 가정해 봅시다. 숫자 0은 상하좌우로 인접한 칸의 숫자와 자유롭게 맞바꿀 수 있습니다. 목표는 보드의 모든 숫자를 순서대로 정렬된 상태로 만드는 것이며, 이때 필요한 최소 이동 횟수를 구해야 합니다. 예를 들어 입력 보드가 다음과 같다면, 312475680 출력은 4가 됩니다. 접근 방법: 너비 우선 탐색(BFS) 8-퍼즐은 그래프 탐색 문제로 바꿔 생각할 수 있습니다. 보드의 각 상태를 하나의 노드로 보고, 0을 한 칸 움직일 때마다 인접한 상태로

  12. 파이썬으로 k번 이동 후 시작 지점(인덱스 0)으로 돌아오는 경로의 수 구하기

    길이가 n인 리스트의 인덱스 0 위치에 서 있다고 가정해 보겠습니다. 각 단계에서 우리는 오른쪽으로 한 칸 이동하거나, 왼쪽으로 한 칸 이동하거나(리스트의 경계를 벗어나지 않는 범위에서), 또는 제자리에 그대로 머무를 수 있습니다. 이때 정확히 k번의 이동을 수행한 뒤 다시 인덱스 0으로 돌아올 수 있는 서로 다른 이동 경로가 총 몇 가지인지 구해야 합니다. 답이 매우 커질 수 있으므로 결과는 10^9 + 7로 나눈 나머지를 반환합니다. 문제 예시 예를 들어 n = 7, k = 4가 입력으로 주어지면 출력은 9가 됩니다. 가능한 이

  13. 파이썬 그리디 알고리즘으로 과제 마감일을 고려한 최대 학점 구하기

    문제 설명크기가 같은 두 개의 리스트 deadlines와 credits가 있다고 가정해 보겠습니다. 이 두 리스트는 과제 정보를 나타내며, deadlines[i]는 i번째 과제의 마감일(일 단위), credits[i]는 해당 과제를 완료했을 때 받을 수 있는 학점을 의미합니다.하나의 과제를 완료하는 데는 하루가 걸리며, 마감일 당일 또는 그 이전까지 완료해야 합니다. 또한 동시에 여러 과제를 수행할 수는 없습니다. 이때, 일부 과제를 골라 완료함으로써 얻을 수 있는 최대 학점의 합을 구하는 것이 목표입니다.입력 예시deadlines

  14. 파이썬에서 k개의 숫자를 제거한 후 인접한 값의 최대 차이 찾기

    오름차순으로 정렬된 숫자 리스트 nums가 주어졌다고 가정해 봅시다. 이 리스트에서 k개의 값을 삭제하여, 남은 값들 중 인접한 두 값의 차이가 가장 커지는 경우(인접 값 차이의 최댓값)가 가능한 한 작아지도록 만들어야 합니다. 최종적으로 그 최소화된 차이를 구하는 것이 목표입니다.예를 들어 입력이 nums = [15, 20, 30, 400, 1500]이고 k = 2라면 출력은 10이 됩니다. 400과 1500을 제거하면 [15, 20, 30]이 남고, 인접한 값들의 차이는 각각 5와 10이므로 최대 차이는 10입니다.풀이 접근 방

  15. 파이썬으로 모든 자릿수가 홀수인 n과 가장 가까운 수 찾기

    문제 정의 하나의 숫자 n이 주어졌을 때, 모든 자릿수가 홀수로 이루어진 숫자 중에서 n과 가장 가까운 값을 찾아야 합니다. 만약 두 후보 값이 n과의 거리가 같다면, 그중 더 큰 값을 반환합니다. 예를 들어 입력이 n = 243이라면 출력은 199가 됩니다. 접근 방법 이 문제는 다음 단계를 따라 해결할 수 있습니다. 첫 번째 짝수 자릿수 찾기: n을 문자열로 변환한 뒤 왼쪽부터 스캔하여 처음 등장하는 짝수 자릿수의 위치(first_even)를 기록합니다. 조기 반환: 짝수 자릿수가 하나도 없다면(first_even이 -1이면

  16. 파이썬으로 두 아나그램 문자열을 일치시키는 최소 스왑 횟수 구하기

    두 문자열 S와 T가 서로 아나그램(anagram, 동일한 문자들을 재배치한 관계)이라고 가정해 보겠습니다. 이때 구해야 할 것은 문자열 S를 T와 완전히 같게 만들기 위해 필요한 최소 스왑(문자 교환) 횟수입니다. 예를 들어 입력이 S = kolkata, T = katloka라면 결과는 3이 됩니다. [katloka(주어진 값), kotlaka, koltaka, kolkata]의 순서로 문자를 교환하면 목표를 달성할 수 있기 때문입니다. 해결 접근 방법 이 문제는 재귀 호출과 백트래킹(backtracking)을 활용해 해결할 수

  17. 파이썬으로 히스토그램에서 가장 큰 직사각형 넓이 찾기

    히스토그램의 각 막대 높이를 나타내는 숫자 리스트가 주어졌다고 가정해 봅시다. 이 문제의 목표는 막대들 아래에 만들 수 있는 가장 큰 직사각형의 넓이를 구하는 것입니다.예를 들어 입력이 nums = [3, 2, 5, 7]이라면,출력은 다음 그림처럼 10이 됩니다.해결 접근 방법이 문제는 스택(stack) 자료구조를 활용하면 O(n) 시간 복잡도로 효율적으로 해결할 수 있습니다. 핵심 아이디어는 각 막대를 기준으로 이 막대를 높이로 하는 직사각형이 좌우로 얼마나 확장될 수 있는지를 계산하는 것입니다.단계별로 살펴보면 다음과 같습니다.

  18. 파이썬으로 이진 행렬에서 1로 이루어진 가장 큰 정사각형의 면적 찾기

    이진 행렬(binary matrix)이 주어졌을 때, 행렬 안에서 1로만 이루어진 가장 큰 정사각형의 면적을 구하는 문제입니다.예를 들어 입력 행렬이 다음과 같다면,100001100000110111100011110001111000111100출력은 16이 됩니다. 가운데 4×4 크기의 1로 이루어진 정사각형이 존재하기 때문입니다(4 × 4 = 16).접근 방법: 동적 계획법(DP)이 문제는 동적 계획법을 사용하면 O(rows × cols) 시간 복잡도로 효율적으로 해결할 수 있습니다. 핵심 아이디어는 각 셀에 해당 셀을 오른쪽 아래

  19. 파이썬으로 거의 BST인 이진 트리를 정확한 BST로 복구하는 방법

    어떤 이진 트리가 있고, 이 트리가 거의 이진 탐색 트리(BST)라고 가정해 봅시다. 즉, 단 두 개의 노드 값만 서로 바뀌어 있는 상태입니다. 우리는 이 트리를 올바르게 수정하여 정상적인 이진 탐색 트리를 반환해야 합니다.예를 들어 입력이 다음과 같다면,출력은 다음과 같아야 합니다.문제 해결 접근 방식이 문제를 해결하기 위해 다음 단계를 따릅니다.초기화: prev_node := null, min_node := null, max_node := null플래그 설정: found_one := Falseroot의 중위 순회(inorder

  20. 파이썬으로 이진 트리에서 가장 긴 연속 경로의 길이 찾기

    문제 개요이진 트리가 하나 주어졌다고 가정해 봅시다. 목표는 이 트리 안에서 값이 1씩 연속적으로 증가하거나 감소하는 가장 긴 경로의 길이를 찾는 것입니다.예를 들어 입력이 아래와 같은 트리라면,가장 긴 연속 수열이 [2, 3, 4, 5, 6]이므로 출력 결과는 5가 됩니다.풀이 접근 방법이 문제는 깊이 우선 탐색(DFS)과 재귀를 활용하여 해결할 수 있습니다. 핵심 아이디어는 각 노드마다 증가 방향과 감소 방향의 최장 경로 길이를 함께 추적하는 것입니다. 알고리즘은 다음과 같이 진행됩니다.루트가 null이면 0을 반환합니다.max

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:194/450  20-컴퓨터/Page Goto:1 188 189 190 191 192 193 194 195 196 197 198 199 200