문제 설명문자열 s가 주어졌을 때, 문자열이 완전히 정렬된 상태가 될 때까지 다음과 같은 연산을 반복해서 수행해야 합니다.1단계: 1 ≤ i < len(s)를 만족하면서 s[i] < s[i-1]인 가장 큰 인덱스 i를 선택합니다.2단계: i ≤ j < len(s)를 만족하면서, 범위 [i, j]에 속한 모든 k에 대해 s[k] < s[i-1]이 성립하는 가장 큰 인덱스 j를 선택합니다.3단계: 인덱스 i-1과 j에 위치한 두 문자를 서로 교환합니다.4단계: 인덱스 i부터 끝까지의 접미사(suffix)를 뒤집습니
문제 이해하기 두 개의 배열 arr1과 arr2가 주어졌다고 가정해 봅시다. 여기서 어떤 리스트의 XOR 합이란 리스트에 포함된 모든 원소를 비트 단위 XOR 연산한 결과를 의미합니다. 만약 리스트에 원소가 하나뿐이라면, 그 원소 자체가 곧 XOR 합이 됩니다. 이제 모든 인덱스 쌍 (i, j)(단, 0 <= i < arr1의 길이, 0 <= j < arr2의 길이)에 대해 arr1[i]와 arr2[j]의 비트 단위 AND 연산 결과로 이루어진 새로운 리스트를 생각해 보겠습니다. 우리가 구해야 하는 값은 바로
값 n과 제한 조건 목록인 restrictions가 주어졌다고 가정해 보겠습니다. 우리는 도시에 n개의 새로운 건물을 세우려고 하지만, 몇 가지 제약 조건이 존재합니다. 건물들은 한 줄로 배치되며 1부터 n까지 번호가 붙습니다. 제한 조건은 두 개의 값을 가지는 쌍으로 표현되며, restrictions[i] = (id_i, max_height_i)는 id_i번 건물의 높이가 반드시 max_height_i 이하이어야 한다는 의미입니다. 새로 지어지는 건물들의 높이에 대한 도시 규정은 다음과 같습니다. 각 건물의 높이는 0 또는 양
rooms라는 배열이 있다고 가정해 보겠습니다. rooms[i]는 [roomId_i, size_i] 쌍을 담고 있으며, 이는 id가 roomId_i이고 크기가 size_i인 방 하나를 나타냅니다. 모든 방 번호는 서로 중복되지 않습니다. 또한 queries라는 배열이 있는데, queries[j]는 [preferred_j, minSize_j] 쌍을 담고 있습니다.j번째 쿼리에 대한 답은 다음 두 조건을 동시에 만족하는 방의 번호(id)입니다.방의 크기가 minSize_j 이상일 것|id − preferred_j| 값이 최소화될 것절대
문제 이해하기구간(interval) 목록이 주어진다고 가정해 보겠습니다. 여기서 intervals[i]는 쌍 (left_i, right_i)으로 표현되며, i번째 구간이 left_i에서 시작하여 right_i에서 끝난다는 의미입니다(양쪽 경계 모두 포함). 또한 queries라는 배열도 함께 주어집니다.j번째 쿼리에 대한 답은 left_i <= queries[j] <= right_i 조건을 만족하는, 즉 해당 쿼리 값을 포함하는 구간 중에서 크기가 가장 작은 구간의 길이입니다. 만약 조건을 만족하는 구간이 하나도 없다면
문제 개요n개의 색칠된 노드와 m개의 간선으로 이루어진 방향 그래프가 있다고 가정해 보겠습니다. 노드는 0부터 n-1까지 번호가 매겨져 있으며, 소문자로 구성된 문자열 col이 주어집니다. 여기서 col[i]는 그래프에서 i번째 노드(0 인덱스 기준)의 색상을 나타냅니다. 또한 간선 목록이 주어지는데, edges[j] = (u, v)는 u에서 v로 향하는 방향 간선이 존재함을 의미합니다.그래프에서 유효한 경로(valid path)란 노드의 수열 x₁부터 xₖ까지에 대해 xᵢ에서 xᵢ₊₁로 향하는 방향 간선이 존재하는 경우를 말합니다
AngularJS의 forEach() 함수는 Iterator 객체를 활용하여 객체 컬렉션이나 배열의 요소를 순회(iterate)하는 데 사용됩니다. 각 요소를 처리할 때마다 iterator 함수가 호출되며, 이때 (value, key, obj) 세 가지 인자가 함께 전달됩니다.value – 객체의 속성 값 또는 배열의 개별 요소를 나타냅니다.key – 객체 속성의 키 또는 배열 요소의 인덱스를 나타냅니다.obj – 순회 대상이 되는 전체 객체 자체를 나타냅니다.참고로 forEach() 함수는 상속된(inherited) 속성까지는 순
AngularJS의 isUndefined() 메서드는 전달된 참조(reference)가 정의되어 있는지 여부를 검사하는 유틸리티 함수입니다. 함수에 전달된 참조가 undefined일 경우 true를 반환하고, 값이 정의되어 있다면 false를 반환합니다.문법(Syntax)angular.isUndefined(value)value 매개변수에는 정의 여부를 확인하고자 하는 참조 값을 넣습니다.예제 – 참조 값이 undefined인지 확인하기Angular 프로젝트 디렉터리에 isUndefined.html 파일을 생성한 뒤, 아래 코드 스니
ax.get_ylim()은 matplotlib에서 현재 그래프의 y축 하한값과 상한값을 튜플(tuple) 형태로 반환하는 메서드입니다. 이 메서드를 활용하면 자동으로 설정된 축 범위를 확인할 수 있으며, 이후 set_ylim()으로 축 범위를 조정하기 전에 기존 값을 저장해 두는 용도로도 유용하게 사용됩니다.사용 단계그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.새로운 figure를 생성하거나 기존 figure를 활성화합니다.서브플롯 배치의 일부로 figure에 ax(축 객체)를 추가
프로필 히스토그램(profile histogram)은 각 빈(bin)에 해당 구간 데이터들의 평균값을 담는 특수한 형태의 히스토그램입니다. 일반 히스토그램이 구간별 개수(count)를 표시하는 것과 달리, 프로필 히스토그램은 구간별 평균을 보여주기 때문에 두 변수 간의 관계를 직관적으로 파악할 때 유용합니다. Python에서 프로필 히스토그램 그리는 방법 Python에서 프로필 히스토그램을 그리려면 Seaborn 라이브러리의 regplot 메서드를 활용하면 됩니다. x_bins 파라미터를 사용하면 x 변수가 자동으로 이산형 빈으로
matplotlib에서 imshow로 표시한 이미지를 늘리거나 왜곡하지 않으면서 크기를 조절하려면 extent와 aspect 매개변수를 함께 활용하면 됩니다. 아래에서 단계별로 자세히 살펴보겠습니다.구현 단계그림(figure) 크기를 설정하고, 서브플롯 사이와 주변의 여백을 자동으로 조정합니다.numpy를 이용해 4×4 차원의 난수 데이터 포인트를 생성합니다.생성한 데이터를 이미지 형태, 즉 2D 정규 래스터(raster)에 표시합니다.extent 매개변수를 사용하여 이미지 버퍼의 픽셀 좌표를 데이터 공간 좌표계에 매핑합니다. ex
개요Matplotlib으로 그래프를 그리다 보면 X축 레이블이 길어서 눈금 사이에 겹치는 문제가 자주 발생합니다. 이럴 때 tight_layout(타이트 레이아웃)을 활성화하고 눈금(tick) 레이블을 회전시키면, 전체 그림 크기에 맞춰 텍스트가 자동으로 배치되어 가독성이 크게 향상됩니다.구현 단계그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 자동으로 조정합니다.0부터 9까지의 데이터 포인트를 플롯합니다.X축에 표시할 레이블(labels) 리스트를 생성합니다.X축에 눈금과 레이블을 배치하면서
Seaborn에서 hue 매개변수를 활용하면 하나의 그래프에 두 개의 바이올린 플롯(violin plot) 시리즈를 손쉽게 나란히 그릴 수 있습니다. 바이올린 플롯은 박스 플롯과 커널 밀도 추정(KDE)을 결합한 시각화 기법으로, 데이터의 분포 형태를 직관적으로 보여준다는 장점이 있습니다. 구현 단계 그림 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다. 온라인 저장소에서 예제 데이터셋을 불러옵니다(인터넷 연결이 필요합니다). violinplot() 메서드를 사용하여 바이올린 플롯을 생성합니다. 이때 h
Matplotlib를 활용하면 몇 가지 간단한 단계만으로 모자이크 플롯(mosaic plot)을 손쉽게 그릴 수 있습니다. 모자이크 플롯은 범주형 데이터의 비율과 상대적 크기를 직사각형 영역으로 표현하여 한눈에 비교할 수 있게 해주는 유용한 시각화 기법입니다. 모자이크 플롯 작성 단계 그림(figure) 크기를 설정하고, 서브플롯 사이 및 주변의 여백(padding)을 조정합니다. statsmodels 패키지를 설치합니다(pip install statsmodels). 모자이크 플롯을 생성하려면 이 패키지가 반드시 필요합니다. s
k-최근접 이웃(k-Nearest Neighbors, k-NN)은 가장 널리 쓰이는 머신러닝 분류 알고리즘 중 하나로, 새로운 데이터를 주변 k개 이웃의 다수결로 분류합니다. 학습된 모델이 클래스 간 영역을 어떻게 나누는지 보여주는 결정 경계(decision boundary)를 시각화하면 모델의 동작 방식을 직관적으로 파악할 수 있습니다. 이 글에서는 Matplotlib과 scikit-learn을 활용해 k-NN 결정 경계 그래프를 그리는 방법을 단계별로 살펴보겠습니다. 구현 단계 그림(figure) 크기를 설정하고 서브플롯 주변
Matplotlib 그래프의 왼쪽 하단 모서리에 (0,0) 좌표를 표시하려면 xlim()과 ylim() 메서드를 사용하면 됩니다. 이 두 메서드는 각각 x축과 y축의 표시 범위를 지정하는 역할을 하며, 축의 최솟값을 0으로 설정함으로써 원점이 그래프의 왼쪽 하단에 위치하도록 만들 수 있습니다. 구현 단계 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다. x와 y에 대한 데이터 포인트 배열을 생성합니다. x와 y 데이터 포인트를 플롯(plot)합니다. xlim()과 ylim() 메서드로
Matplotlib에서 xlim(), ylim() 등으로 축 제한(axis limit)을 설정하면 그래프 주변의 여백(padding)이 잘려 없어지는 경우가 있습니다. 이때 패딩을 그대로 유지하려면 자동 레이아웃(tight layout) 기능을 비활성화해야 합니다. 즉, plt.rcParams[figure.autolayout] = False로 설정하면 축 제한을 변경하더라도 원래의 여백이 보존됩니다.구현 단계figure.figsize로 그림 크기를 설정하고, 서브플롯 사이 및 주변의 패딩을 조정합니다.numpy를 사용하여 x, y
Python의 matplotlib 라이브러리를 사용하면 리스트 형태의 데이터를 손쉽게 막대 차트(bar chart)로 시각화할 수 있습니다. 이 글에서는 간단한 예제를 통해 막대 차트를 그리는 과정을 단계별로 살펴보겠습니다. 막대 차트 그리는 단계 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다. 데이터 포인트가 담긴 리스트를 준비합니다. plt.bar() 함수를 사용하여 데이터로 막대 플롯을 생성합니다. plt.show() 메서드를 호출하여 그래프를 화면에 표시합니다. 예제 코드
데이터 분석이나 시각화 작업을 하다 보면 (x, y, z) 좌표가 담긴 튜플 리스트를 3D 표면 그래프로 변환해야 하는 경우가 자주 있습니다. 이 글에서는 Python의 matplotlib 라이브러리를 사용해 튜플 리스트로부터 3D 표면(surface) 플롯을 그리는 방법을 단계별로 살펴보겠습니다.구현 단계그림(figure) 크기를 설정하고 서브플롯 주변의 여백(padding)을 조정합니다.x, y, z 좌표를 포함하는 튜플 리스트를 준비합니다.zip(*data)를 활용해 튜플 리스트에서 x, y, z 데이터 포인트를 각각 추출합니
Matplotlib에서 수학 방정식을 이용해 평면(plane)을 시각화하려면 NumPy로 격자(grid) 데이터를 생성한 뒤, 3D 축 위에 표면(surface) 플롯을 그리면 됩니다. 아래에서 단계별로 자세히 살펴보겠습니다. 구현 단계 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다. NumPy를 사용해 x, y 데이터 포인트를 생성합니다. x와 y 값을 바탕으로 평면의 방정식(eq)을 계산합니다. 새 figure를 생성하거나 기존 figure를 활성화합니다. projection=3