반지름이 각각 r1과 r2인 두 개의 동심원(중심이 같은 원)이 있다고 가정해 보겠습니다. 여기에 추가로 중심 좌표 coord와 반지름 값 r이 주어집니다. 우리가 확인해야 할 것은, coord를 중심으로 하는 반지름 r짜리 원이 주어진 두 동심원이 형성하는 경계 영역 안에 완전히 들어가는지 여부입니다.예를 들어 입력이 r1 = 4, r2 = 2, coord = (3, 0), r = 1이라면 결과는 True입니다.풀이 접근 방법이 문제는 기하학적 거리 계산만으로 간단하게 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다.먼저 원
정점(vertex)들의 차수(degree) 목록이 주어졌을 때, 이 차수들이 트리(tree)를 나타내는지 아니면 일반적인 그래프(graph)를 나타내는지 판별해야 합니다. 예를 들어 deg = [2,2,3,1,1,1]이 입력으로 주어지면 결과는 Tree입니다. 해결 원리 이 문제는 그래프 이론의 두 가지 기본 성질을 활용하면 간단하게 해결할 수 있습니다. 트리의 성질: n개의 정점을 가진 트리는 정확히 n−1개의 간선을 가집니다. 핸드셰이킹 보조정리(Handshaking Lemma): 그래프에서 모든 정점 차수의 합은 간선 개수
파이썬에서 부동 소수점(floating point) 숫자가 짝수인지 홀수인지 판별해야 하는 경우가 있습니다. 정수라면 마지막 자릿수를 2로 나누어 보면 쉽게 알 수 있지만, 부동 소수점 숫자는 그렇게 간단하지 않습니다. 소수점 아래 자릿수까지 함께 고려해야 하기 때문입니다.예를 들어 입력이 n = 200.290이라고 해보겠습니다. 겉보기에는 마지막 자릿수가 0이라 짝수처럼 보이지만, 실제 출력은 Odd(홀수)입니다. 소수점 이하에서 0이 아닌 가장 오른쪽 유효 숫자가 9이기 때문입니다. 즉, 부동 소수점 숫자의 홀짝은 소수부의 유효
두 개의 문자열 s와 t, 그리고 결과 문자열 r이 주어졌을 때, r이 s + t 또는 t + s로 만들어질 수 있는지 확인하는 문제를 살펴보겠습니다. 여기서 +는 문자열 연결(concatenation)을 의미합니다.예를 들어, 입력이 s = world, t = hello, r = helloworld라면 출력은 True가 됩니다. 왜냐하면 helloworld(r)는 hello(t)와 world(s)를 연결한 것과 같기 때문입니다.해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.먼저 r의 길이가 s와 t의 길이 합과 같
세 개의 숫자가 주어졌을 때, 이 숫자들이 인접한 소수(adjacent primes)인지 확인해야 하는 경우가 있습니다. 인접한 소수란 두 소수 사이에 다른 소수가 존재하지 않는, 즉 서로 바로 이어지는 소수를 의미합니다.예를 들어 입력이 nums = [5, 7, 11]이라면, 5 다음 소수는 7이고 7 다음 소수는 11이므로 출력은 True가 됩니다.문제 해결 접근 방식이 문제는 다음 단계를 따라 해결할 수 있습니다.세 숫자 중 하나라도 소수가 아니라면 False를 반환합니다.x의 다음 소수가 y와 같지 않다면 False를 반환합
두 개의 배열 nums1, nums2와 정수 값 k가 주어졌다고 가정해 봅시다. 이때 nums1의 요소 중 단 하나만 다음과 같은 방식으로 수정해 두 배열을 동일하게 만들 수 있는지 확인해야 합니다.수정 방식은 nums1의 임의의 요소에 [-k, k] 범위 안의 값을 더하는 것이며, 이 작업은 딱 한 번만 수행할 수 있습니다.예제 입력 살펴보기입력이 다음과 같다고 해봅시다.nums1 = [5, 7, 11]nums2 = [5, 5, 11]k = 8이 경우 출력은 True입니다. nums1[1]인 7에 범위 [-8, 8] 안에 있는 값
문제 개요숫자 n과 값 k가 주어졌을 때, n의 k번째 비트가 설정(1)되어 있는지 여부를 확인해야 합니다. 이때 k는 오른쪽 끝 비트부터 세는 기준으로 사용합니다.예를 들어 입력이 n = 23, k = 3이라면 출력은 True가 됩니다. 23의 이진수 표현은 10111이며, 오른쪽에서 세 번째 비트가 1로 설정되어 있기 때문입니다.해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.n을 오른쪽으로 (k - 1)비트만큼 시프트한 값을 temp에 저장합니다.temp와 1을 AND 연산한 결과가 1이면 True를 반환합니다.
다면체 소수(Dihedral Prime)란 무엇일까? 숫자 n이 주어졌을 때, 이 수가 다면체 소수(dihedral prime)인지 판별하는 문제입니다. 다면체 소수란 그 수 자체가 소수이면서, 7세그먼트 디스플레이(계산기나 디지털 시계에 사용되는 숫자 표시 방식)로 나타냈을 때 디스플레이를 정방향으로 보든 거꾸로 돌려 보든 항상 같은 숫자 또는 다른 소수로 읽히는 수를 의미합니다. 예를 들어 n = 1181을 입력하면 결과는 True입니다. 1181을 7세그먼트 디스플레이에 표시한 뒤 180도 회전해도 여전히 1181로 읽히며,
문제 개요숫자 배열 nums가 주어졌을 때, 이 숫자들을 모두 곱한 결과가 짝수인지 홀수인지 판별해야 합니다.예를 들어 입력이 nums = [5,7,4,2,6]이라면 곱은 5 × 7 × 4 × 2 × 6 = 1680이고, 1680은 짝수이므로 출력은 Even이 됩니다.접근 방법곱셈의 성질을 활용하면 실제로 모든 수를 일일이 곱하지 않고도 결과를 빠르게 판별할 수 있습니다.배열에 짝수가 하나라도 포함되어 있으면 전체 곱은 반드시 짝수입니다.모든 수가 홀수일 때만 전체 곱이 홀수가 됩니다.따라서 다음과 같은 단계로 문제를 해결할 수 있
숫자 n이 주어졌을 때, 짝수 자리에 있는 숫자들의 곱이 홀수 자리에 있는 숫자들의 합으로 나누어 떨어지는지 확인해야 합니다. 여기서 자리는 오른쪽에서 왼쪽 방향으로 세며, 가장 오른쪽 자리를 1번째 자리로 간주합니다.예를 들어 입력값이 n = 59361이라면 출력은 True가 됩니다. 짝수 자리(2번째, 4번째)에 있는 숫자는 6과 9이므로 곱은 6 × 9 = 54이고, 홀수 자리(1번째, 3번째, 5번째)에 있는 숫자는 1, 3, 5이므로 합은 1 + 3 + 5 = 9입니다. 54는 9로 나누어 떨어지므로 결과는 True입니다.
숫자 n과 또 다른 숫자 k가 주어졌을 때, n의 짝수 자리에 있는 숫자들의 곱이 k로 나누어 떨어지는지 확인해야 합니다. 여기서 자리수는 오른쪽에서 왼쪽 방향으로 세며, 가장 오른쪽 자리가 1번째 자리입니다.예를 들어 입력이 n = 59361이라면, 짝수 자리(2번째, 4번째, 6번째)에 있는 숫자들은 1, 3, 5이고 이들의 곱은 15입니다. 15는 3으로 나누어 떨어지므로 출력 결과는 True가 됩니다.문제 해결 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다:주어진 숫자 n의 전체 자릿수를 계산합니다.곱을 저장할 변
문제 개요범위 [l, u]의 하한값과 상한값이 주어졌을 때, 해당 범위에 포함된 모든 숫자를 곱한 결과가 양수인지, 음수인지, 아니면 0인지 판별해야 합니다.예를 들어 l = -8, u = -2가 입력으로 주어진 경우, 범위 내 값은 [-8, -7, -6, -5, -4, -3, -2]이며, 이들의 곱은 -40320입니다. 따라서 출력 결과는 Negative(음수)가 됩니다.해결 접근 방식범위의 모든 숫자를 실제로 곱하면 비효율적일 수 있으므로, 부호의 성질을 이용해 논리적으로 판단하는 것이 핵심입니다. 다음 단계로 문제를 해결할 수
리스트에 담긴 세 변의 길이가 주어졌을 때, 이 세 변이 직각삼각형을 이루는지 판별해야 하는 경우가 있습니다.예를 들어 입력이 sides = [8, 10, 6]이라면, 8² + 6² = 64 + 36 = 100 = 10²가 성립하므로 출력 결과는 True가 됩니다.이 문제는 피타고라스 정리(a² + b² = c²)를 활용하면 간단하게 해결할 수 있습니다. 해결 과정은 다음과 같습니다.해결 접근 방법먼저 리스트 sides를 오름차순으로 정렬합니다. 이렇게 하면 가장 큰 값(빗변 후보)이 마지막 위치에 오게 됩니다.정렬 후 sides[
문제 개요 하나의 숫자 n이 주어졌을 때, 이 숫자를 어떤 수 a의 거듭제곱, 즉 a^b(a의 b제곱) 형태로 표현할 수 있는지 판별하는 문제입니다. 예를 들어 입력값이 125라면, 125 = 5³으로 나타낼 수 있으므로 a = 5, b = 3이 되고 결과는 참(True)입니다. 반면 10처럼 같은 수의 거듭제곱으로 표현할 수 없는 숫자라면 거짓(False)이 됩니다. 해결 접근 방식 핵심 아이디어는 로그(log) 연산을 활용하는 것입니다. 만약 num = a^b가 성립한다면, 양변에 로그를 취했을 때 log(num) / log(
두 개의 문자열 s와 t가 주어졌을 때, 문자열 t가 s에 포함된 문자들을 사용하여 구성될 수 있는지 확인해야 합니다. 예를 들어, s = owleh이고 t = hello라면, s의 문자들을 조합하여 hello를 만들 수 있으므로 출력은 True가 됩니다. 문제 해결 접근 방법 이 문제는 문자 빈도수 카운팅을 통해 효율적으로 해결할 수 있습니다. 핵심 아이디어는 다음과 같습니다. s의 각 문자별 등장 횟수를 저장하는 맵(freq)을 생성합니다. t의 각 문자를 순회하면서, 해당 문자의 남은 개수가 0이라면 필요한 문자가 부족한
숫자 n과 또 다른 숫자 k가 주어졌을 때, n의 홀수 자리(오른쪽에서 왼쪽 방향)에 위치한 자릿수들의 합이 k로 나누어 떨어지는지 확인하는 문제입니다.예를 들어, 입력이 n = 2416, k = 5라고 가정해 보겠습니다. 오른쪽에서 왼쪽으로 셀 때 홀수 자리에 있는 숫자들은 4와 6이며, 이들의 합은 4 + 6 = 10입니다. 10은 5로 나누어 떨어지므로 결과는 True가 됩니다.문제 해결 접근 방식이 문제는 다음 단계를 따라 해결할 수 있습니다.합계를 저장할 변수 total을 0으로, 자리 위치를 나타낼 변수 pos를 1로 초
영숫자로 이루어진 문자열 s가 주어졌을 때, 문자열의 평균 문자가 존재하는지 확인하고, 존재한다면 해당 문자를 반환해야 합니다. 여기서 평균 문자란 문자열 내 각 문자의 ASCII 값 평균에 내림(floor)을 적용한 값을 의미합니다. 예를 들어 입력이 s = pqrst라면 출력은 r입니다. 각 문자의 ASCII 값은 p=112, q=113, r=114, s=115, t=116이며, 이들의 평균은 (112 + 113 + 114 + 115 + 116) / 5 = 570 / 5 = 114입니다. ASCII 값 114에 해당하는 문자는
프로그래밍에서 숫자 n과 위치 값 k가 주어졌을 때, n의 k번째 비트가 설정(Set, 1)되어 있는지 아니면 해제(Unset, 0)되어 있는지 확인해야 하는 경우가 자주 발생합니다. 이때 비트의 위치는 가장 오른쪽(LSB)부터 세기 시작한다고 가정합니다. 문제 이해하기 예를 들어 입력이 n = 18, k = 2라고 가정해 보겠습니다. 18의 이진수 표현은 10010입니다. 오른쪽에서 두 번째 비트가 1이므로, 출력 결과는 Set이 됩니다. 해결 접근 방식 이 문제는 다음 단계를 통해 간단히 해결할 수 있습니다. n을 오른쪽으
문자열 s가 주어졌을 때, 문자열에 등장하는 각 문자의 빈도(출현 횟수)가 모두 소수인지 확인해야 합니다.예를 들어 입력이 s = apuuppa라면 결과는 True입니다. a는 2번, p는 3번, u는 2번 등장하며, 2와 3은 모두 소수이기 때문입니다.문제 해결 접근 방법먼저 각 문자와 그 빈도수를 저장하는 맵(freq)을 생성합니다.맵에 있는 각 문자에 대해 다음을 검사합니다.빈도수가 0보다 크고, 그 값이 소수가 아니라면 False를 반환합니다.모든 문자의 빈도수가 소수라면 True를 반환합니다.소수 판별 함수isPrime 함
어떤 자연수 n이 주어졌을 때, 이 숫자가 유클리드 수(Euclid Number)에 해당하는지 판별하는 문제를 살펴보겠습니다.유클리드 수란?유클리드 수는 다음과 같은 형태로 표현할 수 있는 정수를 말합니다.n = Pn# + 1여기서 Pn#은 처음 n개의 소수를 모두 곱한 값(소수 곱, 프리모리얼)을 의미합니다. 즉, 앞에서부터 소수를 차례대로 곱한 뒤 1을 더한 수가 바로 유클리드 수입니다.예를 들어 입력값이 n = 211이라면 결과는 True입니다. 그 이유는 211을 다음과 같이 표현할 수 있기 때문입니다.211 = (2 × 3