DatetimeIndex 빈도 감지란?Pandas에서 날짜·시간 데이터를 다룰 때 DatetimeIndex는 매우 유용한 인덱스 구조입니다. 이때 해당 인덱스가 어떤 주기(빈도)로 생성되었는지 확인해야 하는 경우가 종종 있습니다. 지정된 DatetimeIndex 객체의 빈도를 자동으로 감지하려면 DateTimeIndex.inferred_freq 속성을 사용하면 됩니다.이 속성은 인덱스에 명시적으로 빈도(freq)가 설정되어 있지 않더라도, 실제 날짜 값들의 간격을 분석하여 규칙적인 패턴을 추론해 줍니다.구현 단계먼저 필요한 라이브러
문제 설명nums라는 요소 목록이 주어졌을 때, 모든 연속된 하위 목록(부분 배열)에 그 하위 목록 안에서 정확히 한 번만 등장하는 요소가 최소 하나씩 존재하는지 확인해야 합니다. 단, 이 문제는 선형 시간 복잡도 O(n) 안에서 해결해야 한다는 조건이 있습니다.예를 들어 입력이 nums = [5, 10, 20, 10, 0]이라면 결과는 True입니다. nums의 모든 하위 목록 [[5], [10], [20], [10], [0], [5,10], [10,20], [20,10], [10,0], [5,10,20], [10,20,10],
DateTimeIndex에서 하루 중 특정 시각에 해당하는 값들의 인덱스 위치를 반환하려면 DateTimeIndex.indexer_at_time() 메서드를 사용하면 됩니다. 이 메서드는 지정한 시각과 일치하는 요소들의 정수 위치(인덱스)를 배열 형태로 반환해 주기 때문에, 시계열 데이터에서 특정 시간대의 데이터를 빠르게 찾을 때 유용합니다.필요한 라이브러리 임포트먼저 필요한 라이브러리를 임포트합니다.import pandas as pdDatetimeIndex 생성시작 시점 2021-10-30 02:30:50부터 총 5개의 기간(pe
개요Python의 Pandas 라이브러리에서 DateTimeIndex 객체에 대해 하루 중 특정 시간 범위(예: 오전 2시 30분 50초부터 오전 3시 20분 50초까지)에 속하는 값들의 인덱스 위치를 얻으려면 DateTimeIndex.indexer_between_time() 메서드를 사용하면 됩니다.이 메서드는 start_time과 end_time 사이에 있는 값들의 정수 인덱스 위치 배열을 반환합니다. 시계열 데이터에서 특정 시간대의 데이터만 추출하거나 필터링할 때 매우 유용하게 활용됩니다.필요한 라이브러리 임포트먼저 필요한 라
문제 이해하기 숫자로 이루어진 리스트 nums가 주어졌다고 가정해 보겠습니다. 목표는 연속된 모든 부분 배열(서브리스트)에 대해 각각의 최솟값을 구한 뒤, 이 값들을 모두 더한 합계를 계산하는 것입니다. 답이 매우 커질 수 있으므로, 최종 결과는 10^9 + 7로 나눈 나머지를 반환합니다. 예를 들어 입력이 nums = [5, 10, 20, 10, 0]이라면 출력은 90입니다. 생성 가능한 부분 배열은 총 15개([[5], [10], [20], [10], [0], [5,10], [10,20], [20,10], [10,0], [5,1
DateTimeIndex에서 하루 중 특정 시간대 사이에 있는 값들의 인덱스 위치를 반환하려면 DateTimeIndex.indexer_between_time() 메서드를 사용합니다. 이때 시작 시간까지 결과에 포함하려면 include_start 매개변수를 True로 설정하면 됩니다.1. 필요한 라이브러리 임포트먼저 pandas 라이브러리를 임포트합니다.import pandas as pd2. DatetimeIndex 생성기간(periods)은 7, 빈도(freq)는 분을 의미하는 20T(20분 간격)로 설정하고, 시간대(tz)는 호주
Pandas에서 DateTimeIndex.normalize() 메서드를 사용하면 DateTimeIndex에 포함된 시간 성분을 자정(00:00:00)으로 손쉽게 변환할 수 있습니다. 이 메서드는 날짜 정보는 그대로 유지하면서 시·분·초 부분만 잘라내기 때문에, 일 단위로 데이터를 그룹화하거나 집계할 때 매우 유용합니다.1. 필요한 라이브러리 임포트먼저 pandas를 임포트합니다.import pandas as pd2. DatetimeIndex 생성시작 시점을 2021-10-30 02:30:50으로 지정하고, 주기(periods)는 7
Pandas에서 날짜 형식(date format)에 따라 지정된 포맷 문자열들의 Index를 반환하려면 DateTimeIndex.strftime() 메서드를 사용합니다. 이 메서드는 datetime 값들을 원하는 형식의 문자열로 변환하여 새로운 Index 객체로 돌려주므로, 날짜 데이터를 보고서나 로그 형태로 가공할 때 매우 유용합니다.1. 라이브러리 임포트먼저 필요한 라이브러리를 임포트합니다.import pandas as pd2. DatetimeIndex 생성시작 시점을 2021-10-30 02:30:50으로 하고, 기간(peri
숫자로 이루어진 리스트 nums가 주어졌을 때, 모든 피크(peak) 요소의 인덱스를 오름차순으로 정렬하여 찾아야 합니다. 특정 인덱스 i가 피크가 되려면 다음 세 가지 조건을 모두 만족해야 합니다.오른쪽 방향에서 nums[i]와 다른 값을 가지는 첫 번째 숫자가 존재하지 않거나, 그 값이 nums[i]보다 작아야 합니다.왼쪽 방향에서 nums[i]와 다른 값을 가지는 첫 번째 숫자가 존재하지 않거나, 그 값이 nums[i]보다 작아야 합니다.왼쪽 또는 오른쪽 어느 한쪽이라도 nums[i]와 다른 숫자가 최소 하나 이상 존재해야 합
문제 개요 두 개의 숫자 k와 target이 주어진다고 가정해 보겠습니다. Amal과 Bimal이라는 두 플레이어가 게임을 진행하며, 각 라운드마다 플레이어는 1부터 k 사이의 숫자를 하나 골라 현재 총합에 더합니다. 이때 총합은 0에서 시작합니다. 누구든 총합을 target 이상으로 만들면 그 플레이어가 승리합니다. Amal이 항상 먼저 플레이한다고 할 때, 두 플레이어 모두 최적의 전략으로 게임한다는 조건 하에 Amal이 반드시 승리하도록 만들 수 있는지 확인해야 합니다. 예를 들어 k = 5, target = 10인 경우 출력
costs라는 이름의 리스트가 하나 있다고 가정해 보겠습니다. 여기서 costs[i]는 [c1, c2] 형태로 표현되며, 이는 i번째 사람이 0번 도시로 이동할 때 c1만큼, 1번 도시로 이동할 때 c2만큼의 비용이 든다는 의미입니다. 우리의 목표는 두 도시에 정확히 같은 수의 사람들을 배치하는 것이며, 이때 발생하는 최소 총비용을 구해야 합니다.예를 들어, 입력이 costs = [[2, 6], [10, 3], [4, 9], [5, 8]]라고 해보겠습니다. 이 경우 출력은 17이 됩니다. 0번과 2번 사람은 0번 도시로, 1번과 3
DateTimeIndex의 타임스탬프를 가장 가까운 발생 빈도로 스냅(snap)하려면 DateTimeIndex.snap() 메서드를 사용하면 됩니다. 이때 freq 매개변수를 통해 기준이 될 주기를 지정할 수 있습니다.먼저 필요한 라이브러리를 임포트합니다.import pandas as pd기간(periods)이 6이고 빈도(freq)가 D, 즉 일(day) 단위인 DatetimeIndex를 생성합니다. 시간대(timezone)는 호주 애들레이드로 설정했습니다.datetimeindex = pd.date_range(2021-10-20
과일 목록 fruits와 두 개의 값 k, cap이 주어졌다고 가정해 보겠습니다. 각 fruits[i]는 [c, s, t] 형태의 세 값을 가지며, 여기서 c는 해당 과일의 개당 가격, s는 개당 크기, t는 총 수량을 의미합니다. 또한 k는 용량이 cap인 과일 바구니의 개수입니다. 문제 설명 및 제약 조건 바구니를 채울 때는 아래 제약 조건을 순서대로 지켜야 합니다. 각 바구니에는 한 가지 종류의 과일만 담을 수 있습니다. 각 바구니는 최대한 꽉 차도록 채워야 합니다. 각 바구니는 최대한 저렴하게 채워야 합니다. 즉, 이 문
DateTimeIndex를 시간 단위로 반올림하기 Pandas에서 DateTimeIndex를 시간(hourly) 단위로 반올림하려면 DateTimeIndex.round() 메서드를 사용합니다. 이때 freq 매개변수에 시간을 의미하는 H 값을 지정하면 됩니다. 참고: 최신 버전의 Pandas에서는 분을 나타내는 별칭 T가 min으로 대체되었으니, 사용 중인 버전에 맞게 코드를 조정하면 됩니다. 1. 라이브러리 임포트 먼저 필요한 라이브러리를 임포트합니다. import pandas as pd 2. DatetimeIndex 생성 기
Pandas에서 DateTimeIndex를 분(minute) 단위로 반올림하려면 DateTimeIndex.round() 메서드를 사용하면 됩니다. 분 단위로 반올림할 때는 freq 매개변수에 T 값을 지정합니다.필요한 라이브러리 가져오기먼저 필요한 라이브러리를 임포트합니다.import pandas as pdDateTimeIndex 생성하기총 5개의 기간(period)을 가지며, 빈도는 초 단위(45초)로 설정하고 시간대(timezone)는 Australia/Adelaide로 지정한 DatetimeIndex를 생성해 보겠습니다.dat
문제 설명길이가 짝수인 소문자 문자열 s가 주어졌다고 가정해 보겠습니다. 우리는 모든 i(0 ≤ i < n/2)와 j(n/2 ≤ j < n)에 대해 아래 세 가지 조건 중 하나가 성립하도록 문자열을 변경할 때, 변경해야 할 문자의 최소 개수를 구해야 합니다.s[i] > s[j]s[i] < s[j]s[i] == s[j]예를 들어 입력이 s = pppxxp라고 한다면 출력은 1입니다. 마지막 p를 x로 바꿔주면 s[i] < s[j] 조건을 충족할 수 있기 때문입니다.풀이 접근 방법이 문제는 다음 단계를 따라
오름차순으로 정렬된 숫자 리스트 nums와 하나의 숫자 target이 주어졌다고 가정해 봅시다. 이때 nums의 정렬 상태가 유지되도록 target을 삽입해야 할 인덱스를 찾아야 합니다. 만약 target이 이미 리스트에 존재한다면, 삽입 가능한 인덱스 중 가장 뒤쪽(가장 큰) 인덱스를 반환해야 합니다.추가 조건은 두 가지입니다. 라이브러리 함수를 사용하지 않고 직접 구현해야 하며, 시간 복잡도는 O(log n)을 만족해야 합니다. 이 조건을 모두 충족하는 방법은 바로 이진 탐색(Binary Search)입니다.문제 예시예를 들어
숫자 num이 주어졌을 때, 이를 이에 대응하는 로마 숫자(Roman Numeral)로 변환하는 문제를 생각해 봅시다. 로마 숫자는 아래와 같은 기호와 값을 사용합니다.I = 1V = 5X = 10L = 50C = 100D = 500M = 1000로마 숫자의 기본 규칙과 특수 경우일반적으로 로마 숫자는 값이 큰 기호부터 작은 기호 순서대로 왼쪽에서 오른쪽으로 배치되며, 전체 값은 모든 기호의 합으로 계산됩니다. 하지만 몇 가지 특수한 경우가 있습니다. 값이 작은 기호가 값이 큰 기호의 왼쪽에 위치하면, 큰 값에서 작은 값을 빼는 것
두 개의 이진 행렬 mat1과 mat2가 주어졌다고 가정해 봅시다. 여기서 1은 육지를, 0은 물을 의미하며, 물로 둘러싸인 1(육지)들의 집합을 섬이라고 정의합니다. 우리가 구해야 할 것은 mat1과 mat2 양쪽에 정확히 같은 좌표에 걸쳐 존재하는 섬의 개수입니다.문제 예시예를 들어 입력이 다음과 같다고 해보겠습니다.mat1:101100100mat2:101100101이 경우 출력은 2가 됩니다. 겹치는 섬들은 아래와 같이 표시되며, 왼쪽의 L자 형태 섬과 오른쪽 상단의 단일 셀 섬, 총 두 개가 두 행렬에서 동일한 위치에 존재하
이 문제에서는 walks와 target이라는 두 개의 리스트(값)가 주어집니다. 우리는 1차원 수직선 위의 위치 0에서 출발합니다. |walks[i]|는 실제로 걸은 걸음 수를 의미하며, walks[i]가 양수면 오른쪽으로, 음수면 왼쪽으로 이동했음을 나타냅니다. 걸을 때마다 한 블록씩 움직이므로, 현재 위치의 다음 정수 위치 또는 이전 정수 위치로 이동하게 됩니다.우리가 구해야 하는 것은 최소 target번 이상 밟고 지나간 블록의 개수입니다.예를 들어, 입력이 walks = [3, -7, 2]이고 target = 2라고 가정해