이 글에서는 NumPy 배열에 저장된 각 문자열 요소의 길이를 구하는 방법을 알아보겠습니다. NumPy는 파이썬에서 수치 연산을 위해 널리 사용되는 라이브러리로, 매우 강력한 배열 클래스를 제공합니다. 이를 활용하면 데이터를 배열 형태로 효율적으로 저장하고 처리할 수 있습니다.문자열 배열의 각 요소 길이를 구하는 방법은 크게 두 가지가 있습니다. 하나는 np.vectorize() 함수를 활용하는 방법이고, 다른 하나는 반복문(리스트 컴프리헨션)을 사용하는 방법입니다.방법 1: np.vectorize() 사용np.vectorize()
프로그래밍 문제에서 숫자 n이 주어지면, n보다 큰 다음 완전제곱수를 찾아야 하는 경우가 자주 있습니다. 예를 들어 n = 1000이라면, 그다음으로 가장 가까운 완전제곱수는 1024(=32²)입니다.이 문제를 해결하는 방법은 매우 간단합니다. 먼저 주어진 숫자 n의 제곱근을 구한 뒤, 해당 값에 대해 내림(floor) 연산을 적용합니다. 그다음 (내림값 + 1)의 제곱을 계산하면 원하는 결과를 얻을 수 있습니다.알고리즘 단계n의 제곱근을 구합니다.제곱근 값에 대해 소수점 이하를 버립니다(내림).(내림값 + 1)을 두 번 곱하여 제
이번 글에서는 자릿수 d와 상한값 n이 주어졌을 때, 0부터 n 사이의 범위에서 숫자 d를 하나라도 포함하는 모든 수를 찾아보겠습니다.예를 들어 n = 20이고 찾고자 하는 숫자가 3이라면, 해당 조건을 만족하는 숫자는 [3, 13] 두 개입니다.해결 방법이 문제를 해결하는 가장 간단한 방법은 각 숫자를 문자열로 변환한 뒤, 그 문자열 안에 목표 자릿수 d가 존재하는지 확인하는 것입니다. 문자열에 d가 포함되어 있다면 해당 숫자를 출력하고, 포함되어 있지 않다면 무시하면 됩니다.구체적인 알고리즘은 다음과 같습니다.자릿수 d를 문자열
원의 중심 좌표와 원주 위의 한 점이 주어졌을 때, 지름의 반대쪽 끝에 해당하는 점의 좌표를 구하는 문제를 생각해 봅시다.원의 중심을 (p, q), 주어진 점을 (a, b), 그리고 우리가 구해야 할 점을 (x, y)라고 하겠습니다.핵심 아이디어지름은 중심점을 기준으로 대칭이므로, 중심은 지름의 정중앙(중점)에 위치합니다. 따라서 다음과 같은 관계식을 세울 수 있습니다.(p, q) = ((a + x) / 2, (b + y) / 2)이 식을 (x, y)에 대해 정리하면 다음과 같습니다.x = 2p − ay = 2q − b즉, 각 좌표
원통 둘레 계산의 기본 개념원통의 지름과 높이가 주어졌을 때 원통의 둘레를 구해야 하는 상황을 가정해 봅시다. 둘레(perimeter)란 2차원 도형의 외곽선 길이를 의미하기 때문에, 3차원 입체 도형인 원통의 둘레를 직접 구하는 것은 불가능합니다.이 문제를 해결하려면 원통의 단면(cross section)을 만들어 이를 직사각형 형태로 펼친 뒤 둘레를 계산하면 됩니다. 이렇게 만든 직사각형 단면의 두 변은 각각 지름(d)과 높이(h)에 해당합니다.따라서 원통의 둘레는 다음 공식으로 계산할 수 있습니다.p = (2 × d) + (2
연결 리스트의 처음 k개 노드 곱이란?연결 리스트(Linked List)에 여러 개의 요소가 저장되어 있을 때, 처음 k개 요소의 곱을 구하는 문제를 생각해 보겠습니다. 예를 들어 연결 리스트가 [5, 7, 3, 5, 6, 9]이고 k = 3이라면, 결과는 5 × 7 × 3 = 105가 됩니다.알고리즘 접근 방식풀이 과정은 매우 간단합니다.결괏값을 저장할 변수 prod를 1로 초기화합니다.리스트의 왼쪽(머리 노드)부터 현재 노드의 값을 읽어 prod에 곱합니다.k개의 요소를 모두 순회하면 반복을 종료하고 결과를 반환합니다.이 알고리
연결 리스트(Linked List)에 여러 개의 요소가 저장되어 있을 때, 마지막 n개 노드 값의 곱을 구하는 문제를 생각해 볼 수 있습니다. 여기서 n값은 미리 주어집니다.예를 들어 연결 리스트가 [5, 7, 3, 5, 6, 9]이고 n = 3이라면, 마지막 세 개의 요소는 5, 6, 9이므로 결과는 5 × 6 × 9 = 270이 됩니다.문제 해결 접근 방식풀이 과정은 매우 간단합니다. 핵심 아이디어는 다음과 같습니다.알고리즘 단계1. 연결 리스트를 왼쪽(머리)부터 순회하면서 각 노드의 값을 스택(Stack)에 차례대로 push합
크기가 n인 배열이 주어졌을 때, 배열에서 가장 작은 요소(최솟값)와 두 번째로 작은 요소를 찾아야 합니다. 여기서 첫 번째로 작은 값은 배열의 최솟값이고, 두 번째로 작은 값은 최솟값보다 크면서 그다음으로 작은 값을 의미합니다.이 문제는 배열의 각 요소를 한 번씩 순회하면서 현재 요소가 첫 번째 최솟값 조건과 두 번째 최솟값 조건에 해당하는지 확인하는 방식으로 해결할 수 있습니다.알고리즘 동작 원리두 개의 변수 first와 sec를 각각 정수형 최댓값(INT_MAX)으로 초기화한 뒤, 배열을 순회하며 다음 규칙을 적용합니다.현재
문제 소개하나의 숫자 Y가 주어졌을 때, X!(X 팩토리얼)의 끝자리에 0이 최소 Y개 이상 포함되도록 만드는 가장 작은 수 X를 구하는 것이 이 글의 목표입니다.예를 들어 Y = 2라고 가정해 보겠습니다. 이때 정답은 X = 10입니다. 10! = 3,628,800이며, 이 숫자는 끝자리에 0이 정확히 2개 있기 때문입니다.해결 접근 방식이 문제는 이진 탐색(Binary Search)을 활용하면 매우 효율적으로 해결할 수 있습니다.N!의 후행 0(끝자리 0)의 개수는 N!을 구성하는 인수 중 5의 개수와 같습니다. 그 이유는 10
바크샬리 근사법(Bakhshali approximation)은 완전제곱수가 아닌 숫자의 제곱근을 계산하는 방법입니다. 개념을 쉽게 이해하기 위해 먼저 관련 용어부터 간단히 살펴보겠습니다. 기본 개념 정리 제곱근(Square Root)이란? 숫자 x의 제곱근은 다음 조건을 만족하는 수 y를 말합니다. y² = x 완전제곱수(Perfect Square)란? 완전제곱수는 제곱근이 정확히 정수로 떨어지는 수입니다. 예를 들어 16은 제곱근이 4 × 4 = 16이므로 완전제곱수에 해당합니다. 수학적으로 제곱근을 구하는 방법은 여러 가
문제 개요주어진 가중치, 즉 어떤 수의 거듭제곱 형태의 추들을 사용하여 저울의 양쪽 접시 균형을 맞추는 것이 이번 문제의 목표입니다.문제 설명이 문제에서는 저울 방식의 측정 장치가 주어집니다. 목표 무게 T와 함께, 어떤 수 a의 거듭제곱 값을 가진 여러 개의 추가 제공됩니다. 우리는 이 추들을 활용해 저울의 양팔을 균형 있게 만들어야 합니다.이때 성립해야 하는 방정식은 다음과 같습니다.T + (a의 어떤 거듭제곱) = (a의 다른 거듭제곱)주의할 점은 각 거듭제곱 값에 해당하는 추가 정확히 하나씩만 존재한다는 것입니다.예시T =
균형 잡힌 괄호 표현식(balanced expression)이란 모든 종류의 괄호 쌍이 올바른 순서로 짝을 이루고 있는 식을 의미합니다. 즉, 여는 괄호마다 그에 대응하는 닫는 괄호가 정확한 순서({ }, [ ], ( ))로 존재해야 합니다.몇 가지 예시를 통해 개념을 더 자세히 살펴보겠습니다.표현식 – {([][]{})({}[]{})}출력 – 균형 잡힘(balanced)설명 – 모든 여는 괄호에 대해 그에 맞는 닫는 괄호가 존재하며, 짝을 이루는 괄호들이 안팎으로 올바르게 중첩되어 배치되어 있습니다.표현식 – {(})출력 – 균형
균형 잡힌 괄호 표현식(balanced expression)이란 모든 종류의 괄호가 올바른 순서로 쌍을 이루고 있는 식을 의미합니다. 즉, 여는 괄호 하나하나마다 그에 대응하는 닫는 괄호가 정확한 순서로 존재해야 합니다.표현식 − {([][]{})({}[]{})}결과 − 균형 잡힘(Balanced)문제 정의이 문제에서는 주어진 개수의 괄호로 만들 수 있는 모든 균형 잡힌 표현식을 생성해야 하며, 단 하나의 조건이 붙습니다. 바로 지정된 위치에는 반드시 여는 괄호가 와야 한다는 것입니다.구체적으로 정수 n과 길이가 2n인 배열(각 위
비밀번호 문자열이 입력으로 주어졌을 때, 해당 비밀번호의 강도를 검사하는 것이 이번 글의 목표입니다.비밀번호 강도란?비밀번호의 강도란 그 비밀번호가 얼마나 쉽게 추측되거나 크랙(hack)될 수 있는지를 나타내는 척도입니다. 비밀번호의 강도는 약함(Weak), 보통(Moderate), 강함(Strong) 세 단계로 나눌 수 있습니다.비밀번호가 강력한지 판단하려면 다음 조건들을 확인해야 합니다.비밀번호는 최소 8자 이상이어야 합니다.소문자 알파벳을 최소 1개 포함해야 합니다.대문자 알파벳을 최소 1개 포함해야 합니다.숫자를 최소 1개
매우 큰 수가 문자열 형태로 주어져 있고(예: num), 또 다른 큰 수 m이 주어졌다고 가정해 봅시다. 이때 나누기 연산을 활용해 몫을 구하고, 모듈로 연산을 활용해 나머지를 계산해 출력하는 것이 이번 문제의 목표입니다. 출력 형식은 다음과 같습니다.Remainder = xxx; Quotient = yyy 예를 들어 num = 14598499948265358486, m = 487이라면 나머지는 430, 몫은 29976385930729688이 됩니다. 예시 입력: num = 214755974562154868 m = 17 출
양의 정수로 이루어진 배열이 주어졌을 때, 이 배열에서 무작위로 선택한 세 개의 숫자가 등차수열(Arithmetic Progression, AP)을 이룰 확률을 구하는 것이 목표입니다. 여기서 등차수열이란 연속된 두 항의 차이(공차)가 일정한 수열을 의미합니다. 예를 들어 {2, 4, 6}처럼 세 숫자 a, b, c가 2b = a + c 관계를 만족하면 등차수열이라고 할 수 있습니다. 예시 입력-: arr[] = { 2,3,4,7,1,2,3 } 출력-: 무작위로 선택한 세 숫자가 등차수열일 확률: 0.107692 입력-: arr
문제 개요변수 x의 하한과 상한, 변수 y의 하한과 상한, 그리고 각 변수에 대한 구간 간격(step)이 주어졌을 때, 이중 적분을 계산하여 그 결과를 출력하는 프로그램을 작성하는 것이 이번 글의 목표입니다.접근 방식이 프로그램에서는 심프슨 1/3 법칙(Simpsons 1/3 Rule)을 사용합니다. 심프슨 1/3 법칙은 구간을 짝수 개의 소구간으로 나눈 뒤, 인접한 세 점을 지나는 2차 다항식으로 함수를 근사하여 정적분 값을 구하는 수치 적분 기법입니다. 이 방법을 x축 방향과 y축 방향으로 각각 적용하면 이중 적분을 계산할 수
양의 정수 n이 주어졌을 때, 1년부터 n년까지의 총 일수를 7(한 주의 일수)로 나눈 나머지, 즉 홀수 일(odd days)의 개수를 구하는 것이 이번 글의 목표입니다. 홀수 일은 달력 계산에서 특정 날짜의 요일을 빠르게 구할 때 활용되는 개념입니다. 예시 입력: days = 500 출력: 홀수 일의 개수: 5 입력: days = 400 출력: 홀수 일의 개수: 0 홀수 일 계산 원리 홀수 일을 계산하려면 무엇보다 먼저 해당 기간에 포함된 연도가 윤년인지 평년인지 판별해야 합니다. 윤년 여부에 따라 한 해의 일수와 홀수 일
여러 사람이 투자한 금액을 담은 배열과, 각 사람별로 돈을 투자한 기간을 담은 배열이 주어졌을 때 이익 공유 비율(profit sharing ratio)을 계산하는 것이 이 프로그램의 목표입니다. 이익 공유 비율이란? 합자회사(partnership firm)에서는 이익과 손실을 각 파트너가 사업에 투자한 자본 규모에 따라 분배합니다. 이 자본 투자 비중을 기준으로 계산한 것이 바로 이익 공유 비율이며, 사업에서 발생한 이익을 각 파트너에게 얼마씩 지급할지를 나타내는 지표입니다. 공식 − 파트너 1 = 투자 자본 × 투자 기간 파트너
숫자가 하나 주어졌을 때, 그 숫자가 행운의 숫자(Lucky Number)에 해당하는지 판별하고 그 결과를 출력하는 것이 이번 글의 목표입니다.행운의 숫자란 무엇일까요?행운의 숫자는 모든 자릿수가 서로 다른 숫자를 의미합니다. 만약 하나라도 반복되는 자릿수가 존재한다면, 그 숫자는 행운의 숫자로 간주되지 않습니다.예시입력: n = 1234 출력: 행운의 숫자입니다 설명: 숫자 n에는 반복되는 자릿수가 없으므로 행운의 숫자입니다 입력: n = 3434 출력: 행운의 숫자가 아닙니다 설명: 숫자 n에서 3과 4가 각각 두 번씩 반복되