문제 개요 로그 문자열 배열이 주어졌다고 가정해 보겠습니다. 배열의 각 항목은 공백으로 구분된 단어들로 이루어져 있으며, 첫 번째 단어는 항상 영숫자(alphanumeric) 식별자(identifier)입니다. 식별자 뒤에 오는 단어들은 아래 두 가지 유형 중 하나에 속합니다. 식별자 뒤의 모든 단어가 소문자 알파벳으로만 구성된 경우 식별자 뒤의 모든 단어가 숫자로만 구성된 경우 첫 번째 유형을 문자 로그(letter-log), 두 번째 유형을 숫자 로그(digit-log)라고 부릅니다. 또한 모든 로그는 식별자 뒤에 최소 한
정수로 이루어진 배열 A가 주어졌을 때, 이 배열이 유효한 산(mountain) 배열인지 확인하는 문제를 살펴보겠습니다.산 배열의 정의배열 A가 산 배열이 되려면 다음 조건들을 모두 만족해야 합니다.배열 A의 크기는 3 이상이어야 합니다.배열 내에 특정 인덱스 i가 존재하여 다음 두 조건을 충족해야 합니다.A[0] < A[1] < ... < A[i-1] < A[i] — 꼭대기까지 값이 계속 증가합니다.A[i] > A[i+1] > ... > A[A.length - 1] — 꼭대기 이후 값이 계속
문제 소개DI 문자열 일치(DI String Match)는 I(증가, Increase)와 D(감소, Decrease)로만 구성된 문자열 S가 주어졌을 때, 특정 조건을 만족하는 순열을 찾는 대표적인 그리디 알고리즘 문제입니다. 여기서 N은 문자열 S의 길이를 의미합니다.우리는 [0, 1, ..., N]의 숫자를 모두 한 번씩 사용해 만든 순열 A를 반환해야 하며, 이 순열은 다음 조건을 만족해야 합니다.S[i]가 I라면 → A[i] < A[i+1], 즉 다음 값이 반드시 더 커야 합니다.S[i]가 D라면 → A[i] >
길이가 모두 같은 소문자 문자열 N개로 이루어진 배열 A가 있다고 가정해 봅시다. 이제 임의의 삭제 인덱스 집합을 선택하고, 각 문자열에서 해당 인덱스에 있는 문자들을 모두 삭제할 수 있습니다.예를 들어 배열 A가 [abcdef, uvwxyz]이고 삭제 인덱스가 {0, 2, 3}이라면, 삭제 후 최종 배열은 [bef, vyz]가 됩니다. 이때 A에 남은 열들은 ["b","v"], ["e","y"], ["f","z"]입니다.삭제
알고리즘 문제 중 하나인 강력한 정수(Powerful Integers) 문제를 파이썬으로 해결하는 방법을 살펴보겠습니다.문제 정의두 개의 양의 정수 x와 y가 주어졌을 때, 어떤 정수가 x^i + y^j 형태로 표현될 수 있다면(i ≥ 0, j ≥ 0) 그 정수를 강력한 정수라고 부릅니다. 우리의 목표는 주어진 값 bound 이하인 모든 강력한 정수의 목록을 구하는 것입니다.예시로 이해하기예를 들어 x = 2, y = 3, bound = 10이라고 가정해 봅시다. 이 경우 출력 결과는 다음과 같습니다.[2, 3, 4, 5, 7, 9
문제 설명 양수 길이들을 담고 있는 배열 A가 주어졌다고 가정해 보겠습니다. 우리는 이 길이들 중 3개를 선택하여 만들 수 있는, 넓이가 0이 아닌 삼각형 중에서 가장 큰 둘레(perimeter)를 구해야 합니다. 만약 어떤 삼각형도 만들 수 없다면 0을 반환하면 됩니다. 예를 들어 입력이 [3, 6, 2, 3]이라면 출력은 8이 됩니다. 길이 3, 3, 2로 삼각형을 만들면 둘레가 8로 가장 크기 때문입니다. 해결 접근 방법 세 변으로 삼각형이 성립하려면 삼각형 부등식을 만족해야 합니다. 즉, 세 변을 a ≥ b ≥ c라고 할
문제 설명 0과 1로만 이루어진 배열 A가 주어졌다고 가정해 보겠습니다. 이때 N[i]는 A[0]부터 A[i]까지의 원소들을 하나의 이진수로 해석한 값, 즉 i번째 접두사(prefix)를 의미합니다. 우리가 구해야 할 것은 불리언(Boolean) 값들의 리스트로, answer[i]는 N[i]가 5로 나누어 떨어질 때만 참(True)이 됩니다. 예를 들어 입력이 [0,1,1,1,1,1]이라면 출력은 [true, false, false, false, true, false]가 됩니다. 풀이 접근 방법 배열 전체를 하나의 큰 이진수로 변
이 튜토리얼에서는 주어진 경로 리스트에서 가장 긴 공통 디렉터리 경로를 찾는 프로그램을 작성해 보겠습니다. 문제를 더 명확하게 이해하기 위해 먼저 예시를 살펴보겠습니다.입력 예시paths = [home/tutorialspoint/python, home/tutorialspoint/c, home/tutorialspoint/javascript, home/tutorialspoint/react, home/tutorialspoint/django]출력 결과home/tutorialspoint위 예시에서 다섯 개의 경로가 모두 공유하는 가장 긴 공
이 튜토리얼에서는 파이썬을 사용해 두 삼각형이 서로 닮았는지 판정하는 프로그램을 만들어 봅니다. 삼각형의 닮음 조건은 크게 SSS(세 변의 비가 모두 같음), SAS(두 변의 비가 같고 끼인각이 같음), AAA(세 각이 모두 같음) 세 가지가 있으며, 각 정리에 해당하는 조건들을 코드로 검사하면 됩니다. 닮음 판정 조건 정리 SSS 닮음: 세 쌍의 대응변 길이의 비가 모두 일치할 때 두 삼각형은 닮습니다. SAS 닮음: 두 쌍의 대응변 길이의 비가 일치하고, 그 사이의 끼인각의 크기가 같을 때 닮습니다. AAA 닮음: 세 쌍의
이 튜토리얼에서는 리스트에 포함된 하위 리스트(sublist)들 중 N번째 하위 리스트까지의 요소를 추출하는 프로그램을 작성해 보겠습니다.예를 들어, 다음과 같이 5개의 하위 리스트로 구성된 리스트가 있다고 가정해 보겠습니다.[[Python, Java], [C, Pascal], [Javascript, PHP], [C#, C++], [React, Angular]]여기서 우리는 첫 번째부터 세 번째 하위 리스트까지 각각의 첫 번째 요소를 가져와야 합니다. 이를 구현하는 방법은 여러 가지가 있으며, 지금부터 대표적인 세 가지 접근 방식을
이 튜토리얼에서는 리스트에 있는 모든 아나그램(Anagram)을 그룹으로 묶는 파이썬 프로그램을 작성해 보겠습니다. 본격적인 구현에 앞서, 먼저 아나그램이 무엇인지 살펴보겠습니다.아나그램이란 두 문자열이 서로 다른 순서로 배열되어 있지만, 동일한 문자들로 구성되어 있는 경우를 말합니다.문제 이해하기해결 방법을 알아보기 전에 예시를 통해 문제를 이해해 보겠습니다.입력[cat, dog, fired, god, pat, tap, fried, tac]출력[[cat, tac], [dog, god], [fried, fired], [pat, ta
이 튜토리얼에서는 서로 다른 여러 리스트에서 같은 인덱스에 위치한 요소들을 모아 새로운 리스트로 만드는 프로그램을 작성해 보겠습니다. 단, 한 가지 조건이 있습니다. 모든 리스트의 길이가 동일해야 한다는 점입니다.먼저 예시를 통해 문제를 더 명확하게 이해해 보겠습니다.입력 예시[[1, 2, 3], [4, 5, 6], [7, 8, 9]]출력 결과[[1, 4, 7], [2, 5, 8], [3, 6, 9]]즉, 각 리스트의 0번째 요소들(1, 4, 7)끼리, 1번째 요소들(2, 5, 8)끼리, 2번째 요소들(3, 6, 9)끼리 묶이게 됩
이 튜토리얼에서는 리스트에 있는 튜플들을 첫 번째 요소가 같은 것끼리 하나로 묶는 프로그램을 작성해 보겠습니다. 먼저 예시를 통해 문제를 명확히 이해해 보겠습니다.입력 예시[(1, 2, 3), (1, 4, 5), (3, 4, 1), (3, 4, 2)]출력 결과[(1, 2, 3, 4, 5), (3, 4, 1, 4, 2)]위 예시처럼 첫 번째 요소가 1인 튜플 두 개와 첫 번째 요소가 3인 튜플 두 개가 각각 하나의 튜플로 병합되는 것을 확인할 수 있습니다.문제 해결 절차튜플이 담긴 리스트를 초기화합니다.결과를 저장할 빈 딕셔너리(di
개요이번 튜토리얼에서는 서로 다른 리스트에 흩어져 있는 튜플들을 키를 기준으로 그룹화하여, 같은 키를 가진 값들을 모두 합산하는 프로그램을 작성해 보겠습니다.예를 들어 아래와 같이 두 개의 리스트가 있을 때,list_one = [(a, 2), (b, 3), (c, 5)] list_two = [(c, 7), (a, 4), (b, 2)]키 a, b, c별로 값을 각각 더하면 다음과 같은 결과를 얻을 수 있습니다.[(a, 6), (b, 5), (c, 12)]방법 1: 딕셔너리 활용문제 해결 단계두 개의 리스트를 초기화합니다.dict()
이 튜토리얼에서는 리스트에 있는 여러 문자열 중 공통된 접두사(부분 문자열)를 가진 항목들을 하나로 묶는 프로그램을 작성해 보겠습니다. 먼저 예시를 통해 문제를 명확하게 이해해 보겠습니다.입력 예시strings = [tutorials-python, tutorials-c, tutorials-java, tutorials-javascript, python-1, python-2, javascript-1]출력 결과[[tutorials-python, tutorials-c, tutorials-java, tutorials-javascript],
파이썬 holidays 라이브러리란?이 튜토리얼에서는 holidays 라이브러리에 대해 알아보겠습니다. holidays 라이브러리는 특정 날짜가 여러 국가의 공휴일인지 여부를 손쉽게 판별할 수 있도록 도와주는 파이썬 패키지입니다. 참고로 이 라이브러리를 통해 조회할 수 있는 정보는 공휴일(public holidays)로 한정됩니다.라이브러리 설치먼저 아래 명령어를 실행해 모듈을 설치합니다.pip install holidays설치가 완료되면 다음 단계를 따라 공휴일 정보를 조회할 수 있습니다. 예시로 2020년 인도의 공휴일 목록을
이 튜토리얼에서는 Python에서 함수의 이름을 가져오는 방법을 알아봅니다. 함수 이름을 확인하는 것은 매우 간단한 작업이며, 사용 중인 Python 버전에 따라 두 가지 방법이 있습니다. Python2와 Python3 각각의 방법을 자세히 살펴보겠습니다.Python2에서 함수 이름 가져오기Python2에서는 모든 함수가 func_name이라는 속성을 가지고 있으며, 이 속성을 통해 현재 함수의 이름을 얻을 수 있습니다. 아래 예제를 실행할 때 반드시 Python2 환경인지 확인하세요.예제 코드# 함수 정의 def testing_f
이 튜토리얼에서는 파이썬 리스트의 마지막 요소를 가져오는 다양한 방법을 소개합니다. 각 방법의 특징과 함께 하나씩 자세히 살펴보겠습니다.1. 인덱스(Index) 활용하기리스트의 길이를 이용하면 마지막 요소의 인덱스를 구할 수 있습니다. 리스트의 전체 길이에서 1을 빼면 마지막 요소의 위치가 되는데, 이를 활용한 코드를 살펴보겠습니다.예제# 리스트 초기화 numbers = [1, 2, 3, 4, 5] # 마지막 요소 출력 print(f마지막 요소:- {numbers[len(numbers) - 1]})실행 결과위 프로그램을 실행하면 다
이 튜토리얼에서는 파이썬에서 문자열 리스트를 정렬하는 다양한 방법을 알아봅니다. sort() 메서드와 sorted() 함수를 이용한 기본 정렬부터 시작해, 길이나 숫자 값처럼 다양한 기준으로 문자열 리스트를 정렬하는 방법까지 예제 코드와 함께 차근차근 살펴보겠습니다. 1. list.sort() 메서드로 오름차순 정렬하기 sort() 메서드는 원본 리스트 자체를 직접 정렬하는 in-place(제자리) 정렬 방식입니다. 새로운 리스트를 생성하지 않고 기존 리스트의 요소 순서를 바로 변경한다는 점이 특징입니다. 먼저 오름차순으로 정렬하는
이 튜토리얼에서는 주어진 Python 리스트의 각 요소 뒤에 점점 늘어나는 패턴을 삽입하는 프로그램을 작성해 보겠습니다. 예제를 통해 개념을 명확하게 이해해 보세요.문제 이해하기예를 들어 알파벳으로 구성된 리스트가 있고, 각 알파벳 뒤에 해시(#) 문자를 하나씩 증가시키며 추가한다고 가정해 보겠습니다.입력alphabets = [a, b, c]출력[a, #, b, ##, c, ###]위 결과에서 볼 수 있듯이 첫 번째 요소 뒤에는 해시 1개, 두 번째 요소 뒤에는 해시 2개, 세 번째 요소 뒤에는 해시 3개가 순서대로 추가됩니다.문제