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

Python

  1. 파이썬으로 전위 순회와 후위 순회 결과에서 이진 트리 구성하기

    문제 소개전위 순회(preorder)와 후위 순회(postorder) 결과 두 개의 순회 순서가 주어졌을 때, 이 정보만으로 원래의 이진 트리를 복원하는 것이 목표입니다. 예를 들어 전위 순회가 [1,2,4,5,3,6,7], 후위 순회가 [4,5,2,6,7,3,1]이라면 아래와 같은 이진 트리가 생성됩니다.참고로 전위 순회와 후위 순회만으로는 자식이 하나뿐인 노드가 왼쪽 자식인지 오른쪽 자식인지 판별할 수 없으므로, 이 방법으로 복원되는 트리는 항상 유일하지 않을 수 있다는 점을 알아두면 좋습니다.해결 접근 방법스택(stack)을

  2. Python으로 패턴 찾아 바꾸기: 단어 목록에서 패턴과 일치하는 단어 찾기

    단어 목록과 하나의 패턴이 주어졌을 때, 그 패턴과 일치하는 단어들을 찾는 문제를 Python으로 해결하는 방법을 알아보겠습니다.문제 정의여기서 말하는 일치(match)란 다음 조건을 의미합니다. 글자 치환(permutation) p가 존재하여, 패턴 내의 모든 글자 x를 p(x)로 바꿨을 때 대상 단어가 된다면 그 단어는 패턴과 일치합니다. 즉, 글자 자체가 달라도 구조(반복 형태)가 동일하면 일치하는 것으로 간주합니다.예시입력이 [abc,deq,mee,aqq,dkd,ccc]이고 패턴이 abb라고 가정해 보겠습니다. 이때 출력은

  3. Python으로 유효한 괄호 문자열 만들기: 필요한 최소 괄호 추가 개수 구하기

    문제 개요( 와 ) 두 종류의 괄호로만 이루어진 문자열 S가 주어졌을 때, 임의의 위치에 최소 개수의 괄호를 추가하여 전체 문자열이 유효한(valid) 괄호 문자열이 되도록 만드는 문제입니다.유효한 괄호 문자열은 다음 조건 중 하나를 반드시 만족해야 합니다.빈 문자열()인 경우XY 형태로 표현할 수 있는 경우 (X와 Y가 각각 유효한 문자열이며 서로 연결된 형태)(A) 형태로 표현할 수 있는 경우 (A가 유효한 문자열)예를 들어 입력 문자열이 ()))(( 라면, 짝이 맞지 않는 닫는 괄호 2개와 여는 괄호 2개가 존재하므로 총 4개

  4. 파이썬으로 풀어보는 서툰 팩토리얼(Clumsy Factorial) 알고리즘

    서툰 팩토리얼이란?양의 정수 n의 팩토리얼(factorial)은 n 이하의 모든 양의 정수를 곱한 값입니다. 예를 들어 factorial(10) = 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1과 같습니다.이번 글에서는 일반적인 팩토리얼이 아닌 서툰 팩토리얼(clumsy factorial)을 구해 보겠습니다. 서툰 팩토리얼은 정수를 내림차순으로 사용하되, 곱셈 연산을 곱하기(*), 나누기(/), 더하기(+), 빼기(-)라는 고정된 순서로 순환하는 연산들로 교체하는 방식입니다.예를 들어 clumsy(10)은 다

  5. Python으로 K로 나누어 떨어지는 가장 작은 1로만 이루어진 정수 찾기

    문제 설명양의 정수 K가 주어졌을 때, K로 나누어 떨어지면서 오직 숫자 1만으로 구성된 가장 작은 양의 정수 N을 찾고, 그 N의 길이(자릿수)를 반환하는 문제입니다. 만약 조건을 만족하는 N이 존재하지 않는다면 -1을 반환해야 합니다.예를 들어 입력이 3이라면 출력은 3이 됩니다. 이때 가장 작은 답은 N = 111이며, 111은 3으로 나누어 떨어지면서 1로만 이루어진 수 중 가장 짧은 수이기 때문입니다.접근 방법이 문제는 나머지 연산(modular arithmetic)을 활용하면 효율적으로 해결할 수 있습니다. 핵심 아이디어

  6. 파이썬으로 배열 분할 후 최대 합 구하기 (동적 계획법)

    정수 배열 A가 주어졌을 때, 이 배열을 길이가 최대 K 이하인 연속된 부분 배열로 분할해야 합니다. 분할이 끝나면 각 부분 배열에 속한 모든 값은 해당 부분 배열의 최댓값으로 변경됩니다. 우리가 구해야 하는 것은 분할 후 배열에서 얻을 수 있는 가장 큰 합입니다. 예를 들어 입력이 [1, 15, 7, 9, 2, 5, 10]이고 k = 3이라면 출력은 84가 됩니다. 그 이유는 배열이 [15, 15, 15, 9, 10, 10, 10]으로 변경되기 때문입니다. 첫 세 요소(1, 15, 7)는 하나의 그룹으로 묶여 각각 15가 되고,

  7. 파이썬에서 한 번의 스왑으로 구하는 이전 순열

    문제 소개양의 정수로 이루어진 배열 A가 주어집니다(단, 값은 중복될 수 있습니다). 이때 딱 한 번의 스왑, 즉 두 원소 A[i]와 A[j]의 위치를 서로 교환하는 연산만을 사용해 만들 수 있는 순열 중에서, A보다 작으면서 사전순으로 가장 큰 순열을 찾아야 합니다. 만약 그러한 순열이 존재하지 않는다면 원래 배열을 그대로 반환하면 됩니다.예를 들어 배열이 [3, 2, 1]이라면, 2와 1을 서로 바꿔 [3, 1, 2]를 얻을 수 있습니다. [3, 1, 2]는 [3, 2, 1]보다 작은 순열 중 사전순으로 가장 큰 값입니다.알고리

  8. Python으로 바코드 재배열하기 – 인접한 바코드가 중복되지 않도록 정렬하는 알고리즘

    창고에 한 줄로 늘어선 바코드가 있다고 가정해 봅시다. i번째 바코드는 barcodes[i]로 표현됩니다. 우리의 목표는 이 바코드들을 재배열하여 인접한 두 바코드가 서로 같지 않도록 만드는 것입니다. 예를 들어 입력이 [1,1,1,2,2,2]라면, 출력은 [2,1,2,1,2,1]이 되어야 합니다.이 문제를 해결하기 위해 다음과 같은 단계를 따릅니다.문제 해결 접근 방법빈 딕셔너리(map) d를 생성합니다.바코드 배열에 존재하는 숫자들의 빈도수를 d에 저장합니다.빈 리스트 x를 만듭니다.d의 모든 키-값 쌍(숫자, 빈도수)을 x에

  9. Python으로 열을 뒤집어 모든 값이 같은 행의 최대 개수 구하기

    0과 1로만 이루어진 행렬이 주어졌다고 가정해 보겠습니다. 우리는 행렬에서 원하는 만큼의 열을 선택해 해당 열에 속한 모든 셀의 값을 한 번에 뒤집을 수 있습니다. 셀을 뒤집으면 값이 0은 1로, 1은 0으로 바뀝니다. 이렇게 여러 차례 열을 뒤집은 뒤, 행 내부의 모든 값이 서로 같은 행이 최대 몇 개가 될 수 있는지 구하는 것이 이 문제의 목표입니다. 문제 예시 예를 들어 행렬이 다음과 같다고 해보겠습니다. 000001110 이 경우 출력은 2입니다. 앞의 두 열을 뒤집으면 두 번째 행은 [1, 1, 1]이 되고, 세 번째 행은

  10. Python 백트래킹으로 푸는 문자 타일 가능성 문제

    각 타일에 한 글자씩 문자가 적혀 있는 타일 집합이 있다고 가정해 봅시다. 이때 타일들을 조합하여 만들 수 있는 비어 있지 않은 문자 시퀀스의 개수를 구해야 합니다. 예를 들어 입력이 AAB라면 출력은 8이 되며, 만들 수 있는 시퀀스는 A, B, AA, AB, BA, AAB, ABA, BAA입니다.이 문제는 백트래킹(backtracking) 기법을 활용하면 효율적으로 해결할 수 있습니다. 전체 풀이 과정은 다음 단계와 같습니다.count 배열을 매개변수로 받는 dfs() 함수를 정의합니다.합계(sum)를 0으로 초기화합니다.i를

  11. Python – 레이블 사용 제한 조건에서 가장 큰 값의 합 구하기

    문제 개요여러 개의 아이템이 주어져 있다고 가정해 봅시다. i번째 아이템은 values[i]라는 값과 labels[i]라는 레이블을 가집니다. 이 아이템들 중에서 부분 집합 S를 선택해야 하며, 다음 두 가지 조건을 만족해야 합니다.S에 포함되는 아이템의 개수는 num_wanted 이하여야 합니다.모든 레이블 L에 대해, S에 포함된 해당 레이블을 가진 아이템의 개수는 use_limit 이하여야 합니다.이때, 조건을 만족하는 부분 집합 S의 값 합계 중 가장 큰 값을 구하는 것이 목표입니다.예시예를 들어, 입력이 다음과 같다고 해보

  12. 파이썬으로 해결하는 카풀(Car Pooling) 문제 – 승객 탑승·하차 가능 여부 판별 알고리즘

    차량에 처음부터 승객을 태울 수 있는 빈 좌석이 capacity개 있다고 가정해 봅시다. 이 차량은 동쪽으로만 주행하기 때문에 방향을 바꿔 서쪽으로 되돌아갈 수 없습니다. 우리에게는 여행 정보 목록 trips가 주어지며, 각 여행은 trip[i] = [num_passengers, start_location, end_location] 형태로 표현됩니다. 즉, num_passengers는 태워야 할 승객 수를, start_location과 end_location은 승객을 태우고 내려주는 지점을 나타냅니다. 위치 값은 차량의 초기 위치에

  13. 파이썬으로 푸는 기업 항공편 예약 문제 — 차분 배열로 효율적으로 해결하기

    문제 소개n개의 항공편이 있으며, 각 항공편에는 1부터 n까지 번호가 붙어 있다고 가정해 보겠습니다. 항공편 예약 목록이 주어졌을 때, i번째 예약은 bookings[i] = [i, j, k] 형태로 표현되며, 이는 i번 항공편부터 j번 항공편까지(양 끝 포함) k개의 좌석을 예약했다는 의미입니다.목표는 길이가 n인 배열 answer를 만들어, 각 항공편에 예약된 좌석 수를 항공편 번호 순서대로 나타내는 것입니다. 예를 들어 입력이 [[1,2,10],[2,3,20],[2,5,25]]이고 n = 5라면, 출력은 [10, 55, 45,

  14. 파이썬으로 푸는 가장 긴 성과 구간(Longest Well-Performing Interval) 문제

    어떤 직원의 하루 근무 시간을 담고 있는 hours 리스트가 있다고 가정해 보겠습니다. 이때 하루 근무 시간이 8시간보다 엄격하게 많으면 그날을 피곤한 날(tiring day)이라고 정의합니다. 또한 성과가 좋은 구간(well-performing interval)은 피곤한 날의 수가 피곤하지 않은 날의 수보다 엄격하게 많은 연속된 날짜 구간을 의미합니다. 우리의 목표는 이러한 성과 구간 중 가장 긴 구간의 길이를 찾는 것입니다.예를 들어 입력이 [9, 9, 6, 0, 6, 6, 9]라면 출력은 3이 됩니다. 가장 긴 성과 구간이 [

  15. 파이썬(Python)으로 버전 번호 비교하기

    버전 번호 비교 문제란?두 개의 버전 문자열 version1과 version2를 비교하는 프로그램을 작성해야 한다고 가정해 보겠습니다. 비교 결과는 다음과 같이 반환합니다.version1 > version2이면 1 반환version1 < version2이면 -1 반환두 버전이 같으면 0 반환여기서 버전 문자열은 비어 있지 않으며, 숫자와 점(.) 문자만 포함한다고 가정할 수 있습니다. 주의할 점은 점(.)이 소수점을 의미하지 않는다는 것입니다. 점은 단순히 숫자 시퀀스를 구분하는 구분자 역할만 합니다.예를 들어 버전 2.

  16. Python에서 주어진 범위의 숫자 목록 만들기

    Python은 다양한 라이브러리와 메서드를 통해 데이터 조작과 관련된 거의 모든 요구 사항을 처리할 수 있습니다. 두 숫자 사이의 모든 숫자를 생성해야 할 때도 Python의 내장 함수나 외부 라이브러리를 활용하면 간단하게 해결할 수 있습니다. 이 글에서는 대표적인 세 가지 방법을 소개합니다.range() 함수 사용하기range() 함수는 기본적으로 0부터 시작하여 지정된 숫자까지 1씩 증가하는 숫자 시퀀스를 반환합니다. 시작 값, 끝 값, 증가 단계(간격)를 직접 지정하여 원하는 형태로 변경할 수도 있습니다.예제def getnum

  17. Python에서 리스트를 원하는 지점별로 분할하는 방법

    데이터 분석 업무에서는 수집한 데이터를 요구 사항에 맞게 가공하고 재배치해야 하는 복잡한 상황이 자주 발생합니다. 이런 과정에서 하나의 큰 리스트를 여러 개의 하위 리스트로 나눠야 할 필요가 생기곤 하는데요. 이 글에서는 Python에서 리스트를 지정한 인덱스를 기준으로 분할하는 대표적인 두 가지 방법을 예제와 함께 살펴보겠습니다.1. zip과 for 루프 활용하기이 방식은 리스트 슬라이싱(slicing)을 이용해 분할이 시작되는 지점부터 요소를 가져온 뒤, zip 함수와 for 루프를 조합해 하위 리스트를 생성합니다. 핵심 아이디

  18. Python으로 10진수를 2진수 리스트로 변환하는 방법

    Python은 다재다능한 언어로서 데이터 처리 과정에서 발생하는 다양한 요구 사항을 손쉽게 처리할 수 있습니다. 그중 하나가 10진수를 2진수로 변환하는 작업인데, 이번 글에서는 10진수를 2진수 리스트 형태로 변환하는 여러 가지 방법을 소개합니다.format 함수 활용하기포맷 문자열에 특정 서식 지정자를 사용하면 숫자를 원하는 진수(10진수, 16진수, 8진수, 2진수) 형식으로 표현할 수 있습니다. 아래 예제에서는 {0:0b} 포맷터를 사용하여 정수를 2진수 문자열로 변환한 뒤, 각 자릿수를 정수형 요소로 담은 리스트를 만듭니다

  19. 파이썬 리스트에서 특정 인덱스의 여러 요소 한 번에 삭제하기

    파이썬에서 리스트의 단일 요소를 삭제하는 것은 del 함수와 인덱스만 있으면 간단합니다. 하지만 여러 개의 인덱스에 해당하는 요소들을 한 번에 삭제해야 하는 상황도 자주 발생합니다. 이 글에서는 인덱스 목록에 지정된 위치의 요소들만 골라서 리스트에서 제거하는 두 가지 방법을 살펴봅니다. 방법 1: sorted()와 del 조합하기 첫 번째 방법은 삭제할 인덱스 값들을 담은 별도의 리스트를 만드는 것입니다. 핵심은 인덱스를 내림차순으로 정렬하는 것입니다. 앞쪽 인덱스부터 삭제하면 뒤쪽 요소들이 앞으로 당겨져 위치가 밀리기 때문에, 의

  20. Python 반복문 실행 중 딕셔너리 항목을 안전하게 삭제하는 방법

    파이썬(Python)의 딕셔너리(dictionary)는 순서가 없고, 변경 가능하며, 인덱싱이 지원되는 자료구조입니다. 각 항목은 키(key)와 값(value)으로 구성되며, 키를 통해 해당 값에 접근할 수 있습니다. 이 글에서는 반복문을 실행하는 도중에도 안전하게 딕셔너리의 항목을 삭제하는 다양한 방법을 살펴보겠습니다.del 키워드와 키를 사용하는 방법가장 기본적인 방법은 삭제할 키들을 미리 추출해 둔 뒤, del 키워드로 해당 키-값 쌍을 제거하는 것입니다. 아래 예제에서는 리스트 컴프리헨션(list comprehension)을

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:139/450  20-컴퓨터/Page Goto:1 133 134 135 136 137 138 139 140 141 142 143 144 145