문제 개요정수로 이루어진 배열 A가 주어졌을 때, 이 배열을 합이 서로 같은 세 개의 비어 있지 않은 부분으로 나눌 수 있다면 결과는 true입니다. 그렇지 않다면 false를 반환합니다.좀 더 형식적으로 표현하면, 인덱스 i+1 < j를 찾아 다음 조건을 만족할 때 배열을 세 부분으로 나눌 수 있습니다.첫 번째 부분: A[0] + A[1] + ... + A[i]두 번째 부분: A[i+1] + A[i+2] + ... + A[j-1]세 번째 부분: A[j] + A[j+1] + ... + A[A.length - 1]세 부분의 합이
문제 소개 양의 정수 무게를 가진 돌 여러 개가 주어졌다고 가정해 보겠습니다. 매 턴마다 가장 무거운 두 개의 돌을 골라 서로 부딪쳐 부수는 작업을 반복합니다. 두 돌의 무게를 각각 x와 y(x ≤ y)라고 할 때, 충돌 결과는 다음 두 가지 중 하나입니다. x = y인 경우: 두 돌 모두 완전히 파괴됩니다. x ≠ y인 경우: 무게가 x인 돌은 완전히 파괴되고, 무게가 y인 돌은 새로운 무게 y − x를 갖게 됩니다. 이 과정이 끝나면 최대 1개의 돌만 남습니다. 우리가 구해야 하는 값은 바로 이 마지막 돌의 무게이며, 만약
문제 개요소문자로만 이루어진 문자열 S가 주어졌을 때, 중복 제거(duplicate removal) 연산을 수행하는 문제입니다. 중복 제거란 서로 인접해 있고 같은 두 글자를 선택하여 삭제하는 것을 의미합니다.이 연산을 반복적으로 수행하여 더 이상 제거할 수 있는 인접 중복이 남아 있지 않을 때까지 진행한 뒤, 최종 결과 문자열을 반환하면 됩니다. 답은 항상 유일하다는 것이 보장되어 있습니다.예시문자열이 abbacaca라고 가정해 보겠습니다. 정답은 caca입니다.먼저 인접한 중복 bb를 제거하면 → aacaca다음으로 인접한 중복
문제 개요학생들이 사진 촬영을 위해 키를 기준으로 비내림차순(오름차순)으로 줄을 서야 한다고 가정해 보겠습니다. 학생들의 키가 담긴 배열이 주어졌을 때, 올바른 위치에 서 있지 않은 학생의 최소 수를 구하는 것이 이번 문제의 목표입니다.예를 들어 배열이 [1, 1, 4, 2, 1, 3]이라면 정답은 3입니다. 이 배열을 정렬하면 [1, 1, 1, 2, 3, 4]가 되는데, 키가 4인 학생과 마지막 두 자리의 학생들이 올바른 위치에 서 있지 않기 때문입니다.풀이 접근 방법이 문제는 정렬 기반의 간단한 비교만으로 해결할 수 있습니다.
두 문자열 A와 B가 있을 때, B를 한 번 이상 이어 붙여 A를 만들 수 있다면 A는 B로 나누어떨어진다고 표현합니다. 예를 들어 A = abcabc, B = abc인 경우, A는 B로 나누어떨어집니다. 이번 글에서 다룰 문제는 바로 문자열의 최대공약수(GCD)입니다. 즉, 주어진 두 문자열을 모두 나누어떨어지게 만드는 가장 긴 문자열을 찾아 반환해야 합니다. 예를 들어 두 문자열이 ABABAB와 ABAB라면, 최대공약수는 AB가 됩니다. 풀이 접근 방법 이 문제는 완전 탐색(brute force) 방식으로 해결할 수 있습니다.
텍스트 분석에서 빅그램(Bigram)은 연속된 두 단어의 쌍을 의미합니다. 이번 문제에서는 텍스트 안에서 첫 번째 단어(first) → 두 번째 단어(second) → 세 번째 단어(third) 형태로 나타나는 패턴을 찾아야 합니다. 즉, second가 first 바로 뒤에 등장하고, third가 second 바로 뒤에 등장하는 모든 경우를 찾는 것입니다.이러한 패턴을 발견할 때마다 해당 위치의 third 단어를 결과 리스트에 추가하고, 최종적으로 그 리스트를 반환하면 됩니다.예를 들어 텍스트가 lina is a good girl
문제 소개정수로 구성된 고정 길이 배열이 있다고 가정해 보겠습니다. 배열에 등장하는 모든 0을 하나 더 복제하고, 그 뒤의 나머지 요소들은 오른쪽으로 밀어내야 하는 것이 이번 과제입니다.여기서 주의할 점은, 원래 배열의 길이를 벗어나는 위치의 요소는 새로 기록되지 않는다는 것입니다. 즉, 배열 길이는 변하지 않으며 밀려난 요소들은 자연스럽게 사라집니다.예를 들어 배열이 [1,0,2,3,0,4,5,0]이라면, 수정 후 결과는 [1,0,0,2,3,0,0,4]가 됩니다.해결 접근 방식이 문제는 다음과 같은 단계로 해결할 수 있습니다.원본
문제 설명 일정 수의 사탕을 한 줄로 선 n명의 사람들에게 아래와 같은 규칙으로 나눠주는 상황을 가정해 보겠습니다. 먼저 첫 번째 사람에게 사탕 1개, 두 번째 사람에게 2개를 주는 식으로 진행해 마지막(n번째) 사람에게 n개를 줍니다. 이후 다시 줄의 맨 앞으로 돌아가 첫 번째 사람에게 n+1개, 두 번째 사람에게 n+2개를 주는 식으로 마지막 사람에게 2×n개까지 나눠줍니다. 이 과정은 사탕이 모두 소진될 때까지 반복됩니다. 마지막 차례에는 남은 사탕 전부를 해당 사람에게 몰아주며, 이때 지급 개수가 반드시 직전보다 정확히
유효한 IPv4 IP 주소가 주어졌을 때, 이를 디팡드(Defanged) 버전으로 변환해 반환해야 하는 문제입니다. 디팡드 IP 주소란 문자열에 포함된 모든 마침표 .를 [.]로 치환한 형태를 의미합니다.예를 들어, 입력된 IP 주소가 192.168.4.1이라면 출력 결과는 192[.]168[.]4[.]1이 됩니다. 이러한 변환은 보안 분석이나 로그 처리 시 IP 주소가 실제 링크로 잘못 인식되는 것을 방지하기 위해 자주 사용됩니다.문제 해결 접근 방법이 문제는 매우 간단한 문자열 처리 기법으로 해결할 수 있습니다. 핵심 아이디어는
문제 개요두 개의 배열 arr1과 arr2가 있다고 가정해 보겠습니다. arr2의 요소들은 모두 고유하며, arr2에 포함된 모든 요소는 arr1에도 존재합니다. 이때 arr1의 요소들을 arr2에서의 등장 순서와 동일하게 재정렬해야 합니다. 만약 arr2에는 없지만 arr1에는 있는 요소들이 있다면, 이 요소들은 배열의 맨 뒤에 오름차순으로 배치해야 합니다.예를 들어 arr1이 [2,3,1,3,2,4,6,7,9,2,19]이고, arr2가 [2,1,4,3,9,6]이라면 결과는 [2,2,2,1,4,3,3,9,6,7,19]가 됩니다.
도미노 목록이 주어졌다고 가정해 보겠습니다. 각 도미노는 두 개의 숫자로 구성되며, 두 도미노 D[i] = [a, b]와 D[j] = [c, d]는 a = c이고 b = d이거나 a = d이고 b = c일 때 서로 동등하다고 간주합니다. 즉, 숫자의 순서만 바뀐 도미노는 뒤집혀도 같은 것으로 취급됩니다.우리가 구해야 하는 것은 0 <= i < j < 도미노 목록의 길이를 만족하는 모든 인덱스 쌍 (i, j) 중에서 D[i]와 D[j]가 동등한 쌍의 개수입니다.예를 들어 도미노 목록이 [[1, 2], [2, 1], [
YYYY-MM-DD 형식의 날짜 문자열이 주어졌을 때, 해당 날짜가 그 해의 몇 번째 날인지 반환하는 문제입니다. 예를 들어 날짜가 2019-02-10이라면, 이는 2019년의 41번째 날에 해당합니다. 문제 해결 접근 방법 이 문제는 다음과 같은 단계로 해결할 수 있습니다. 각 월의 일수를 담은 배열 D를 준비합니다. 예: [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 입력된 날짜 문자열을 하이픈(-) 기준으로 분리하여 연도, 월, 일로 변환합니다. 해당 연도가 윤년이라면 2월의 일
1부터 n까지의 숫자를 나열하는 모든 순열(permutation) 중에서 소수(prime)는 반드시 소수 번째 위치에 놓이도록 배치해야 하는 문제입니다. 정답은 매우 커질 수 있으므로 109 + 7로 나눈 나머지를 반환해야 합니다.예를 들어 n = 5라면 정답은 12입니다. 유효한 순열의 한 예는 [1, 2, 5, 4, 3]이며, [5, 2, 3, 4, 1]은 잘못된 순열입니다. 값 5가 1번째 자리에 놓였는데, 1은 소수가 아니기 때문입니다.문제 접근 방법이 문제의 핵심 아이디어는 조합론에 있습니다. 소수끼리의 자리 배치와 비소수
Rainbow Stream은 MIT 라이선스로 배포되는 무료 오픈소스 리눅스 명령줄(터미널)용 Twitter 클라이언트입니다. 실시간 트윗 스트림 표시, 트윗 작성, 검색, 즐겨찾기 추가 등 다양한 기능을 제공하며, Python 언어로 작성되어 Twitter API와 Python Twitter Tool을 기반으로 동작합니다. 이 프로그램을 콘솔에서 실행하려면 python과 pip(버전 2.7.x 또는 3.x)가 사전에 설치되어 있어야 합니다. 주요 기능 리눅스 명령줄 환경에서 사용할 수 있는 무료 오픈소스 Twitter 클라이언
문제 소개배열이 하나 주어졌을 때, 배열 안의 각 요소가 서로 다른 등장 횟수(고유한 발생 횟수)를 가지는지 확인하는 문제입니다. 만약 두 개 이상의 요소가 같은 횟수만큼 등장한다면 false를 반환하고, 모든 요소의 등장 횟수가 서로 다르다면 true를 반환해야 합니다.예를 들어 배열이 [1, 1, 2, 2, 2, 3, 4, 4, 4, 4]라고 가정해 보겠습니다. 이 경우 요소 1은 두 번, 요소 2는 세 번, 요소 3은 한 번, 요소 4는 네 번 등장합니다. 즉, 등장 횟수가 각각 2, 3, 1, 4로 모두 고유하므로 결과는 t
문제 소개숫자로 이루어진 리스트가 주어졌을 때, 그중 자릿수가 짝수인 숫자의 개수를 세는 문제를 생각해 봅시다.예를 들어 배열이 [12, 345, 2, 6, 7896]이라면 결과는 2가 됩니다. 그 이유는 12(2자리)와 7896(4자리)만 자릿수가 짝수이고, 345와 2, 6은 자릿수가 홀수이기 때문입니다.해결 접근 방법이 문제는 다음 단계를 통해 간단히 해결할 수 있습니다.리스트의 각 정수를 문자열(str)로 변환합니다.변환된 문자열의 길이가 짝수라면 카운트(count)를 1 증가시킵니다.모든 원소를 확인한 후 최종 카운트 값을
Fish(Friendly Interactive Shell)는 UNIX 및 UNIX 계열 운영체제를 위해 개발된 쉘(Shell)입니다. Bash나 Zsh 같은 기존 쉘과 함께 사용할 수 있으며, 수많은 실용적인 기능이 기본적으로 활성화되어 있다는 점이 큰 특징입니다. 다른 쉘들이 시스템 자원을 절약하기 위해 일부 기능을 기본적으로 비활성화하는 것과 달리, Fish는 모든 기능을 기본값으로 활성화하여 사용자가 최대한의 편의성을 누릴 수 있도록 설계되었습니다. Fish의 주요 특징 사용자 친화적이고 대화형인 쉘 환경 제공 강력하고 다양
Cheat는 파이썬(Python) 기반의 명령줄 도구로, 시스템 관리자가 유용한 치트 시트(cheat sheet)를 조회하고 저장할 수 있게 해줍니다. 지정한 명령어의 일반 텍스트 예제를 불러와 옵션, 인자, 자주 쓰이는 용법을 빠르게 상기시켜 주는 역할을 합니다. Cheat는 자주 사용하지만 자주 쓰는 만큼은 외우지 못하는 명령어를 위해 만들어진 도구입니다. Cheat 설치하기 Cheat를 설치하기 전에 먼저 시스템이 최신 상태인지 확인해야 합니다. 아래 명령어를 실행하세요. $ sudo apt-get update &&am
GUI 환경 없이 서버나 터미널에서 인터넷 연결 속도를 확인해야 할 때가 있습니다. 이럴 때 speedtest-cli라는 명령줄 도구를 사용하면 리눅스 터미널에서 간편하게 광대역(브로드밴드) 속도를 측정할 수 있습니다. 이 글에서는 설치부터 실행, 그리고 유용한 옵션 활용법까지 단계별로 살펴보겠습니다.1단계: Python pip 설치하기speedtest-cli는 파이썬(Python) 기반 도구이므로, 먼저 파이썬 패키지 관리자인 pip가 시스템에 설치되어 있어야 합니다. 아래 명령어로 pip를 설치할 수 있습니다.$ sudo apt
파이썬(Python)은 범용으로 활용되는 인터프리터 방식의 대화형 객체지향 고급 프로그래밍 언어입니다. 1985년부터 1990년 사이에 귀도 반 로섬(Guido van Rossum)이 개발했으며, Perl과 마찬가지로 GNU 일반 공중 라이선스(GPL) 하에 소스 코드가 공개되어 있습니다. 이 글에서는 우분투(Ubuntu) 환경에 Python 3.4.4를 소스 빌드 방식으로 설치하는 과정을 단계별로 자세히 안내합니다.1단계: 필수 패키지 설치Python을 소스에서 직접 빌드하려면 먼저 컴파일에 필요한 사전 패키지들을 설치해야 합니다