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

Python

  1. Python으로 숫자 순열 중 회문이면서 3의 배수인 수가 존재하는지 확인하는 방법

    큰 양의 정수 N이 주어졌을 때, N의 자릿수를 재배열하여 만들 수 있는 순열 중에서 회문(palindrome)이면서 동시에 3으로 나누어떨어지는 수가 하나라도 존재하는지 확인하는 문제입니다.예를 들어 입력이 132213이라고 가정해 보겠습니다. 자릿수를 재배열하면 123321을 만들 수 있는데, 이 수는 거꾸로 읽어도 같은 회문이면서 자릿수 합이 12이므로 3의 배수이기도 합니다. 따라서 출력은 하나 이상의 순열이 회문이면서 3의 배수가 됩니다.핵심 아이디어모든 순열을 일일이 생성하는 것은 비효율적입니다. 대신 다음 두 가지 수학

  2. Python에서 N의 자릿수 순열이 M의 거듭제곱과 같은지 확인하는 방법

    두 개의 양의 정수 n과 m이 주어졌다고 가정해 봅시다. 이때 2 ≤ n ≤ 1018이고 2 ≤ m ≤ n이라는 조건이 붙습니다. 우리가 확인해야 할 목표는 n의 자릿수를 모두 재배열해 만들 수 있는 순열(permutation) 중에서 m의 거듭제곱과 정확히 일치하는 값이 존재하는지 판별하는 것입니다. 만약 그런 순열이 하나라도 존재한다면 참, 존재하지 않는다면 거짓으로 답하면 됩니다.예를 들어 n = 7182, m = 12가 입력으로 주어진 경우를 생각해 보겠습니다. 7182의 자릿수를 재배열하면 1728을 만들 수 있고, 172

  3. Python에서 색칠된 셀이 포함된 정사각형을 대칭인 두 부분으로 나눌 수 있는지 확인하는 방법

    n 크기의 정사각형이 하나 주어지고, 이 정사각형은 n²개의 단위 크기 작은 정사각형으로 나뉘어 있다고 가정해 보겠습니다. 그중 한 개의 작은 정사각형은 다른 색으로 칠여져 있습니다.이제 큰 정사각형을 두 개의 동일한 부분으로 자르려고 할 때, 자르는 선이 색칠된 작은 정사각형과 어떤 점도 겹치지 않도록 잘라야 합니다. 또한 새롭게 잘린 두 조각이 서로 거울상(mirror image) 관계여야 한다는 조건도 함께 고려해야 합니다. 즉, 주어진 조건을 만족하도록 정사각형을 자를 수 있는지 판단하는 것이 문제이며, 입력으로는 n의 값과

  4. 파이썬으로 배열을 두 부분으로 나누어 합의 차이가 n이 되는지 확인하는 방법

    정수로 이루어진 배열 input_list가 주어졌을 때, 이 배열을 두 부분으로 나누어 각 부분의 합의 차이가 특정 값 n과 같아지도록 할 수 있는지 확인하는 문제입니다. 여기서 n은 미리 주어진 값입니다.예를 들어, 입력이 input_list = [9, 2, 5, 6]이고 n = 0이라면, 출력은 Possible(가능)이 됩니다.해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.1단계: 배열 전체의 합 list_total을 구합니다.2단계: (list_total - n)을 2로 나눈 나머지가 1이라면, 두 부분의 합

  5. 파이썬으로 배열이 단 한 번의 스왑만으로 정렬 가능한지 확인하는 방법

    정수로 이루어진 배열이 주어졌다고 가정해 봅시다. 우리는 단 한 번의 스왑(swap) 연산만 사용해서 배열의 값들을 비내림차순(오름차순과 동일하게 취급)으로 정렬할 수 있는지 판단해야 합니다. 가능하다면 정렬할 수 있다고 답하고, 그렇지 않다면 정렬할 수 없다고 답하면 됩니다.예를 들어 입력 리스트가 [7, 8, 12, 10, 11, 9]라면, 출력은 Can be done(정렬 가능)이 됩니다.해결 접근 방식이 문제는 다음 단계를 따라 해결할 수 있습니다.temp_list: 입력 리스트 input_list의 복사본을 만듭니다.tem

  6. Python으로 배열에 중복을 허용하는 연속된 정수가 포함되어 있는지 확인하는 방법

    숫자 배열 nums가 주어졌다고 가정해 보겠습니다. 이 배열에는 중복된 요소가 포함될 수 있습니다. 우리의 목표는 이 배열의 요소들이 연속된(contiguous) 숫자 집합을 이루고 있는지 확인하는 것입니다.예를 들어, 입력이 다음과 같다면:nums = [6, 8, 8, 3, 3, 3, 5, 4, 4, 7]배열의 고유한 요소들은 3, 4, 5, 6, 7, 8로 끊김 없이 이어지므로 출력은 True가 됩니다.문제 해결 접근 방식이 문제는 다음 단계를 통해 간단하게 해결할 수 있습니다:리스트 nums를 오름차순으로 정렬합니다.인덱스 1

  7. Python에서 배열 요소가 연속적인지 확인하는 방법

    문제 개요숫자로 이루어진 배열 nums가 주어졌을 때, 배열의 요소들이 서로 연속적인(contiguous) 값인지 확인하는 것이 목표입니다. 즉, 배열의 값들이 중복 없이 하나씩 모두 포함되어 있고, 정렬했을 때 1씩 증가하는 형태인지 검사해야 합니다.예를 들어 입력이 nums = [6, 8, 3, 5, 4, 7]이라면, 요소들을 정렬하면 3, 4, 5, 6, 7, 8이 되므로 결과는 True입니다.해결 접근 방식이 문제는 추가 배열 없이 부호 표시(sign marking) 기법을 활용하면 O(n) 시간 복잡도로 해결할 수 있습니다

  8. 파이썬으로 배열 요소가 연속적인지 O(n) 시간·O(1) 공간에 확인하기 (음수 포함)

    정렬되지 않은 숫자 배열 nums가 주어졌을 때, 이 배열의 요소들이 서로 연속된 값(연속한 정수 나열)으로 이루어져 있는지 확인하는 문제를 생각해 볼 수 있습니다. 이때 음수도 함께 처리할 수 있어야 합니다.예를 들어 입력이 nums = [-3, 5, 1, -2, -1, 0, 2, 4, 3]이라면, 요소들을 정렬했을 때 -3, -2, -1, 0, 1, 2, 3, 4, 5처럼 끊김 없이 이어지므로 결과는 True가 됩니다.접근 방법배열을 정렬하지 않고도, 다음 성질을 이용하면 문제를 해결할 수 있습니다.요소들이 실제로 연속적이라면,

  9. Python으로 배열의 합을 K로 만들 수 있는지 확인하는 방법

    문제 개요 숫자로 이루어진 리스트 nums와 양수 K가 주어집니다. 우리는 각 원소에 대해 다음 세 가지 연산 중 하나를 한 번씩만 적용할 수 있습니다. 하나의 숫자를 음수로 만들기 숫자 자신에게 인덱스(1부터 시작)를 더하기 숫자 자신에게서 인덱스를 빼기 최종 목표는 각 원소에 위 연산을 최대 한 번씩만 수행하여 배열 전체의 합이 정확히 k가 될 수 있는지 판별하는 것입니다. 예를 들어 입력이 nums = [1,2,3,7], k = 8이라고 가정해 보겠습니다. 이 경우 출력은 True입니다. 값 2와 3에서 각각 자신의 인덱스

  10. Python으로 숫자의 이진 표현이 회문(Palindrome)인지 확인하는 방법

    문제 개요하나의 숫자 n이 주어졌을 때, n의 이진 표현(binary representation)이 회문(palindrome)인지 판별하는 문제입니다.예를 들어 입력값이 n = 9라고 가정해 보겠습니다. 9의 이진 표현은 1001이며, 앞에서 읽으나 뒤에서 읽으나 같기 때문에 회문입니다. 따라서 출력 결과는 True가 됩니다.해결 접근 방법이 문제는 숫자의 이진 비트를 뒤집은(reverse) 값이 원래 값과 동일한지 비교하는 방식으로 해결할 수 있습니다. 알고리즘의 핵심 단계는 다음과 같습니다.결과값 ans를 0으로 초기화합니다.n

  11. Python에서 두 숫자의 이진수 표현이 아나그램인지 확인하는 방법

    두 개의 숫자 x와 y가 주어졌을 때, 이 숫자들의 이진수(binary) 표현이 서로 아나그램(anagram) 관계인지 확인하는 문제를 생각해 보겠습니다.예를 들어 입력이 x = 9, y = 12라고 가정해 봅시다. 9의 이진수 표현은 1001이고, 12의 이진수 표현은 1100입니다. 두 숫자 모두 1이 두 번, 0이 두 번 나타나므로 자릿수의 구성이 동일합니다. 따라서 출력은 True가 됩니다.문제 해결 접근 방식두 이진수가 아나그램 관계인지 판단하는 핵심 조건은 매우 간단합니다. 아나그램이 되려면 0과 1의 개수가 각각 같아야

  12. 파이썬으로 DFA를 활용해 이진수가 3의 배수인지 판별하는 방법

    어떤 수의 이진 표현을 요소로 담고 있는 배열 n이 주어졌을 때, 결정적 유한 오토마타(DFA)를 이용해 해당 수가 3으로 나누어 떨어지는지 확인하는 문제입니다.예를 들어 입력이 n = [1, 1, 0, 0](십진수 12의 이진 표현)이라면, 12는 3의 배수이므로 출력은 True가 됩니다.DFA 접근 방식의 핵심 원리이 문제의 해결 아이디어는 매우 직관적입니다. 어떤 수가 3으로 나누어질 때 나머지는 반드시 0, 1, 2 중 하나이기 때문에, 각 나머지 값에 대응하는 세 개의 상태를 만들면 됩니다.여기서 중요한 점은 초기 상태가

  13. Python으로 두 수의 특정 비트 범위가 서로 보수인지 확인하는 방법

    두 개의 숫자 x와 y, 그리고 주어진 범위(left, right)가 있을 때, 두 숫자에서 해당 범위에 속한 모든 비트가 서로의 보수(complement) 관계인지 확인해야 합니다. 이때 비트는 오른쪽에서 왼쪽 방향으로 세며, 최하위 비트(LSB)를 첫 번째 위치로 간주한다는 점에 유의해야 합니다.문제 이해하기예를 들어 입력이 x = 41, y = 54, left = 2, right = 5라고 가정해 보겠습니다. 이 경우 출력은 True가 됩니다.41과 54의 이진수 표현은 각각 101001과 110110입니다. 두 수의 2번째부

  14. 파이썬에서 숫자의 이진수 비트 패턴에서 연속된 1의 개수가 오름차순인지 확인하는 방법

    문제 개요양의 정수 n이 주어졌을 때, n의 이진수 표현(비트 패턴)에서 연속된 1로 이루어진 각 그룹의 길이가 왼쪽에서 오른쪽으로 오름차순으로 증가하는지 확인하는 문제입니다.예를 들어 n = 1775라고 가정해 보겠습니다. 1775의 이진수 표현은 11011101111이며, 연속된 1의 개수는 왼쪽부터 차례대로 [2, 3, 4]입니다. 이 수열은 계속 증가하고 있으므로 결과는 True입니다.해결 접근 방식이 문제는 숫자를 이진수 문자열로 변환한 뒤 한 비트씩 순회하면서 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.n을 이

  15. Python으로 부분 집합의 비트 AND가 2의 거듭제곱인지 확인하는 방법

    숫자로 이루어진 배열 nums가 있다고 가정해 보겠습니다. 이때 비트 AND(bitwise AND) 연산의 결과가 2의 거듭제곱이 되는 부분 집합이 배열 안에 존재하는지 확인해야 합니다.예를 들어 입력이 nums = [22, 25, 9]라면 출력은 True입니다. 부분 집합 {22, 9}의 이진수 표현은 각각 10110과 1001이며, 두 수의 비트 AND 결과는 10000, 즉 16(=2⁴)으로 2의 거듭제곱이기 때문입니다.알고리즘 접근 방식핵심 아이디어는 간단합니다. 어떤 부분 집합의 비트 AND 결과가 2의 거듭제곱(예: 2k

  16. 파이썬으로 문자열의 양쪽 절반에 차이가 있는지 확인하는 방법

    소문자로만 이루어진 문자열이 하나 주어졌다고 가정해 봅시다. 이때 확인해야 할 것은, 문자열을 중간에서 잘랐을 때 양쪽 두 절반이 최소 한 가지 이상의 차이를 가지는지 여부입니다. 여기서 차이란 양쪽에 서로 다른 문자가 존재하는 경우 또는 동일한 문자라도 등장 횟수(빈도)가 다른 경우를 모두 포함합니다. 만약 문자열 길이가 홀수라면, 정중앙의 문자 하나는 무시하고 나머지 문자들만 대상으로 검사합니다.예를 들어 입력이 s = helloohekk라고 해보겠습니다. 이 경우 출력값은 True가 됩니다. 왼쪽 절반은 hello, 오른쪽 절

  17. 파이썬으로 문자열을 재배열해 회문을 만들 수 있는지 확인하는 방법

    문자열 s가 주어졌을 때, 해당 문자열의 문자들을 재배열하여 회문(palindrome)을 만들 수 있는지 확인하는 문제를 살펴보겠습니다.예를 들어, 입력이 s = raaecrc라면 문자들을 재배열하여 racecar라는 회문을 만들 수 있으므로 결과는 True가 됩니다.접근 방법회문의 핵심 성질을 활용하면 문제를 간단히 해결할 수 있습니다. 회문이 성립하려면 다음 두 조건 중 하나를 만족해야 합니다.모든 문자가 짝수 번 나타나는 경우 (짝수 길이 회문)단 하나의 문자만 홀수 번 나타나고, 나머지 문자는 모두 짝수 번 나타나는 경우 (

  18. Python에서 한 문자열의 문자 재배열로 다른 문자열을 만들 수 있는지 확인하는 방법

    문제 이해두 개의 문자열 s와 t가 주어졌을 때, s에 포함된 문자들의 순서를 자유롭게 바꾸어(swap) t와 동일한 문자열을 만들 수 있는지 확인해야 합니다.예를 들어 s = worldlloeh, t = helloworld라고 한다면, s의 문자들을 적절히 재배열하여 helloworld를 만들 수 있으므로 결과는 True가 됩니다.사실 이 문제는 두 문자열이 아나그램(anagram) 관계인지 판별하는 문제와 본질적으로 같습니다. 즉, 두 문자열이 같은 문자들을 정확히 같은 개수만큼 담고 있는지만 검증하면 됩니다.풀이 접근 방법s_

  19. 파이썬으로 두 괄호 문자열의 연결이 균형을 이루는지 확인하는 방법

    ( 와 ) 두 가지 문자로만 구성된 괄호 시퀀스 s와 t가 주어졌다고 가정해 보겠습니다. 우리가 확인해야 할 것은 이 두 문자열을 이어 붙였을 때 그 결과가 균형 잡힌(balanced) 문자열이 되는지 여부입니다. 연결 순서는 s | t 또는 t | s 두 가지가 가능하며, 어느 한쪽이라도 균형이 맞으면 True를 반환해야 합니다.예를 들어 입력이 s = ()())), t = ()(()( 라면 결과는 True입니다. t | s 순서로 연결하면 ()(()(()()))라는 문자열이 만들어지는데, 이 문자열은 모든 괄호의 짝이 올바르게

  20. Python으로 숫자의 약수 개수가 홀수인지 짝수인지 확인하는 방법

    어떤 숫자 n이 주어졌을 때, 그 숫자의 약수(divisor) 개수가 홀수인지 짝수인지 판별하는 문제입니다.예를 들어 입력이 n = 75라면, 약수는 [1, 3, 5, 15, 25, 75]로 총 6개이므로 출력 결과는 Even(짝수)이 됩니다.접근 방법이 문제는 아주 간단하면서도 효율적인 방법으로 해결할 수 있습니다. 핵심은 다음과 같은 수학적 성질입니다.오직 완전제곱수(perfect square)만이 홀수 개의 약수를 가집니다.일반적으로 약수는 서로 쌍을 이룹니다. 예를 들어 12의 경우 (1, 12), (2, 6), (3, 4)

Total 8989 -컴퓨터  FirstPage PreviousPage NextPage LastPage CurrentPage:209/450  20-컴퓨터/Page Goto:1 203 204 205 206 207 208 209 210 211 212 213 214 215