matplotlib에서 막대(bar) 패치의 테두리를 제어하려면 edgecolor와 linewidth 옵션을 활용하면 됩니다. 아래에서 단계별로 살펴보겠습니다.구현 단계그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.막대의 높이(height) 리스트와 X축에 표시할 라벨(labels) 튜플을 생성합니다.bar() 메서드의 인자에 edgecolor를 지정하여 막대 패치의 테두리 색상을 제어합니다. 여기서는 edgecolor=green을 사용했습니다.X축의 눈금(ticks)과 라벨을 설정
Seaborn의 countplot에서 각 막대 상단에 개수(count) 값을 표시하려면 annotate() 함수를 활용하면 됩니다. 아래에서 단계별로 자세히 알아보겠습니다.구현 단계그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.한 개의 열(column)을 가진 Pandas 데이터프레임을 생성합니다.카운트 플롯(countplot)은 양적 변수가 아닌 범주형 변수를 대상으로 한 히스토그램이라고 생각할 수 있습니다.카운트 플롯이 반환한 axes 객체를 순회(iterate)하면서 각 막대
Python에서 3D 플롯(3차원 그래프)을 PDF 파일로 저장하려면 Matplotlib의 savefig() 메서드를 활용하면 됩니다. PDF는 벡터 기반 형식이기 때문에 확대하거나 인쇄해도 화질 저하 없이 선명한 품질을 유지할 수 있다는 장점이 있습니다. 아래 단계를 따라 하면 손쉽게 구현할 수 있습니다.구현 단계figure.figsize와 figure.autolayout 설정으로 그림 크기를 지정하고, 서브플롯 사이 및 주변의 여백(padding)을 자동으로 조정합니다.plt.figure()로 새 figure를 생성하거나 기존
Matplotlib에서 곡선의 특정 구간을 조건에 따라 논리적으로 음영 처리하려면 BrokenBarHCollection 클래스의 span_where() 메서드를 활용할 수 있습니다. 이 방법을 사용하면 곡선 값이 양수인 구간과 음수인 구간을 각각 다른 색상으로 손쉽게 강조할 수 있습니다.구현 단계그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백(padding)을 자동으로 조정합니다.NumPy를 사용하여 t, s1, s2 데이터 포인트를 생성합니다.figure와 subplot 세트를 생성합니다.t와 s1 데이터를 플
Seaborn으로 히트맵(heatmap)을 그릴 때, 데이터의 패턴에 집중할 수 있도록 축의 눈금 표시(tick mark)를 제거하고 싶은 경우가 있습니다. 이 글에서는 Matplotlib의 tick_params() 메서드를 활용해 히트맵에서 축 눈금을 간단히 제거하는 방법을 소개합니다.구현 단계그림(figure) 크기를 설정하고, 서브플롯 주변 및 사이의 여백을 자동으로 조정합니다.NumPy를 이용해 4×4 크기의 난수 데이터를 생성합니다.sns.heatmap()을 호출하여 데이터를 색상으로 인코딩된 행렬 형태로 시각화합니다.ti
Matplotlib에서 그래프를 화면에 표시할 때 plt.show()와 fig.show() 중 어떤 것을 사용해야 할지 혼란스러울 수 있습니다. 두 메서드의 차이점을 명확히 이해하면 코드 작성이 훨씬 수월해집니다. plt.show()와 fig.show()의 핵심 차이 plt.show()는 인터랙티브(대화형) 모드가 아닐 때, 즉 일반 스크립트 실행 환경에서 플롯을 화면에 표시하는 데 필요합니다. 반면 fig.show()는 인터랙티브 모드에서 여러 개의 figure 객체를 한 번에 화면에 띄우고 싶을 때 유용합니다. 간단한 예제를 통
문제 개요 배열 하나가 주어지고, 여기에 삽입 정렬(Insertion Sort)을 적용해야 한다고 가정해 보겠습니다. 삽입 정렬은 각 원소를 이미 정렬된 앞부분과 비교하여 자신의 올바른 위치로 한 칸씩 시프트(이동)시키는 방식으로 동작합니다. 이때 우리가 구해야 하는 것은 배열 전체가 정렬될 때까지 발생하는 총 시프트 횟수입니다. 결과값은 정수이며, 배열이 이미 정렬되어 있는 경우에는 0을 반환합니다. 예를 들어 입력이 다음과 같다면, [4, 5, 3, 1, 2] 각 원소가 제자리에 삽입되는 과정은 아래와 같습니다. [4, 5, 3
문제 개요두 개의 문자열이 주어져 있고, 이 문자열들을 조합해 사전순(lexicographically)으로 가장 작은 문자열을 만들려고 합니다. 문자열을 구성하는 규칙은 다음과 같습니다. 매 단계마다 두 문자열의 현재 첫 글자를 비교하여, 사전순으로 더 작은 글자를 해당 문자열에서 추출해 결과 문자열에 붙입니다. 두 글자가 같아 동률인 경우에는 첫 번째 문자열에서 글자를 가져옵니다. 이 과정을 두 문자열이 모두 빌 때까지 반복하며, 최종적으로 완성된 최소 문자열을 반환해야 합니다.예를 들어 입력이 input_1 = TUTORIALS
문자열 s와 쿼리 목록 Q가 주어졌다고 가정해 보겠습니다. 각 쿼리 Q[i]는 쌍 (l, r)을 담고 있으며, 우리는 s의 l번째부터 r번째까지 잘라낸 부분 문자열과 유사한 부분 문자열(s의 x번째부터 y번째까지)이 전체에서 몇 개나 되는지 찾아야 합니다.두 문자열 s와 t가 유사하다고 판단되는 조건은 다음과 같습니다.두 문자열의 길이가 서로 같아야 합니다.모든 인덱스 쌍 (i, j)에 대해, s[i]와 s[j]가 같다면 t[i]와 t[j]도 반드시 같아야 하고, 반대로 s[i]와 s[j]가 다르다면 t[i]와 t[j]도 서로 달라
문제 소개 길이가 n인 문자열 s와 쿼리 리스트 Q가 주어졌다고 가정해 보겠습니다. 각 쿼리 Q[i]는 한 쌍의 값 (l, r)을 담고 있으며, 각 쿼리마다 문자열 s에서 인덱스 l부터 r까지(양 끝 포함) 범위에 속하는 서로 다른 부분 문자열(distinct substring)의 개수를 세어야 합니다. 예를 들어 입력이 s = ppqpp, Q = [(1,1), (1,4), (1,1), (0,2)]라면 결과는 [1, 8, 1, 5]가 됩니다. 그 이유는 다음과 같습니다. 쿼리 (1, 1): 해당 범위의 문자열은 p 하나뿐이므로 서
리뷰 목록 reviews와 임계값 t가 주어졌다고 가정해 보겠습니다. 각 항목 reviews[i]가 [x, y] 형태일 때, 이는 i번째 제품이 별 5개짜리 평점을 x개, 그리고 전체 리뷰 y개를 받았다는 의미입니다. 우리가 구해야 할 것은 전체 리뷰 중 별 5개 리뷰의 비율이 최소 t% 이상이 되도록 만들기 위해 추가로 필요한 별 5개 리뷰의 최소 개수입니다.예를 들어 입력이 reviews = [[3, 4], [1, 2], [4, 6]], threshold = 78이라면 출력은 7이 됩니다. 현재까지의 별 5개 리뷰는 총 8개이고
문제 소개어떤 수의 각 자릿수가 nums라는 리스트에 저장되어 있다고 가정해 보겠습니다. 예를 들어 [2, 5, 6]은 256을 나타냅니다. 이제 이 수에 1을 더한 결과를 동일한 형식, 즉 자릿수 리스트 형태로 반환해야 합니다.예를 들어 입력이 nums = [2, 6, 9]라면, 269 + 1 = 270이므로 출력은 [2, 7, 0]이 됩니다.알고리즘 접근 방법핵심 아이디어는 우리가 손으로 덧셈을 할 때와 마찬가지로, 가장 뒤쪽 자릿수부터 차례대로 처리하면서 받아올림(carry)을 앞쪽으로 전파하는 것입니다. 단계별로 살펴보면 다
문제 개요숫자 리스트 nums와 두 변수 k, t가 주어져 있다고 가정해 보겠습니다. 이 문제에서 수행할 수 있는 연산은 범위 [-k, k] 안에서 임의의 값 e를 하나 선택해 리스트 nums의 끝에 삽입하는 것입니다. 이러한 연산을 반복했을 때 nums의 총합이 목표값 t와 정확히 일치하도록 만드는 데 필요한 최소 연산 횟수를 구하는 것이 목표입니다.예를 들어 입력이 nums = [3, 1], k = 4, t = 19라면 답은 4가 됩니다. [3, 1, 4, 4, 4, 3]처럼 값을 네 번 추가하면 합이 정확히 19가 되기 때문입
리스트 nums가 주어졌을 때, 이 리스트의 순서를 재배열하여 연속된 두 숫자의 차이가 항상 동일하도록 만들 수 있는지 확인하는 문제입니다. 즉, 배열이 등차수열 형태가 될 수 있는지를 판별하는 것입니다.문제 예시예를 들어 입력이 nums = [8, 2, 6, 4]라면 결과는 True입니다. 왜냐하면 이 배열을 [2, 4, 6, 8]과 같이 재배열하면, 연속된 두 숫자의 차이가 모두 2로 동일하기 때문입니다.해결 접근 방법이 문제는 다음 단계를 통해 해결할 수 있습니다.먼저 N을 nums의 크기(길이)로 설정합니다.N이 2 이하라면
문제 개요n개의 원소를 가진 배열 nums와 정수 m이 주어졌을 때, 임의의 부분 배열(연속된 구간) 합을 m으로 나눈 나머지(modulo) 값 중 최댓값을 구하는 프로그램을 만들어 보겠습니다.예를 들어 nums = [1, 5, 7, 3], m = 5가 입력으로 주어지면 정답은 3입니다. 모든 부분 배열의 합을 5로 나눈 결과는 다음과 같습니다.[1] mod 5 = 1[5] mod 5 = 0[7] mod 5 = 2[3] mod 5 = 3[1, 5] mod 5 = 1[5, 7] mod 5 = 2[7, 3] mod 5 = 0[1, 5,
문제 개요0부터 9까지의 숫자와 소문자 영어 알파벳으로 이루어진 영숫자(alphanumeric) 문자열 s가 있다고 가정해 봅시다. 우리가 해야 할 일은 문자열 s에 포함된 숫자들의 합을 구하는 것입니다. 이때 연속된 숫자들은 하나의 숫자로 간주한다는 점이 핵심입니다.예를 들어 입력이 s = hello25world63power86이라면, 출력은 174가 됩니다. 25 + 63 + 86 = 174이기 때문입니다.해결 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.결과를 저장할 변수 ret과 현재 숫자를 저장할 변수 curr을 각
문제 설명반지름이 각각 r1과 r2인 두 개의 구가 있다고 가정해 봅시다. 첫 번째 구의 위치는 (x1, y1, z1), 두 번째 구의 위치는 (x2, y2, z2)이며, 각 구의 가속도는 (ax1, ay1, az1)과 (ax2, ay2, az2)로 주어집니다. 우리가 해야 할 일은 이 두 구가 주어진 가속도로 움직일 때 3차원 공간에서 언젠가 서로 만나는 순간이 있는지, 즉 충돌하는지를 판별하는 것입니다.예를 들어 입력이 r1 = 1, r2 = 2, pos1 = (0, 0, 0), acc1 = (100, 0, 0), pos2 =
완전제곱수란 무엇일까요?어떤 수 n이 주어졌을 때, 이 수가 완전제곱수(perfect square)인지 아닌지 판별하는 것이 이 글의 목표입니다. 완전제곱수란 어떤 정수 a에 대해 k = a × a 형태로 표현할 수 있는 수를 말합니다. 특히 이번 문제에서는 math.sqrt()와 같은 내장 제곱근 함수를 사용하지 않고 직접 해결해야 한다는 조건이 있습니다.예를 들어 입력이 n = 121이라면 121 = 11 × 11이므로 결과는 True가 됩니다. 반면 n = 122처럼 어떤 정수의 제곱으로도 표현할 수 없는 수라면 False를
문제 개요 하나의 숫자 n이 주어졌을 때, 이 숫자가 2의 거듭제곱인지 아닌지 판별해야 합니다. 예를 들어 입력값이 n = 2048이라면, 2048은 2^11에 해당하므로 출력 결과는 True가 됩니다. 해결 방법 이 문제는 비트 연산을 활용하면 매우 효율적으로 해결할 수 있습니다. 접근 방법은 다음과 같습니다. n이 0과 같다면 False를 반환합니다. (n AND (n - 1))의 결과가 0이면 True를, 그렇지 않으면 False를 반환합니다. 이 방법이 작동하는 원리는 간단합니다. 2의 거듭제곱 수는 이진수로 표현했을
문제 개요문자열 s와 문자 c가 주어졌다고 가정해 봅시다. 이때 c는 반드시 s 안에 존재해야 합니다. 우리가 구해야 할 것은 s와 길이가 같은 리스트로, 각 인덱스 i의 값은 s[i]에서 문자 c까지의 가장 가까운 거리입니다.예를 들어 입력이 s = ppqppq, c = q라면 출력은 다음과 같습니다.[2, 1, 0, 1, 1, 0]각 위치에서 왼쪽 또는 오른쪽에 있는 가장 가까운 q까지의 거리를 계산한 결과입니다.풀이 접근 방법이 문제는 다음 단계를 따라 해결할 수 있습니다.j := 문자열 s의 길이d := 길이가 j이고 모든