Python으로 데이터를 다룰 때 여러 개의 배열(리스트)에 공통으로 존재하는 요소를 찾아야 하는 경우가 종종 발생합니다. 이러한 작업은 배열들을 딕셔너리(dictionary)로 변환한 뒤 교집합 연산을 적용하면 효율적으로 처리할 수 있습니다.핵심 아이디어는 collections 모듈의 Counter 컨테이너를 활용하는 것입니다. Counter는 각 요소가 몇 번 등장했는지 그 개수(count)를 저장하며, 이를 dict() 함수로 변환하면 일반 딕셔너리 형태로 다룰 수 있습니다. 이후 & 연산자를 사용해 세 배열의 항목(i
파이썬에서 딕셔너리(dictionary)는 다른 딕셔너리를 값으로 가질 수 있습니다. 이처럼 딕셔너리 안에 딕셔너리가 여러 겹으로 들어 있는 구조를 중첩 딕셔너리(nested dictionary)라고 부릅니다.이 글에서는 중첩된 딕셔너리가 몇 단계까지 중첩되어 있는지, 즉 딕셔너리의 깊이(depth)를 계산하는 두 가지 방법을 살펴보겠습니다.방법 1: 문자열 변환 활용하기가장 간단한 접근 방식은 딕셔너리 전체를 문자열로 변환한 뒤, 여는 중괄호 {가 등장하는 횟수를 세는 것입니다. 중괄호 하나가 열릴 때마다 새로운 딕셔너리 레벨이
NumPy 라이브러리를 사용해 데이터를 처리하다 보면, 특정 숫자 범위에 해당하는 요소만 골라내야 하는 경우가 자주 발생합니다. 이럴 때 NumPy에서 기본으로 제공하는 함수들을 활용하면 간단하게 조건에 맞는 요소를 필터링할 수 있습니다.이 글에서는 대표적인 두 가지 방법을 소개합니다. 하나는 np.where와 np.logical_and를 함께 사용하는 방법이고, 다른 하나는 *(곱셈) 연산자를 이용해 불리언 마스크를 만드는 방법입니다.방법 1: np.logical_and와 np.where 사용하기이 방식은 NumPy 배열에 log
피보나치 수열은 자연 현상을 설명하는 데 널리 알려진 대표적인 수학적 수열입니다. 이 수열은 0과 1로 시작하며, 그다음 항부터는 앞선 두 항을 더한 값으로 차례대로 이어집니다. 예를 들어 0, 1, 1, 2, 3, 5, 8, 13처럼 각 항이 직전 두 항의 합으로 구성됩니다.이 글에서는 파이썬의 람다(lambda) 함수를 활용해 원하는 개수만큼의 피보나치 수열 항을 생성하는 두 가지 방법을 살펴봅니다.방법 1: sum과 map 함수 함께 사용하기map 함수는 리스트의 각 요소에 람다 함수를 적용할 때 유용합니다. 여기서는 리스트
데이터 분석을 하다 보면 리스트에 None 값이 포함되어 있는 경우를 자주 마주하게 됩니다. None 값은 수학 연산이나 문자열 연산 등에 직접 사용할 수 없기 때문에, 해당 값의 위치를 먼저 파악한 뒤 변환하거나 적절하게 처리해야 합니다. 이 글에서는 리스트 내 None 값의 인덱스를 찾는 두 가지 대표적인 방법을 소개합니다.1. range() 함수 활용하기range() 함수와 len() 함수를 조합하면 리스트의 각 요소를 순회하면서 None과 비교하고, 해당 인덱스 위치를 추출할 수 있습니다. 일반적으로 for 루프 또는 리스트
다양한 길이의 단어가 담긴 리스트에서 가장 긴 단어 상위 n개를 골라야 하는 상황을 생각해 볼 수 있습니다. 이 글에서는 이러한 작업을 수행하는 여러 가지 방법을 예제 코드와 함께 살펴보겠습니다.1. count()와 sorted() 활용첫 번째 방법은 리스트의 요소들을 내림차순으로 정렬하여 가장 긴 단어들이 리스트 앞쪽에 오도록 만드는 것입니다. 이때 itertools의 count()를 함께 사용하면 각 단어에 고유한 순번을 부여할 수 있어, 길이가 같은 단어들 사이의 정렬 순서도 안정적으로 유지됩니다.정렬이 완료되면 필요한 개수(
파이썬 딕셔너리를 다루다 보면 키는 고유하지만 값은 중복되는 경우를 자주 만나게 됩니다. 예를 들어 여러 요일에 동일한 숫자가 매핑되어 있을 때, 같은 값을 공유하는 모든 키를 한 번에 확인하고 싶을 수 있습니다. 이번 글에서는 이러한 문제를 해결하는 두 가지 방법을 예제 코드와 함께 살펴보겠습니다.방법 1: 키와 값 교환하기가장 직관적인 접근 방식은 딕셔너리의 키와 값을 서로 뒤바꾸는 것입니다. 원래의 값을 새로운 키로 삼고, 그 값에 연결된 키들을 리스트에 계속 추가하면 중복된 값들이 자동으로 하나로 묶입니다. 그 결과 새로운
주어진 문자열에는 숫자와 알파벳이 뒤섞여 있는 경우가 많습니다. 이번 글에서는 문자열 안에서 알파벳 또는 숫자가 연속으로 이어지는 부분 문자열(Substring) 중 가장 긴 것을 찾는 두 가지 방법을 살펴보겠습니다. 방법 1: re 모듈 활용하기 정규표현식(regular expression)을 다루는 re 모듈을 사용하면 매우 간결하게 문제를 해결할 수 있습니다. findall 함수로 알파벳(\D+)과 숫자(\d+)가 연속된 모든 부분 문자열을 추출한 뒤, max 함수에 len을 기준 키로 지정하여 그중 길이가 가장 긴 부분
데이터 분석을 하다 보면 다양한 문제에 직면하게 됩니다. 이 글에서는 숫자로 구성된 리스트가 주어졌을 때, 그 안에서 값의 차이가 가장 큰 요소 쌍(pair)을 찾는 방법을 예제와 함께 살펴보겠습니다. 1. heapq의 nlargest 활용하기 이 방법은 먼저 리스트에서 만들 수 있는 모든 요소 조합을 생성한 뒤, 각 조합에서 두 요소의 차이(절댓값)를 계산합니다. 마지막으로 heapq 모듈의 nlargest 함수를 사용해 차이가 가장 큰 상위 n개의 쌍을 추출합니다. 여러 개의 후보 쌍을 한 번에 확인하고 싶을 때 유용합니다. 예
NumPy는 수치 데이터 처리를 위한 파이썬의 강력한 라이브러리입니다. 주로 배열 형태로 데이터를 입력받아 통계 함수를 비롯한 다양한 연산을 적용하여 결과를 도출합니다. 이 글에서는 여러 개의 NumPy 배열로 이루어진 리스트가 있을 때, 각 배열의 평균값을 구하는 방법을 소개합니다.방법 1: np.mean() 함수 사용NumPy의 mean() 함수는 배열을 인자로 받아 해당 배열에 포함된 모든 요소들의 산술 평균을 계산해 줍니다. 따라서 반복문(for loop)을 사용해 입력 리스트를 순회하면서 각 배열마다 np.mean()을 호
파이썬 리스트는 문자열과 숫자를 하나의 리스트에 함께 담을 수 있습니다. 이처럼 서로 다른 자료형이 섞여 있는 리스트를 이기종(heterogeneous) 리스트라고 부릅니다. 이 글에서는 이러한 리스트에서 숫자 요소만 대상으로 최솟값과 최댓값을 구하는 방법을 예제와 함께 살펴보겠습니다.1. 최솟값 찾기가장 기본적인 접근 방식은 isinstance() 함수를 사용해 리스트에서 정수(int) 타입인 요소만 걸러낸 뒤, min() 함수를 적용하는 것입니다. 제너레이터 표현식을 활용하면 한 줄로 간결하게 처리할 수 있습니다.예제 코드lis
파이썬으로 작업하다 보면 두 개의 리스트를 단순히 값만 비교하는 것이 아니라, 값과 위치(인덱스)를 함께 비교해야 하는 경우가 있습니다. 예를 들어 데이터 검증이나 변경 사항 추적 시, 두 리스트에서 동일한 인덱스에 있지만 값이 서로 다른 요소를 찾아야 할 수 있습니다. 이 글에서는 그러한 불일치 항목의 인덱스를 찾는 세 가지 방법을 소개합니다. 1. for 루프 사용하기 가장 기본적인 방법은 for 루프를 사용해 동일한 인덱스의 값을 하나씩 비교하는 것입니다. 값이 일치하지 않으면 해당 인덱스를 결과 리스트에 추가합니다. 루프는
숫자로 이루어진 리스트가 있을 때, 해당 숫자들이 연속적인지 확인하고 싶은 경우가 있습니다. 또한 최댓값을 범위의 끝으로 간주했을 때, 그 범위 안에서 어떤 숫자가 빠져 있는지 찾아야 할 수도 있습니다. 이번 글에서는 Python으로 누락된 요소를 찾는 두 가지 방법을 소개합니다. range와 max 함수 활용하기 첫 번째 방법은 not in 연산자와 함께 for 반복문을 사용하여 특정 범위 내에 존재하지 않는 값을 확인하는 것입니다. 이렇게 찾은 누락 값들을 새로운 리스트에 추가하면, 그 리스트가 곧 결과 집합이 됩니다. 예제
정렬된 숫자 리스트가 주어졌을 때, 해당 숫자 범위 안에서 빠져 있는 숫자들을 찾아야 하는 경우가 자주 있습니다. 예를 들어 [1, 5, 6, 7, 11, 14]라는 리스트가 있다면, 1부터 14 사이에 존재하지 않는 숫자들이 무엇인지 확인하는 것이죠.이번 글에서는 파이썬으로 이 문제를 해결하는 두 가지 대표적인 방법을 소개합니다.방법 1: range 함수 활용리스트의 첫 번째 요소부터 마지막 요소까지의 범위를 range()로 생성한 뒤, for 루프를 돌면서 각 숫자가 리스트에 포함되어 있는지 not in 연산자로 검사하는 방식입
파이썬의 튜플(tuple)은 순서가 있으며 한 번 생성되면 변경할 수 없는 불변(immutable) 자료형입니다. 흥미로운 점은 튜플이 리스트를 요소로 가질 수도 있다는 것입니다. 이번 글에서는 리스트로 구성된 튜플이 주어졌을 때, 그 안에 포함된 리스트의 개수를 구하는 두 가지 방법을 알아보겠습니다.1. len() 함수 사용하기가장 간단한 방법은 내장 함수인 len()을 활용하는 것입니다. 튜플의 각 요소가 곧 리스트이므로, len() 함수는 해당 튜플에 포함된 리스트의 개수를 그대로 반환해 줍니다.예제tupA = ([a, b,
Python으로 데이터 분석을 하다 보면 리스트에서 특정 조건을 만족하는 요소만 골라내야 하는 상황이 자주 발생합니다. 이번 글에서는 주어진 값 k보다 큰 요소들 중에서 가장 작은 값을 찾는 세 가지 방법을 예제 코드와 함께 살펴보겠습니다.1. min 함수와 제너레이터 표현식 활용리스트의 각 요소를 순회하면서 값이 k보다 큰 요소만 추출한 뒤, min 함수를 적용해 그중 최솟값을 구하는 방법입니다. 코드가 간결하고 직관적이라 가장 널리 쓰이는 방식입니다.예제listA = [1, 5, 6, 7, 11, 14] # 원본 리스트 출력
PowerShell에서 특정 명령어에 대한 도움말을 확인하려면 Get-Help cmdlet(별칭: help)을 사용하면 됩니다. 도움이 필요한 명령어와 함께 입력하기만 하면 됩니다.예를 들어 다음과 같이 사용합니다.help Get-Service이 명령을 실행하면 NAME(이름), SYNOPSIS(개요), SYNTAX(구문), DESCRIPTION(설명), RELATED LINKS(관련 링크), REMARKS(비고) 항목에 대한 설명을 확인할 수 있습니다.Get-Help의 주요 매개변수Get-Help는 목적에 따라 다양한 매개변수를
문제 개요n명의 계산원(캐셔)이 지폐를 교환해 주고 있는 상황을 가정해 보겠습니다. 현재 i번째 계산원 앞에는 k[i]명의 손님이 줄을 서서 기다리고 있으며, i번째 계산원 줄에 서 있는 j번째 손님은 m[i][j]장의 지폐를 들고 있습니다. 이때 새로 줄을 서려는 사람이 자신의 지폐를 가장 빨리 교환받으려면 어느 계산원을 선택해야 할까요? 즉, 지폐를 교환받는 데 걸리는 최소 시간을 구하는 것이 이 문제의 목표입니다.시간 계산 규칙은 다음과 같습니다.계산원이 지폐 1장을 스캔하는 데 5초가 걸립니다.한 명의 손님에 대한 모든 지폐
문제 개요a + b = c 형태의 방정식이 있고, 이 중 a, b, c 세 항 가운데 하나가 누락되어 있다고 가정해 봅시다. 우리가 해야 할 일은 누락된 값을 찾아내는 것입니다.예를 들어 입력이 ? + 4 = 9와 같다면, 출력은 5가 되어야 합니다.해결 접근 방식이 문제는 다음 단계를 따라 해결할 수 있습니다.문자열에서 모든 공백을 제거한 뒤, + 기호와 = 기호를 쉼표(,)로 치환합니다.쉼표를 기준으로 문자열을 분할하여 각 항을 담은 리스트(elements)를 만듭니다.인덱스 변수(idx)를 0으로 초기화합니다.리스트의 처음부터
문제 개요 n개의 숫자로 이루어진 배열이 주어졌을 때, 배열의 모든 숫자를 곱한 결과값 끝에 연속해서 붙어 있는 0의 개수를 구하는 문제입니다. 예를 들어 입력이 [200, 20, 5, 30, 40, 14]라면, 200 × 20 × 5 × 30 × 40 × 14 = 336000000이 되고, 마지막에 0이 여섯 개 연속으로 이어져 있으므로 정답은 6입니다. 핵심 아이디어: 2와 5의 짝 곱셈 결과 끝에 붙는 0은 소인수분해했을 때 2와 5가 한 쌍을 이룰 때마다 하나씩 생깁니다. 10 = 2 × 5이기 때문입니다. 따라서 전체 곱