개요데이터 시각화 작업을 하다 보면 서로 다른 데이터셋을 각각의 컬러바와 함께 한 화면에 비교해야 하는 경우가 자주 있습니다. Matplotlib에서는 imshow()와 colorbar()를 조합하면 여러 개의 컬러바를 손쉽게 표시할 수 있습니다.구현 단계그림(figure) 크기를 설정하고, 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.하나의 figure 객체와 서브플롯(subplots) 집합을 생성합니다.샘플 데이터의 개수를 지정할 변수 N을 초기화합니다.NumPy를 사용하여 무작위 데이터 data1을 생성합니다.d
시작 노드가 head인 연결 리스트(Linked List)와 두 개의 정수 m, n이 주어졌다고 가정해 보겠습니다. 우리는 리스트를 끝까지 순회하면서 처음 m개의 노드는 유지하고, 그 직후에 이어지는 n개의 노드는 삭제하는 작업을 반복해야 합니다. 이 과정은 연결 리스트의 끝에 도달할 때까지 계속되며, 최종적으로 수정된 연결 리스트를 반환하면 됩니다.연결 리스트의 노드 구조는 다음과 같이 정의됩니다.Node value : <정수> next : <다음 노드를 가리키는 포인터>예를 들어, 입력이 el
문제 설명prices라는 배열이 있고, prices[i]는 상점에서 i번째 상품의 가격을 나타낸다고 가정해 봅시다. 이 상점에서는 특별 할인 행사를 진행 중입니다. i번째 상품을 구매하면, j가 i보다 크면서 prices[j] <= prices[i]를 만족하는 최소 인덱스일 때 prices[j]만큼 할인을 받게 됩니다. 만약 그런 조건을 만족하는 j가 존재하지 않는다면 할인 없이 정가를 그대로 지불해야 합니다. 우리의 목표는 각 상품에 대해 특별 할인이 적용된 후 실제로 지불하게 될 최종 가격을 담은 배열을 구하는 것입니다.예
배열 nums가 주어졌을 때, 누적 합(running sum) 배열 rs의 i번째 값 rs[i]는 nums[0]부터 nums[i]까지의 모든 원소를 더한 값입니다. 즉, 앞에서부터 차례대로 값을 누적해 나간 결과 배열을 반환하는 것이 목표입니다.누적 합의 개념예를 들어 입력이 nums = [8,3,6,2,1,4,5]라면, 출력은 [8, 11, 17, 19, 20, 24, 29]가 됩니다. 그 이유는 다음과 같습니다.rs[0] = nums[0] = 8 rs[1] = nums[0..1]의 합 = 8 + 3 = 11 rs[2] = num
```html 정수 n과 또 다른 정수 start가 주어졌다고 가정해 봅시다. 이때 nums라는 배열을 만들어야 하는데, 각 요소는 nums[i] = start + 2*i(i는 0부터 시작)라는 규칙을 따르며, 배열의 크기는 n입니다. 그다음 nums 배열의 모든 요소에 대해 비트 단위 XOR 연산을 수행한 결과를 구하면 됩니다. 예를 들어 입력이 n = 6, start = 2라면, 배열은 [2+2*0, 2+2*1, ..., 2+2*5], 즉 [2, 4, 6, 8, 10, 12]가 됩니다. 이 배열의 모든 요소를 차례대로 XOR하
서로 다른 값들로 이루어진 배열 salary가 있다고 가정해 봅시다. 여기서 salary[i]는 i번째 직원의 급여를 의미합니다. 이때 최저 급여와 최고 급여를 제외한 나머지 직원들의 평균 급여를 구하는 것이 우리의 과제입니다.예를 들어 입력이 salary = [8000, 6000, 2000, 8500, 2500, 4000]이라면 출력은 5125.0이 됩니다. 최솟값은 2000, 최댓값은 8500이므로 이 두 값을 제외한 [8000, 6000, 2500, 4000]의 평균을 구하면 (8000 + 6000 + 2500 + 4000)
숫자 리스트 nums가 주어졌을 때, 이 리스트의 요소들이 등차수열(Arithmetic Progression, AP)을 이루는지 확인해야 합니다. 등차수열이란 인접한 두 요소 사이의 공차(공통 차이)가 항상 일정한 수열을 의미합니다.예를 들어 입력이 nums = [9, 1, 17, 5, 13]이라면 출력은 True입니다. 요소들을 정렬하면 [1, 5, 9, 13, 17]이 되고, 각 인접한 두 요소의 차이가 모두 4로 동일하기 때문입니다.풀이 접근 방법이 문제는 다음 단계로 해결할 수 있습니다.리스트 nums를 오름차순으로 정렬합니
프로그래밍을 하다 보면 다양한 형식의 날짜 문자열을 표준 형식으로 변환해야 하는 경우가 자주 있습니다. 이번 글에서는 Day Month Year(일 월 년) 형식으로 작성된 영문 날짜 문자열을 YYYY-MM-DD 형식으로 변환하는 Python 프로그램을 만들어 보겠습니다.문제 정의입력으로 주어지는 날짜 문자열은 다음과 같은 조건을 가집니다.일(Day): 1st, 2nd, ..., 30th, 31st처럼 서수 접미사가 붙은 형태월(Month): Jan, Feb, ..., Nov, Dec처럼 영문 약어 형태연도(Year): 1900부터
문제 설명배열 nums가 주어졌을 때, nums[i]와 nums[j]의 값이 같으면서 i < j를 만족하는 인덱스 쌍 (i, j)를 좋은 쌍(good pair)이라고 정의합니다. 우리가 구해야 할 것은 이러한 좋은 쌍의 총 개수입니다.예를 들어 입력이 nums = [5,6,7,5,5,7]이라면, 조건을 만족하는 쌍은 인덱스 기준으로 (0, 3), (0, 4), (3, 4), (2, 5)로 총 4개이므로 출력 결과는 4가 됩니다.해결 접근 방법가장 직관적인 방법은 모든 가능한 인덱스 쌍을 확인하는 브루트포스(완전 탐색) 방식입니
가득 찬 물병이 n개 있다고 가정해 봅시다. 빈 물병 m개를 내놓으면 가득 찬 물병 한 개로 교환할 수 있으며, 가득 찬 물병을 마시면 다시 빈 병이 됩니다. 이 문제의 목표는 총 마실 수 있는 물병의 최대 개수를 구하는 것입니다.예를 들어 입력이 n = 9, m = 3이라면 출력은 13이 됩니다. 처음에 물병 9개가 있으므로 전부 마신 뒤 빈 병 9개로 9 ÷ 3 = 3개의 새 물병을 얻을 수 있습니다. 이 3개 역시 모두 마시면 빈 병 3개가 생기고, 이를 다시 교환하면 물병 1개를 추가로 마실 수 있습니다. 따라서 총 9 +
두 개의 음이 아닌 정수 left와 right가 주어졌을 때, left부터 right까지(양쪽 경계값 포함) 범위 안에 있는 홀수의 개수를 구하는 문제입니다.문제 이해하기예를 들어 left = 3, right = 15라고 입력하면 출력은 7이 됩니다. 해당 구간의 홀수는 [3, 5, 7, 9, 11, 13, 15]로 총 7개이기 때문입니다.풀이 접근 방법모든 숫자를 하나씩 확인하는 대신, 수학적 성질을 이용하면 반복문 없이 한 번의 연산으로 답을 구할 수 있습니다.left 또는 right 중 하나라도 홀수라면 → (right - l
문자열 s와 인덱스 리스트 ind가 주어졌을 때, 두 값의 길이는 서로 같다고 가정해 봅시다. 문자열 s는 원래 위치 i에 있던 문자가 최종 결과 문자열의 indices[i] 위치로 이동하는 방식으로 재배치(shuffle)됩니다. 우리의 목표는 최종적으로 만들어지는 문자열을 구하는 것입니다.예를 들어 입력이 다음과 같다면,s = ktoalakind = [0,5,1,6,2,4,3]출력은 kolkata가 됩니다. 각 문자가 지정된 인덱스 위치로 이동하면서 원래 의미 있는 단어로 복원되는 것입니다.해결 접근 방법이 문제는 다음 단계를 통
배열 nums와 서로 다른 세 정수 a, b, c가 주어졌을 때, 조건을 만족하는 좋은 삼중항(good triplet)의 개수를 구해야 합니다.좋은 삼중항의 조건삼중항 (nums[i], nums[j], nums[k])이 좋은 삼중항이 되려면 아래 조건들을 모두 만족해야 합니다.0 <= i < j < k < nums의 원소 개수|nums[i] - nums[j]| <= a|nums[j] - nums[k]| <= b|nums[i] - nums[k]| <= c즉, 인접한 두 원소뿐 아니라 첫 번째와 마
정렬되어 있고 엄격하게 증가하는 양의 정수로 구성된 배열 nums와 정수 k가 주어졌다고 가정해 봅시다. 이때 우리가 해야 할 일은 배열에 존재하지 않는 양의 정수 중에서 k번째로 작은 수를 찾는 것입니다.예를 들어, 입력이 nums = [1,2,4,8,12], k = 6이라면 출력은 10이 됩니다. 그 이유는 누락된 숫자들이 [3,5,6,7,9,10,11]이고, 그중 여섯 번째 숫자가 바로 10이기 때문입니다.해결 접근 방법이 문제는 아래 단계를 따라 해결할 수 있습니다.배열 요소들의 조회 속도를 높이기 위해 nums를 집합(se
영어 대소문자로 이루어진 문자열 s가 있다고 가정해 보겠습니다. 이때 다음 조건에 해당하는 인접한 두 문자 s[i]와 s[i+1]의 쌍이 하나도 없는 문자열을 좋은 문자열(good string)이라고 정의합니다. 0 <= i <= len(s) - 2 s[i]가 소문자이고 s[i+1]이 같은 글자의 대문자인 경우, 또는 그 반대의 경우 문자열을 좋은 문자열로 만들려면, 문자열을 나쁘게 만드는 인접한 두 문자를 골라 제거하면 됩니다. 이 과정을 문자열이 좋은 문자열이 될 때까지 반복합니다(빈 문자열 역시 좋은 문자열로 간
배열 nums가 주어졌을 때, 이 배열 안에 연속된 세 개의 홀수가 존재하는지 확인하는 프로그램을 만들어 보겠습니다.예를 들어 입력이 다음과 같다고 가정해 봅시다.nums = [18, 15, 2, 19, 3, 11, 17, 25, 20]이 경우 [3, 11, 17]처럼 연속된 세 개의 홀수가 존재하므로 출력 결과는 True가 됩니다.문제 해결 접근 방법이 문제는 배열을 한 번만 순회하면서 인접한 세 원소씩 검사하면 간단히 해결할 수 있습니다. 단계별로 살펴보면 다음과 같습니다.먼저 배열의 길이를 구합니다.배열의 길이가 1 또는 2라
숫자 n이 주어졌을 때, 이 숫자를 천 단위마다 콤마(",")로 구분된 문자열 형태로 변환하는 프로그램을 만들어 보겠습니다.예를 들어 입력값이 n = 512462687이라면, 출력 결과는 "512,462,687"이 되어야 합니다.문제 해결 접근 방법이 문제는 다음과 같은 단계로 해결할 수 있습니다.숫자 n을 문자열로 변환합니다.변환된 문자열을 뒤집습니다. (뒤에서부터 세 자리씩 묶기 위함)결과를 담을 빈 문자열을 준비합니다.뒤집힌 문자열을 처음부터 끝까지 순회하며, 인덱스가 3의 배수이고 0이 아
문제 개요 숫자 n과 배열 rounds가 주어진다고 가정해 보겠습니다. 우리에게는 1부터 n까지 번호가 매겨진 n개의 서로 다른 섹터로 이루어진 원형 트랙이 있습니다. 이 트랙 위에서 경주가 열리며, 경주는 총 m개의 라운드로 구성됩니다. i번째 라운드는 rounds[i-1]번 섹터에서 출발하여 rounds[i]번 섹터에서 종료됩니다. 예를 들어 첫 번째 라운드는 rounds[0]에서 시작해 rounds[1]에서 끝납니다. 트랙의 번호는 반시계 방향으로 섹터 번호가 오름차순으로 증가하며, 우리의 목표는 경주 중 가장 많이 방문된
문제 소개양의 정수로 이루어진 배열 nums가 주어졌을 때, k번 이상 반복되는 길이 m의 패턴이 존재하는지 확인해야 합니다. 여기서 패턴이란 하나 이상의 값으로 구성된 연속된 부분 배열이 여러 번 반복되는 형태를 의미하며, 패턴은 길이와 반복 횟수로 정의됩니다.예를 들어 입력이 다음과 같다고 가정해 보겠습니다.nums = [3,5,1,4,3,1,4,3,1,4,3,9,6,1]m = 3k = 2이 경우 출력은 True입니다. 배열 안에 [1,4,3]이라는 패턴이 세 번 등장하기 때문입니다.해결 접근 방법이 문제는 리스트 슬라이싱(sl
정사각 행렬(square matrix)이 하나 주어졌다고 가정해 봅시다. 우리가 구해야 할 값은 이 행렬의 대각선 요소들의 총합입니다. 즉, 주대각선(primary diagonal)과 부대각선(secondary diagonal)에 있는 모든 요소를 더하되, 두 대각선이 교차하는 중앙 요소는 중복 계산되지 않도록 한 번만 포함해야 합니다.예를 들어 다음과 같은 4×4 행렬이 입력으로 주어진 경우를 살펴보겠습니다.10596815323812321173주대각선 요소는 [10, 15, 12, 3]으로 그 합은 40이며, 부대각선 요소는 [6