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

Python

  1. Python에서 타겟보다 큰 가장 작은 문자 찾기 – 이진 탐색 완벽 가이드

    문제 설명정렬된 소문자 문자 리스트 letters와 타겟 문자 t가 주어졌을 때, 리스트에 있는 요소 중 타겟보다 큰 값들 중에서 가장 작은 문자를 찾는 문제입니다.여기서 중요한 포인트는 문자가 순환(wrap around)한다는 점입니다. 즉, 타겟이 z이고 letters = [a, b]라면, 리스트의 끝에 도달하면 다시 처음으로 돌아가므로 답은 a가 됩니다.예시입력이 [c, f, j]이고 타겟이 a라면, a보다 큰 문자 중 가장 작은 것은 c이므로 출력은 c가 됩니다.접근 방법: 이진 탐색리스트가 이미 정렬되어 있으므로 이진 탐색

  2. Python으로 계단 오르기 최소 비용 문제 풀기 — 동적 프로그래밍 완벽 정리

    문제 이해하기계단 오르기 최소 비용(Min Cost Climbing Stairs) 문제는 다음과 같습니다. 계단의 i번째 칸마다 음수가 아닌 비용 cost[i]가 할당되어 있으며, 비용을 지불하면 한 칸 또는 두 칸을 오를 수 있습니다. 목표는 계단 꼭대기(floor top)에 도달하는 데 드는 최소 비용을 구하는 것이고, 시작 위치는 인덱스 0 또는 인덱스 1의 계단 중에서 자유롭게 선택할 수 있습니다.예시예를 들어 입력이 cost = [12, 17, 20]이라면 출력은 17입니다. 인덱스 1(비용 17)에서 출발해 두 칸을 오르

  3. 파이썬 알고리즘: 배열의 최댓값이 다른 모든 수의 두 배 이상인지 확인하기

    문제 개요정수 배열 nums가 주어졌다고 가정해 봅시다. 이 배열에는 항상 정확히 하나의 최댓값이 존재합니다. 우리가 확인해야 할 것은 이 최댓값이 배열 내 다른 모든 숫자보다 적어도 두 배 이상 큰지 여부입니다.조건을 만족하면 → 최댓값의 인덱스를 반환합니다.조건을 만족하지 않으면 → -1을 반환합니다.예시입력이 [3, 6, 1, 0]이라면 결과는 1입니다. 6이 배열의 최댓값이며, 나머지 숫자(3, 1, 0) 각각에 대해 6은 그 두 배보다 크기 때문입니다. 최댓값 6의 인덱스가 1이므로 반환값 역시 1이 됩니다.풀이 접근 방법

  4. 파이썬으로 푸는 최단 완성 단어(Shortest Completing Word) 문제

    문제 개요단어 목록(words)과 번호판 문자열(licensePlate)이 주어졌을 때, 번호판에 포함된 모든 문자를 담고 있는 단어 중 가장 짧은 단어를 찾는 것이 목표입니다. 이처럼 조건을 만족하는 단어를 완성 단어(completing word)라고 부릅니다.이 문제에는 몇 가지 규칙이 있습니다.대소문자는 구분하지 않습니다.정답이 반드시 존재한다고 보장됩니다.조건을 만족하는 단어가 여러 개라면, 배열에서 먼저 등장하는 단어를 반환합니다.번호판에는 같은 문자가 여러 번 나타날 수 있으므로, 필요한 개수만큼 해당 문자를 단어가 포함

  5. Python – 이진 표현에서 설정된 비트 수가 소수인 숫자 개수 구하기

    문제 설명두 정수 L과 R이 주어졌을 때, [L, R] 범위(양 끝값 포함)에 속한 숫자 중 이진 표현에서 설정된 비트(set bit)의 개수가 소수인 숫자의 개수를 구하는 것이 목표입니다.예를 들어 입력이 L = 6, R = 10이라면 결과는 4가 됩니다. 그 이유는 다음 4개의 숫자 모두 설정된 비트의 개수가 소수이기 때문입니다.6 → 110₂ (설정된 비트 2개)7 → 111₂ (설정된 비트 3개)9 → 1001₂ (설정된 비트 2개)10 → 1010₂ (설정된 비트 2개)참고로 8은 1000₂로 설정된 비트가 1개뿐이므로(1

  6. 파이썬으로 고유한 모스 부호 단어 표현 개수 구하기

    단어 목록이 주어졌을 때, 각 단어는 그 단어를 구성하는 글자들의 모스 부호를 이어 붙인 형태로 표현할 수 있습니다. 예를 들어 cba라는 단어는 -.-..--...로 나타낼 수 있으며, 이는 -.-. + -... + .-를 연결한 것입니다. 이러한 연결 방식을 단어의 변환(transformation)이라고 부릅니다.국제 모스 부호(International Morse Code)는 각 영문 글자를 점(.)과 선(-)의 조합으로 매핑하는 표준 인코딩을 정의합니다. 예를 들어 a는 .-, b는 -..., c는 -.-.에 대응됩니다.알파벳

  7. Python으로 문자열 작성 시 필요한 줄 수 계산하기

    문제 개요문자열 S가 주어졌을 때, 이 문자열의 글자들을 왼쪽에서 오른쪽 방향으로 한 줄씩 작성한다고 가정해 봅시다. 각 줄의 최대 너비는 100 단위이며, 어떤 글자를 작성했을 때 해당 줄의 너비가 100 단위를 초과하게 된다면, 그 글자는 다음 줄로 넘어가 작성됩니다.또한 배열 widths가 함께 주어집니다. 여기서 widths[0]은 글자 a의 너비, widths[1]은 b의 너비를 의미하며, 이후 글자들도 같은 방식으로 대응됩니다.구해야 할 답문자열 S의 글자가 하나라도 포함된 줄은 총 몇 줄인가?마지막 줄에서 실제로 사용된

  8. 파이썬으로 평면 위 점들에서 만들 수 있는 가장 큰 삼각형 넓이 구하기

    평면 위에 놓인 점들의 좌표 목록이 주어졌을 때, 그중 임의의 3개 점을 골라 만들 수 있는 가장 큰 삼각형의 넓이를 구하는 문제입니다.예를 들어 입력이 [[0,0],[0,1],[1,0],[0,2],[2,0]]과 같다면, 출력은 2가 됩니다.해결 접근 방법이 문제는 모든 가능한 세 점의 조합을 확인하면서 각 조합으로 만들어지는 삼각형의 넓이를 계산하고, 그중 최댓값을 찾는 방식으로 해결할 수 있습니다. 삼각형의 넓이는 다음과 같은 신발끈 공식(Shoelace Formula)을 이용해 구합니다.넓이 = 0.5 × |x₁(y₂ − y₃

  9. 파이썬으로 문자열에서 큰 그룹의 시작·끝 위치 찾기

    문제 설명소문자로만 이루어진 문자열 S가 있다고 가정해 봅시다. 이 문자열은 같은 문자가 연속해서 나타나는 여러 개의 그룹으로 구성됩니다. 예를 들어 문자열 S가 abbxxxxzyy라면, a, bb, xxxx, z, yy라는 다섯 개의 그룹으로 나눌 수 있습니다.이때 3개 이상의 문자를 포함하는 그룹을 큰 그룹(large group)이라고 정의합니다. 우리가 구해야 할 것은 문자열 내 모든 큰 그룹의 시작 인덱스와 끝 인덱스입니다.예를 들어 입력이 abcdddeeeeaabbbcd라면, 결과는 [[3,5], [6,9], [12,14]

  10. 파이썬으로 이미지 수평 뒤집기 & 반전하기: 단계별 구현 가이드

    문제 개요이진 행렬(binary matrix) A가 하나의 이미지를 나타낸다고 가정해 보겠습니다. 우리는 이 이미지를 수평으로 뒤집은(flip) 후, 다시 반전(invert)시켜서 최종 결과 이미지를 반환해야 합니다.여기서 각 연산의 의미는 다음과 같습니다.수평 뒤집기: 이미지의 각 행을 좌우로 거꾸로 배치합니다.반전: 모든 0을 1로, 모든 1을 0으로 바꿉니다.입력 예시110101000출력 결과100010111예를 들어 첫 번째 행 [1, 1, 0]은 뒤집으면 [0, 1, 1]이 되고, 여기에 반전을 적용하면 [1, 0, 0]이

  11. Python으로 두 사각형의 겹침 여부 확인하기

    사각형은 리스트 [x1, y1, x2, y2]로 표현할 수 있습니다. 여기서 (x1, y1)은 사각형의 왼쪽 아래 꼭짓점 좌표이고, (x2, y2)는 오른쪽 위 꼭짓점 좌표입니다.두 사각형이 겹친다는 것은 두 사각형의 교집합 영역(면적)이 양수일 때를 의미합니다. 따라서 모서리나 변만 맞닿아 있는 경우에는 겹침으로 판단하지 않습니다.축에 평행한(axis-aligned) 두 개의 사각형이 주어졌을 때, 이 두 사각형이 서로 겹치는지 확인하는 것이 이 문제의 목표입니다.예를 들어 입력이 다음과 같다면,R1 = [0,0,2,2]R2 =

  12. 파이썬 버디 문자열(Buddy Strings): 한 번의 문자 교환으로 두 문자열을 같게 만들 수 있는지 확인하기

    알파벳 소문자로 이루어진 두 개의 문자열 A와 B가 주어졌을 때, A에서 단 두 글자를 서로 바꿔(swap) B와 동일한 문자열을 만들 수 있는지 확인하는 문제입니다.예를 들어 A = ba, B = ab가 입력으로 주어지면, A의 첫 번째 글자 b와 두 번째 글자 a를 맞바꾸면 ab가 되므로 결과는 True입니다.문제 해결 접근 방식이 문제는 다음과 같은 순서로 판단하면 효율적으로 해결할 수 있습니다.먼저 A와 B의 길이가 다르면 False를 반환합니다. 길이가 다른 문자열은 아무리 교환해도 같아질 수 없기 때문입니다.두 문자열을

  13. 파이썬으로 푸는 레모네이드 잔돈 문제(Lemonade Change) 완벽 가이드

    문제 소개 레모네이드 가게가 하나 있다고 상상해 봅시다. 레모네이드 한 잔의 가격은 5달러이며, 손님들은 줄을 서서 한 번에 한 명씩 차례대로 구매합니다. 각 손님은 레모네이드를 한 잔만 구매할 수 있고, 5달러, 10달러, 20달러 지폐 중 하나로 결제합니다. 판매자인 우리는 모든 손님에게 정확한 잔돈을 돌려주어야 하며, 결과적으로 각 손님의 실질 지불 금액이 5달러가 되도록 거래를 마무리해야 합니다. 단, 처음에는 손에 든 잔돈이 하나도 없습니다. 따라서 우리가 확인해야 할 것은, 모든 손님에게 올바른 잔돈을 제공할 수 있는지

  14. 파이썬 바이너리 갭(Binary Gap): 이진수에서 연속된 1 사이의 최대 거리 구하기

    바이너리 갭(Binary Gap) 문제란?양의 정수 N이 주어졌을 때, N을 이진수로 표현했을 때 나타나는 두 개의 연속된 1 사이의 최대 거리를 구하는 것이 이번 문제의 핵심입니다. 만약 이진 표현에 1이 하나뿐이거나 연속된 1의 쌍이 존재하지 않는다면 0을 반환하면 됩니다.예시로 이해하기입력값이 22라고 가정해 보겠습니다. 22를 이진수로 변환하면 10110이 됩니다.22의 이진 표현에는 1이 세 개 있습니다.연속된 1의 쌍은 두 개입니다.첫 번째 쌍의 거리는 2이고, 두 번째 쌍의 거리는 1입니다.따라서 정답은 두 거리 중 더

  15. 파이썬으로 풀어보는 로봇 시뮬레이션: 원점에서의 최대 유클리드 거리 구하기

    무한한 격자(grid) 위에 한 대의 로봇이 있다고 가정해 봅시다. 로봇은 좌표 (0, 0)에서 출발하며 처음에는 북쪽(위쪽)을 바라보고 있습니다. 이 로봇은 다음과 같은 세 종류의 명령을 받을 수 있습니다.-2: 왼쪽으로 90도 회전-1: 오른쪽으로 90도 회전1부터 9 사이의 값: 해당 값만큼 앞으로 전진또한 obstacles(장애물) 배열이 주어집니다. i번째 장애물은 격자점 (obstacles[i][0], obstacles[i][1])에 위치하며, 로봇이 해당 지점으로 이동하려고 하면 실제로는 그 자리에 머무르지 못하고 이전

  16. 3D 큐브 투영 영역 구하기 – 파이썬 알고리즘 풀이

    문제 설명N×N 격자가 하나 주어지고, 그 위에 x, y, z축에 평행하게 정렬된 1×1×1 크기의 정육면체(큐브)들을 놓는다고 가정해 보겠습니다. 여기서 각 값 v = grid[i][j]는 격자 칸 (i, j) 위에 v개의 큐브가 쌓여 있는 탑을 의미합니다. 우리는 이 큐브들을 xy, yz, zx 세 평면에 투영한 면적을 구해야 합니다. 다시 말해, 위에서 본 모습(top), 앞에서 본 모습(front), 옆에서 본 모습(side)의 투영 면적을 모두 더한 값을 찾으면 됩니다.예를 들어 입력이 [[1,2],[3,4]]라면 출력은

  17. 파이썬(Python)으로 3D 입체 도형의 표면적 계산하기

    문제 개요N×N 크기의 격자 위에 1×1×1 크기의 정육면체를 쌓는 상황을 생각해 봅시다. 각 격자 칸의 값 v = grid[i][j]는 해당 위치 (i, j) 위에 쌓인 정육면체의 개수, 즉 기둥(탑)의 높이를 의미합니다. 이렇게 만들어진 전체 입체 도형의 표면적(surface area)을 구하는 것이 목표입니다.예를 들어 입력이 [[1,2],[3,4]]라면 결과값은 34가 됩니다.접근 방법이 문제의 핵심은 인접한 기둥끼리 맞닿아 숨겨지는 면을 빼 주는 것입니다. 전체 표면적은 다음 세 부분으로 나누어 생각할 수 있습니다.윗면과

  18. Python으로 푸는 특수 등가(Special-Equivalent) 문자열 그룹 문제

    문제 개요문자열 배열 A가 주어졌다고 가정해 보겠습니다. 여기서 한 번의 이동(move)이란 문자열 S에서 짝수 인덱스에 있는 두 문자를 서로 교환하거나, 홀수 인덱스에 있는 두 문자를 서로 교환하는 연산을 의미합니다.두 문자열 S와 T가 특수 등가(special-equivalent) 관계라는 것은, 임의의 이동을 원하는 만큼 수행했을 때 S가 T와 완전히 같아질 수 있다는 뜻입니다. 예를 들어 S = zzxy와 T = xyzz는 특수 등가입니다. 먼저 S[0]과 S[2]를 교환하여 xzzy를 만들고, 이어서 S[1]과 S[3]을

  19. 파이썬으로 풀어보는 최소 범위 I 문제: 배열 요소 조정으로 최대·최솟값 차이 줄이기

    정수로 이루어진 배열 A가 주어졌을 때, 각 원소 A[i]에 대해 [-K, K] 범위 내의 임의의 값 x를 선택하여 더할 수 있다고 가정해 봅시다. 이 과정을 모든 원소에 적용하면 새로운 배열 B가 만들어집니다. 이때 우리가 구해야 할 것은 배열 B의 최댓값과 최솟값 사이의 차이를 최소화하는 것입니다.예를 들어, 입력이 A = [0, 10], K = 2라고 해 보겠습니다. 이 경우 B = [2, 8]이 될 수 있으므로, 정답은 8 - 2 = 6입니다.문제 해결 접근 방식이 문제는 직관적인 관찰 하나만으로 간단히 해결할 수 있습니다.

  20. 파이썬으로 최근 호출 수 세기: 큐를 활용한 RecentCounter 클래스 구현

    문제 개요최근 요청의 개수를 세는 RecentCounter 클래스를 작성한다고 가정해 보겠습니다. 이 클래스에는 ping(t)라는 단 하나의 메서드가 있으며, 매개변수 t는 밀리초(ms) 단위의 시간을 나타냅니다.ping(t)를 호출하면 현재 시점부터 3000밀리초 전까지의 범위, 즉 [t - 3000, t] 구간에서 발생한 모든 핑(ping)의 개수를 반환합니다. 당연히 현재 호출된 핑도 개수에 포함됩니다. 또한 ping을 호출할 때마다 t 값은 항상 이전 호출보다 엄격하게 커진다는 것이 보장됩니다.예를 들어 ping(1), pi

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:147/450  20-컴퓨터/Page Goto:1 141 142 143 144 145 146 147 148 149 150 151 152 153