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

Python

  1. Python으로 2차원 행렬에서 고유한 섬의 개수 찾기

    문제 설명2차원 이진 행렬(binary matrix)이 주어졌을 때, 행렬 안에 존재하는 서로 다른(고유한) 섬의 개수를 구하는 문제입니다. 여기서 1은 육지를, 0은 물을 나타내며, 섬이란 서로 인접해 있는 1들의 집합으로 그 둘레가 물로 둘러싸여 있는 영역을 의미합니다. 두 섬의 모양이 다르다면 서로 다른 섬으로 간주합니다.예를 들어 입력이 다음과 같다고 가정해 보겠습니다.100001010101101001001000011011이 경우 출력 결과는 4가 됩니다. 즉, 모양이 서로 다른 고유한 섬이 총 4개 존재한다는 뜻입니다.해결

  2. 파이썬으로 1부터 n까지 순열 중 k번째 사전순 순열 찾는 프로그램 구현

    문제 설명두 개의 값 n과 k가 주어졌을 때, 1부터 n까지의 숫자 목록 [1, 2, ..., n]을 사전순(lexicographic order)으로 배열해 생성되는 모든 순열 중에서 k번째 순열을 문자열 형태로 찾는 것이 목표입니다.예를 들어 n = 4라면 아래와 같이 총 24개(4!)의 순열이 순서대로 만들어집니다.[1234, 1243, 1324, 1342, 1423, 1432, 2134, 2143, 2314, 2341, 2413, 2431, 3124, 3142, 3214, 3241, 3412, 3421, 4123, 4132,

  3. Python에서 길이가 k 이상인 하위 리스트의 최대 평균 구하기

    문제 소개 숫자로 이루어진 리스트 nums와 정수 k가 주어졌을 때, 길이가 k 이상인 연속된 하위 리스트 중에서 가장 큰 평균값을 찾는 프로그램을 만들어 보겠습니다. 예를 들어 입력이 nums = [2, 10, -50, 4, 6, 6], k = 3이라면 결과는 5.33333333이 됩니다. 하위 리스트 [4, 6, 6]의 평균값이 가장 크기 때문입니다. 접근 방법: 답에 대한 이진 탐색 모든 가능한 하위 리스트를 일일이 확인하는 것은 매우 비효율적입니다. 대신 답에 대한 이진 탐색(Binary Search on Answer) 기

  4. 파이썬으로 물 칸 하나를 육지로 바꿔 만들 수 있는 가장 큰 섬 찾기

    문제 소개 1은 육지를, 0은 물을 나타내는 이진 행렬(binary matrix)이 주어집니다. 여기서 섬(island)이란 물에 둘러싸여 있는 1들의 집합을 의미합니다. 우리가 구해야 할 것은 가장 큰 섬의 크기이며, 단 한 번 물 칸 하나를 육지 칸으로 변경할 수 있습니다. 예를 들어 입력 행렬이 다음과 같다고 해보겠습니다. 101000110111 이 경우 정답은 7입니다. 두 번째 행의 첫 번째 칸(물)을 육지로 바꾸면 왼쪽 위의 작은 섬과 아래쪽의 큰 섬이 하나로 연결되기 때문입니다. 변경 후의 행렬은 다음과 같습니다. 1

  5. Python으로 LFU(최소 사용 빈도) 캐시 구현하기

    이번 글에서는 LFU(Least Frequently Used, 최소 사용 빈도) 캐시 시스템을 Python으로 구현하는 방법을 알아보겠습니다. LFU 캐시는 사용 빈도가 가장 낮은 데이터를 우선적으로 제거하는 캐시 교체 정책으로, 데이터베이스나 웹 서버 등 다양한 시스템에서 활용됩니다.LFU 캐시의 주요 연산구현해야 할 자료구조는 다음 두 가지 연산을 지원해야 합니다.get(key) – 키가 캐시에 존재하면 해당 값을 반환하고, 존재하지 않으면 -1을 반환합니다.set(key, value) – 키가 아직 캐시에 없다면 새로운 키-값

  6. Python으로 숫자와 그보다 작은 다음 숫자 사이의 최대 차이 찾기

    숫자 리스트 nums가 주어졌을 때, 어떤 숫자와 그보다 작은 다음 숫자 사이에 존재하는 최대 차이를 구하는 문제입니다. 핵심 목표는 이 문제를 선형 시간 O(n) 안에 해결하는 것입니다.예를 들어 입력이 nums = [14, 2, 6, 35, 12]라면 출력은 21이 됩니다. 35와 14 사이의 차이인 21이 가장 크기 때문입니다.접근 방법: 버킷(Bucket) 기법 활용단순히 정렬한 뒤 인접한 두 수의 차이를 비교하면 O(n log n)이 걸립니다. 하지만 버킷 정렬과 비둘기집 원리(Pigeonhole Principle)를 활용

  7. 파이썬으로 합이 k 이하인 직사각형의 최대 합 구하기

    문제 개요2차원 행렬과 하나의 값 k가 주어졌을 때, 합이 k 이하(sum ≤ k)가 되는 직사각형 영역 중에서 가장 큰 합을 찾는 것이 목표입니다. 여기서 직사각형은 행렬 안에서 연속된 행과 열로 이루어진 부분 행렬을 의미합니다.예를 들어 다음과 같은 행렬이 있다고 가정해 보겠습니다.5-2710k = 15일 때 정답은 12입니다. 첫 번째 열로 이루어진 직사각형 [5, 7]의 합이 12로, 15를 넘지 않으면서 만들 수 있는 최대 합이기 때문입니다.풀이 접근 방법이 문제는 다음과 같은 아이디어로 해결할 수 있습니다. 먼저 위쪽 행

  8. Python으로 무한 격자에 땅 블록을 하나씩 추가하며 섬의 개수 구하기

    물로만 이루어진 무한한 2차원 격자(grid)가 있다고 가정해 보겠습니다. 우리는 이 격자 위에 땅 블록을 하나씩 추가할 수 있습니다. 각 좌표가 [r, c] 형태(r은 행, c는 열)로 담긴 리스트 land_requests가 주어졌을 때, 땅 블록을 하나씩 추가할 때마다 현재 존재하는 섬(island)의 개수를 순서대로 기록한 리스트를 구하는 것이 목표입니다.예를 들어 입력이 다음과 같다면,land_requests = [[1, 1], [2, 4], [1, 2], [1, 4], [1, 3]]출력은 [1, 2, 2, 2, 1]이 됩니

  9. 파이썬으로 두 수집가가 모을 수 있는 최대 코인 수 구하기

    문제 개요 각 칸에 코인의 개수가 적혀 있는 2차원 행렬이 있다고 가정해 봅시다. 두 명의 친구가 이 행렬에서 코인을 수집하며, 시작 시점에 한 명은 왼쪽 위 모서리에, 다른 한 명은 오른쪽 위 모서리에 위치합니다. 두 수집가는 다음 규칙을 따라 움직입니다. (i, j) 칸에 있는 수집가는 (i+1, j-1), (i+1, j), (i+1, j+1) 세 칸 중 하나로 이동할 수 있습니다. 어떤 칸에 도착하면 해당 칸의 모든 코인을 수집하며, 그 칸은 비게 됩니다. 수집가는 제자리에 머무를 수도 있지만, 각 칸의 코인은 단 한 번만

  10. Python으로 패리티가 다른 값에 도달하는 최소 점프 횟수 구하기 (BFS 알고리즘)

    문제 소개숫자로 이루어진 리스트 nums가 주어졌다고 가정해 봅시다. 현재 인덱스 i에 있을 때, 목표 위치가 리스트 범위 안에 존재하는 경우에 한해 i + nums[i] 또는 i − nums[i]로 점프할 수 있습니다. 우리가 구해야 할 것은, 입력 순서를 그대로 유지하면서 자기 자신과 패리티(홀수·짝수 여부)가 다른 값에 도달하기 위해 필요한 최소 점프 횟수입니다. 아무리 점프를 반복해도 패리티가 다른 숫자에 도달할 수 없다면 결과는 −1로 설정합니다.예를 들어, 입력이 numbers = [7, 3, 4, 5, 6, 9, 6,

  11. 파이썬으로 숫자 하나를 지웠을 때 모든 빈도가 같아지는 최장 시퀀스 찾기

    숫자로 이루어진 리스트가 주어졌을 때, 시퀀스에서 딱 하나의 숫자를 삭제했을 때 남은 모든 숫자의 등장 횟수가 서로 같아지는 가장 긴 시퀀스의 길이를 구하는 것이 이번 문제의 목표입니다. 예를 들어 입력이 numbers = [2, 4, 4, 7, 7, 6, 6]이라면 출력은 7입니다. 여기서 숫자 2는 한 번만 등장하므로 2를 완전히 제거하면 4, 7, 6이 각각 두 번씩 등장해 빈도가 완벽하게 일치하기 때문입니다. 문제 해결 접근 방법 핵심 아이디어는 배열을 왼쪽부터 순회하면서 매 시점의 빈도 상태를 추적하고, 현재까지 확인된 접

  12. 파이썬으로 최종 점수가 n점 이하일 확률 계산하는 프로그램

    독특한 규칙의 게임을 한다고 가정해 보겠습니다. 세 개의 값 n, k, h가 주어지며, 우리는 0점에서 시작합니다. 매번 1부터 h까지(양 끝값 포함) 범위에서 숫자 하나를 무작위로 선택하고, 선택한 숫자만큼 점수를 얻습니다. 누적 점수가 최소 k점 이상이 되는 순간 게임은 종료됩니다. 이때 최종 점수가 n점 이하일 확률을 구하는 것이 목표입니다. 모든 숫자는 동일한 확률로 선택되며, 각 결과는 서로 독립적입니다.예를 들어 입력이 n = 2, k = 2, h = 10이라면 출력은 0.11이 됩니다.문제 해결 접근 방법이 문제는 재귀

  13. 파이썬으로 목표 지점까지 도달하는 최소 이동 횟수 구하기 (DFS 풀이)

    문제 개요 1차원 도로 위를 달리는 자동차가 있다고 가정해 봅시다. 자동차의 현재 위치(position)는 0이며, 초기 속도(speed)는 1입니다. 이때 다음 두 가지 연산 중 하나를 선택해 수행할 수 있습니다. 가속(Acceleration): position := position + speed, speed := speed × 2 후진 기어(Reverse Gear): speed가 양수면 speed := −1, 그렇지 않으면 speed := 1 목표 지점(target)에 정확히 도달하기 위해 필요한 최소 이동 횟수를 구하는 것

  14. Python으로 괄호 안의 문자열을 재귀적으로 뒤집는 프로그램

    문제 소개 소문자 알파벳과 괄호 ( , ) 로 구성된 문자열 s가 주어졌다고 가정해 보겠습니다. 이때 괄호로 묶인 모든 문자열을 재귀적인 방식으로 뒤집고, 그 결과 문자열을 반환하는 것이 목표입니다. 예를 들어 입력이 s = back(aps)ce라면, 괄호 안의 aps가 뒤집혀 spa가 되므로 최종 출력은 backspace가 됩니다. 해결 전략 이 문제는 스택(Stack)과 방향성 탐색 함수를 조합하면 깔끔하게 해결할 수 있습니다. 먼저 여는 괄호와 닫는 괄호의 짝 위치를 미리 매핑해 두고, 탐색 도중 괄호를 만나면 진행 방향을

  15. 파이썬에서 특정 문자열을 포함하는 가장 짧은 부분 문자열을 찾는 방법

    문제 소개두 개의 문자열 s와 t가 주어졌을 때, 문자열 s 안에서 t가 부분 수열(subsequence)로 포함되는 가장 짧은 부분 문자열을 찾아야 합니다. 만약 조건을 만족하는 부분 문자열이 존재하지 않으면 빈 문자열()을 반환하고, 가장 짧은 후보가 여러 개라면 가장 왼쪽에 있는 것을 선택합니다.예를 들어 입력이 s = abcbfbghfb, t = fg라면 출력은 fbg가 됩니다. 문자열에서 f(인덱스 4)와 g(인덱스 6) 사이의 fbg가 조건을 만족하는 가장 짧은 구간이기 때문입니다.알고리즘 접근 방식이 문제는 동적 계획법

  16. 파이썬(Python) 중첩 딕셔너리 리스트를 Pandas 데이터프레임으로 변환하는 방법

    개요실무에서 파이썬은 CSV, JSON 등 다양한 형식의 여러 데이터 소스로부터 정보를 받게 되며, 이런 데이터는 파이썬의 리스트(list)나 딕셔너리(dictionary) 형태로 변환되곤 합니다. 하지만 pandas와 같은 라이브러리로 계산이나 분석을 수행하려면, 먼저 데이터를 데이터프레임(DataFrame) 구조로 바꿔야 합니다.이 글에서는 요소가 중첩 딕셔너리(nested dictionary)로 구성된 파이썬 리스트를 pandas 데이터프레임으로 변환하는 방법을 단계별로 살펴봅니다.변환 절차는 크게 세 단계로 이루어집니다.중첩

  17. 파이썬 Kivy AnchorLayout 완벽 가이드 - 위젯 위치 지정하기

    Kivy는 멀티터치 앱처럼 혁신적인 사용자 인터페이스를 갖춘 애플리케이션을 빠르게 개발할 수 있도록 지원하는 오픈소스 파이썬 라이브러리입니다. 안드로이드 애플리케이션은 물론 데스크톱 애플리케이션 개발에도 폭넓게 활용되고 있습니다. 이번 글에서는 Kivy에서 제공하는 앵커 레이아웃(AnchorLayout)을 활용해 위젯을 원하는 위치에 배치하는 방법을 자세히 살펴보겠습니다.AnchorLayout이란?AnchorLayout을 사용하면 위젯을 화면의 특정 모서리나 경계에 손쉽게 고정할 수 있습니다. kivy.uix.anchorlayout

  18. Python Kivy BoxLayout 위젯 완벽 가이드 – 버튼 레이아웃 만들기

    Kivy란 무엇인가? Kivy는 멀티터치 앱처럼 혁신적인 사용자 인터페이스(UI)를 활용하는 애플리케이션을 빠르게 개발할 수 있도록 도와주는 오픈 소스 Python 라이브러리입니다. 안드로이드 앱은 물론 데스크톱 애플리케이션 개발에도 폭넓게 사용되고 있습니다. 이 글에서는 Kivy의 BoxLayout 위젯을 활용해 서로 다른 방향(가로·세로)과 다양한 색상을 가진 버튼들을 배치하는 방법을 단계별로 살펴보겠습니다. BoxLayout의 기본 구조 아래 예제 코드는 다음과 같은 계층 구조로 화면을 구성합니다. 외부 박스(outerB

  19. Python Kivy – 버튼 클릭 이벤트 처리 방법 완벽 정리

    Kivy란 무엇인가?Kivy는 멀티터치 앱처럼 혁신적인 사용자 인터페이스(UI)를 가진 애플리케이션을 빠르게 개발할 수 있도록 지원하는 오픈소스 파이썬 라이브러리입니다. 안드로이드 모바일 앱은 물론 데스크톱 애플리케이션 개발에도 폭넓게 활용되고 있습니다.이번 글에서는 Kivy에서 버튼이 눌렸을 때 발생하는 이벤트를 처리하는 방법을 실제 예제와 함께 살펴보겠습니다.참고로 Kivy가 아직 설치되어 있지 않다면, 아래 명령어로 간단히 설치할 수 있습니다.pip install kivy예제 개요아래 예제에서는 수평(horizontal) Bo

  20. Python으로 MIME Quoted-Printable 데이터 인코딩 및 디코딩하는 방법

    실무에서 데이터를 다루다 보면 항상 일반 ASCII 문자만 포함되어 있지는 않습니다. 예를 들어, 영어가 아닌 다른 언어로 작성된 이메일이 대표적인 경우입니다. Python은 MIME(Multipurpose Internet Mail Extensions) 기반 모듈을 활용해 이러한 특수 문자를 손쉽게 처리할 수 있는 메커니즘을 제공합니다. 이 글에서는 이메일 본문이나 일반 입력 데이터에 포함된 특수 문자를 인코딩하고 디코딩하는 방법을 살펴보겠습니다.email 패키지 활용하기Python의 email 패키지에는 mime과 charset

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:205/450  20-컴퓨터/Page Goto:1 199 200 201 202 203 204 205 206 207 208 209 210 211