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

Python

  1. Python으로 대기열의 고객에게 다른 지폐로 거스름돈을 주며 티켓 판매가 가능한지 확인하는 방법

    대기열에 서 있는 고객들이 가지고 있는 지폐를 나타내는 배열 notes가 있다고 가정해 보겠습니다. 모든 고객은 50루피(Rs 50)짜리 티켓을 구매하려고 기다리고 있으며, 사용 가능한 지폐는 [50, 100, 200] 세 종류입니다. 이때 처음에 손에 든 돈이 0루피인 상태에서, 대기열 순서대로 모든 고객에게 티켓을 판매하고 거스름돈을 정확히 줄 수 있는지 확인해야 합니다.예를 들어 입력이 notes = [50, 50, 100, 100]이라면 결과는 True입니다. 앞의 두 고객은 50루피 지폐를 그대로 받으면 되므로 거스름돈이

  2. 파이썬(Python)으로 인접 요소 조건부 스왑을 활용해 배열 정렬 가능 여부 확인하기

    문제 개요0부터 n-1 범위의 숫자로 이루어진 정렬되지 않은 배열 nums가 있다고 가정해 보겠습니다. 우리는 인접한 두 요소의 절대값 차이가 정확히 1일 때에만 두 요소를 서로 교환(swap)할 수 있으며, 이러한 교환은 필요한 만큼 몇 번이든 반복할 수 있습니다. 이때 주어진 배열을 오름차순으로 정렬할 수 있는지 판별하는 것이 이 문제의 목표입니다.예를 들어 입력이 nums = [1, 0, 3, 2, 5, 4]라고 해봅시다. (1, 0), (3, 2), (5, 4) 쌍을 각각 교환하면 [0, 1, 2, 3, 4, 5]로 정렬할

  3. Python으로 배열을 회전만 해서 정렬할 수 있는지 확인하는 방법

    숫자로 이루어진 리스트 nums가 주어졌을 때, 회전(rotation) 연산만 사용해서 이 배열을 정렬할 수 있는지 확인해야 합니다. 여기서 회전이란 배열의 끝부분에 있는 연속된 요소들을 잘라내어 배열 맨 앞으로 가져오는 작업을 의미합니다. 예를 들어 입력이 nums = [4,5,6,1,2,3]이라면 결과는 True입니다. 마지막 세 요소(1, 2, 3)를 앞쪽으로 회전시키면 [1,2,3,4,5,6]이 되어 완전히 정렬된 배열을 얻을 수 있기 때문입니다. 해결 접근 방법 이 문제는 다음 단계를 따라 해결할 수 있습니다: n :

  4. Python으로 섬에서 생존 가능한지 판단하는 알고리즘 구현하기

    어느 한적한 섬에 식료품점이 단 하나 있다고 가정해 봅시다. 이 가게는 일요일을 제외하고는 항상 영업합니다. 이 문제에서는 다음과 같은 값들을 입력으로 받습니다.N — 하루에 살 수 있는 최대 식량의 양S — 생존해야 하는 총 일수M — 하루 생존에 필요한 식량의 양오늘이 월요일이고, 앞으로 S일 동안 생존해야 한다고 가정할 때, 우리가 생존이 가능한지 여부를 확인해야 합니다. 생존이 가능하다면, 식량을 구매해야 하는 최소 일수도 함께 구해야 합니다.문제 예시예를 들어 입력값이 S = 12, N = 24, M = 3이라면 결과는 T

  5. Python으로 한 문자열을 다른 문자열로 변환 가능한지 확인하는 방법

    문자열 s와 t가 주어졌다고 가정해 봅시다. 이때 t는 모두 대문자로 이루어져 있습니다. 우리는 다음 두 가지 연산만을 사용하여 s를 t로 변환할 수 있는지 확인해야 합니다.일부 소문자를 대문자로 변환하기모든 소문자 제거하기예를 들어 입력이 s = fanToM, t = TOM이라면 결과는 True입니다. o를 O로 바꾼 뒤 나머지 소문자들(f, a, n)을 모두 제거하면 TOM을 얻을 수 있기 때문입니다.접근 방법: 동적 계획법(DP)이 문제는 동적 계획법을 활용하면 효율적으로 해결할 수 있습니다. dp[i][j]를 s의 앞에서 i

  6. Python으로 배열을 합이 같은 K개의 연속 부분 배열로 분할 가능한지 확인하는 방법

    숫자로 이루어진 배열 nums와 정수 K가 주어졌을 때, nums를 K개의 연속된(contiguous) 부분 배열로 나누면서 각 부분 배열의 원소 합이 모두 같아지도록 할 수 있는지 확인해야 합니다.문제 이해하기예를 들어 입력이 다음과 같다고 가정해 보겠습니다.nums = [2, 5, 3, 4, 7], k = 3이 경우 출력은 True가 됩니다. 배열을 아래와 같이 세 구간으로 나누면 각 부분의 합이 모두 7로 동일하기 때문입니다.(2, 5), (3, 4), (7) → 각각의 합은 모두 7해결 접근 방식이 문제는 누적 합(prefi

  7. 파이썬으로 양팔 저울과 거듭제곱 무게추를 활용해 물체 측정 가능 여부 확인하기

    문제 소개 a⁰, a¹, a², …, a¹⁰⁰처럼 거듭제곱 형태의 무게추가 주어져 있다고 가정해 보겠습니다. 여기서 a는 정수입니다. 그리고 저울의 양쪽 접시 모두에 무게추를 올릴 수 있는 양팔 저울이 하나 있습니다. 우리가 풀어야 할 문제는, 무게가 W인 어떤 물건을 이 무게추들로 측정할 수 있는지 판별하는 것입니다. 예를 들어 입력이 a = 4, W = 17이라면 결과는 True입니다. 사용 가능한 무게추는 a⁰ = 1, a¹ = 4, a² = 16이며, 16 + 1 = 17을 만들어 낼 수 있기 때문입니다. 해결 접근 방법

  8. Python에서 배열 요소의 LCM이 소수로 나누어 떨어지는지 확인하는 방법

    문제 상황 배열 nums와 값 k가 주어졌을 때, 배열에 들어 있는 모든 숫자의 최소공배수(LCM)가 k로 나누어 떨어지는지 판별해야 합니다. 예를 들어 nums = [12, 15, 10, 75], k = 10이라고 해보겠습니다. 각 요소를 소인수분해하면 12 = 2² × 3, 15 = 3 × 5, 10 = 2 × 5, 75 = 3 × 5²이므로 전체 LCM은 2² × 3 × 5² = 300입니다. 300은 10으로 나누어 떨어지기 때문에 결과는 True가 됩니다. 핵심 아이디어: LCM을 직접 구하지 않아도 된다 k가 소수(p

  9. 파이썬으로 두 이진 트리의 리프 순회가 동일한지 확인하는 방법

    문제 개요두 개의 이진 트리(binary tree)가 주어졌을 때, 두 트리의 리프 순회(leaf traversal)가 서로 동일한지 확인하는 문제입니다. 여기서 리프 순회란 트리를 왼쪽에서 오른쪽으로 훑으면서 만나는 리프(자식이 없는 노드) 값들의 순서를 의미합니다.예를 들어 아래와 같은 두 트리가 있다고 가정해 보겠습니다.두 트리의 전체 구조는 서로 다르지만, 왼쪽에서 오른쪽으로 읽었을 때 리프 값의 순서가 모두 [5, 7, 8]로 동일하므로 결과는 True가 됩니다.접근 방법: 스택을 이용한 동시 순회재귀 호출 대신 스택(st

  10. Python으로 연결 리스트가 정렬되어 있는지 확인하기 (반복문과 재귀)

    연결 리스트(Linked List)가 주어졌을 때, 이 리스트가 감소 순서(non-increasing order)로 정렬되어 있는지 확인하는 두 가지 함수를 만들어야 합니다. 하나는 반복문(iterative) 방식으로 동작하고, 다른 하나는 재귀(recursive) 방식으로 동작합니다.예를 들어 입력이 L = [15, 13, 8, 6, 4, 2]라면 각 요소가 앞의 요소보다 작거나 같은 값으로 계속 줄어들므로 출력 결과는 True가 됩니다.해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.solve_iter() 함수 정

  11. Python으로 문자열의 대문자와 소문자 순서가 일치하는지 확인하는 방법

    문제 개요영문 알파벳(대문자 또는 소문자)만 포함된 문자열 s가 주어졌을 때, 소문자들과 대문자들이 각각 동일한 순서를 따르는지 확인해야 합니다. 즉, 어떤 문자가 소문자로 여러 번 등장한다면, 같은 문자의 대문자도 동일한 횟수와 순서로 나타나야 합니다.예를 들어 입력이 s = piPpIePE라면 결과는 True입니다. 소문자 pie와 대문자 PIE가 각각 추출되며, 두 문자열은 대소문자만 다를 뿐 문자 구성과 등장 순서가 완전히 일치하기 때문입니다.해결 접근 방식이 문제는 다음 단계를 통해 해결할 수 있습니다.빈 문자열 lower

  12. 파이썬으로 부분 행렬의 모서리 요소 패리티를 반전해 행렬 A를 B로 변환할 수 있는지 확인하는 방법

    두 개의 N×M 크기 이진 행렬 A와 B가 주어졌다고 가정해 보겠습니다. 한 번의 연산에서 우리는 최소 2×2 이상의 크기를 가진 부분 행렬을 선택하고, 그 네 모서리에 위치한 요소들의 패리티(비트)를 반전시킬 수 있습니다. 목표는 이러한 연산을 원하는 만큼 수행했을 때 행렬 A를 행렬 B로 변환할 수 있는지 확인하는 것입니다.예를 들어, 다음과 같은 입력이 주어진 경우를 살펴보겠습니다.100101100위 행렬의 왼쪽 위 2×2 부분 행렬에 연산을 한 번 적용하면 아래와 같이 변환됩니다.이 경우 출력 결과는 True입니다. 왼쪽 위

  13. Python으로 정사각형 부분 행렬 전치만으로 한 행렬을 다른 행렬로 변환할 수 있는지 확인하는 방법

    문제 이해하기N×M 크기의 두 행렬 mat1과 mat2가 주어져 있다고 가정해 봅시다. 우리가 사용할 수 있는 연산은 단 하나, mat1 안의 임의의 정사각형 부분 행렬을 전치(transpose)하는 것입니다. 이 연산을 원하는 만큼 수행해서 mat1을 mat2로 만들 수 있는지 확인하는 것이 이 문제의 목표입니다.예를 들어 입력이 다음과 같다고 해보겠습니다.567123689562173689이 경우 출력은 True입니다. 첫 번째 행렬의 오른쪽 위 2×2 부분 행렬을 전치하면 두 번째 행렬과 완전히 같아지기 때문입니다.핵심 아이디어

  14. Python으로 각 행을 뒤집은 후에도 행렬이 동일하게 유지되는지 확인하는 방법

    정사각 행렬(square matrix)이 하나 주어져 있다고 가정해 보겠습니다. 이때 각 행에 대해 행 반전(row reversal) 연산을 수행한 후에도 행렬이 원래 상태 그대로 유지되는지 확인해야 합니다.핵심 아이디어행렬의 모든 행이 좌우 대칭, 즉 팰린드롬(palindrome)이라면 어떤 행을 뒤집더라도 결과는 원래 행과 완전히 동일합니다. 따라서 이 문제는 모든 행이 팰린드롬인가?를 확인하는 문제로 바꿔 생각할 수 있습니다.예를 들어 입력이 다음과 같다면,686282333출력 결과는 True가 됩니다. 첫 번째 행 [6,8,

  15. 파이썬으로 한 문자열의 최다 빈도 문자가 다른 문자열에서 같은 횟수로 나타나는지 확인하는 방법

    두 개의 문자열 s와 t가 주어졌을 때, s에서 가장 자주 등장하는 문자를 찾은 뒤, 그 문자가 t에도 정확히 같은 횟수만큼 나타나는지 확인해야 합니다. 예를 들어 입력이 s = crosssection, t = securesystem이라면 결과는 True가 됩니다. s에서 가장 빈도가 높은 문자는 s이며, t에도 s가 정확히 같은 횟수만큼 존재하기 때문입니다. 문제 해결 접근 방법 이 문제는 다음 단계를 따라 해결할 수 있습니다. freq := s의 모든 문자와 각 문자의 빈도를 저장하는 맵(딕셔너리) 생성 max_freq_cha

  16. 파이썬으로 7세그먼트 디스플레이 숫자의 거울상이 동일한지 확인하는 방법

    문제 소개자연수 n이 주어졌을 때, 이 숫자를 7세그먼트 디스플레이에 표시한 후 거울에 비춘 것처럼 좌우로 뒤집었을 때 그 모양이 원래 숫자와 완전히 동일한지 확인하는 문제입니다.예를 들어 n = 818이라면, 각 자릿수 8, 1, 8은 모두 좌우 대칭이고 순서 역시 대칭이므로 거울상 역시 818 그대로입니다. 따라서 결과는 True입니다.핵심 아이디어7세그먼트 디스플레이에서 좌우로 미러링해도 자기 자신과 똑같이 보이는 숫자는 0, 1, 8 세 가지뿐입니다. 나머지 숫자들은 반전되면 다른 모양이 되거나 유효한 숫자 형태가 아니게 됩

  17. Python으로 스택·큐 연산 시퀀스의 유효성 검사하기

    이진 리스트가 하나 주어졌을 때, 1은 push(삽입) 연산을, 0은 pop(삭제) 연산을 의미한다고 가정해 봅시다. 이때 우리가 확인해야 할 것은 이 연산 시퀀스 전체가 유효한지, 즉 실행 도중 빈 스택이나 빈 큐에서 요소를 꺼내는 상황이 발생하지 않는지 판단하는 것입니다.문제 예시예를 들어 입력이 nums = [1,0,1,1,0,1]이라면, 이 시퀀스는 [Push, Pop, Push, Push, Pop, Push] 순서로 해석됩니다. 각 시점에서 삭제할 요소가 항상 존재하므로 출력 결과는 True가 됩니다.반대로 리스트가 비어

  18. Python으로 두 정수 A와 B의 반복 덧셈만으로 목표 숫자를 만들 수 있는지 확인하는 방법

    목표 숫자(target)가 주어졌을 때, 두 개의 정수 A와 B를 원하는 만큼 여러 번 더해서 그 값을 만들 수 있는지 확인하는 문제입니다.예를 들어 Target = 26, A = 5, B = 7이 입력으로 주어진다면, 26은 7 + 7 + 7 + 5처럼 A와 B를 반복해서 더해 만들 수 있으므로 결과는 True가 됩니다.해결 접근 방법이 문제는 깊이 우선 탐색(DFS)과 메모이제이션을 활용하면 효율적으로 해결할 수 있습니다. 0부터 시작해 A 또는 B를 계속 더해가며 도달 가능한 모든 숫자를 배열에 표시하고, 최종적으로 targe

  19. 파이썬으로 숫자가 팩토리얼 소수(Factorial Prime)인지 확인하는 방법

    어떤 수 n이 주어졌을 때, 이 수가 팩토리얼 소수(Factorial Prime)인지 확인하는 방법을 알아보겠습니다. 팩토리얼 소수란 어떤 자연수의 팩토리얼(계승)에서 1을 뺀 값 또는 1을 더한 값이면서 동시에 소수인 수를 말합니다.예를 들어 입력값이 n = 719라면 결과는 True가 됩니다. 그 이유는 719 = 720 − 1 = 6! − 1, 즉 719가 6의 팩토리얼보다 1 작은 소수이기 때문입니다.해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.먼저 num이 소수인지 확인하고, 소수가 아니라면 False를

  20. Python으로 숫자 N이 {A, B} 자릿수로만 구성된 수로 나누어 떨어지는지 확인하는 방법

    프로그래밍 문제에서 자주 만나는 상황 중 하나는 다음과 같습니다. 하나의 숫자 n과 두 개의 숫자 a, b가 주어졌을 때, a와 b의 자릿수만으로 구성된 어떤 수가 n을 나누어 떨어지게 할 수 있는지 확인해야 하는 경우입니다.예를 들어 입력이 n = 115, a = 3, b = 2라고 가정해 보겠습니다. 이때 2와 3으로 구성된 수 23이 115를 정확히 나누므로(115 ÷ 23 = 5) 결과는 True가 됩니다.해결 접근 방식이 문제는 재귀(Recursion)를 활용하면 간단하게 해결할 수 있습니다. 핵심 아이디어는 a와 b로 만

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:219/450  20-컴퓨터/Page Goto:1 213 214 215 216 217 218 219 220 221 222 223 224 225