리스트 A가 주어져 있으며, 이 리스트 안에는 중첩된 튜플이 포함되어 있습니다. 이번 글에서 다룰 과제는 리스트를 순회하면서 튜플을 만나기 전까지 등장하는 요소의 개수를 세는 것입니다. 이를 위해 파이썬의 isinstance() 함수를 활용합니다. isinstance() 함수란? isinstance() 함수는 두 개의 매개변수를 받습니다. object: 검사할 대상 객체 classinfo: 비교 기준이 되는 클래스, 타입 또는 클래스·타입들의 튜플 이 함수는 객체가 해당 클래스(또는 그 하위 클래스)의 인스턴스이거나, class
문자열이 주어졌을 때, 해당 문자열로 만들 수 있는 모든 순열(permutation)을 화면에 출력하는 것이 이번 글의 목표입니다. 파이썬에서는 itertools 모듈의 내장 함수인 permutations(iterable)을 사용하면 복잡한 재귀 알고리즘을 직접 작성하지 않고도 손쉽게 해결할 수 있습니다. 문제 예시 예를 들어 문자열 XYZ가 주어지면, 세 글자의 위치를 모두 바꿔가며 만들 수 있는 경우의 수는 다음과 같습니다. 입력: string = XYZ 출력: XYZ XZY YXZ YZX
리스트 안에 여러 개의 하위 리스트(서브리스트)가 포함되어 있을 때, 각 하위 리스트의 두 번째 요소를 기준으로 전체 리스트를 정렬해야 하는 경우가 자주 있습니다. 이번 글에서는 가장 기본적인 정렬 알고리즘인 버블 정렬(Bubble Sort)을 활용하여 이 문제를 해결하는 방법을 알아보겠습니다.예제다음과 같은 입력 리스트가 주어졌을 때, 각 하위 리스트의 두 번째 요소(숫자)를 기준으로 오름차순 정렬한 결과를 확인할 수 있습니다.입력[[CCC, 15], [AAA, 10], [RRRR, 2], [XXXX, 150]]출력[[RRRR,
개요 소문자로 이루어진 문자열 배열이 주어졌을 때, 서로 애너그램(anagram) 관계에 있는 단어들로 구성된 가장 큰 부분 집합(subset)의 크기를 찾는 것이 이번 글의 목표입니다. 애너그램이란 한 문자열의 글자들을 단순히 재배열하여 다른 문자열을 만들 수 있을 때, 두 문자열이 서로 애너그램 관계에 있다는 의미입니다. 예를 들어 python과 typhon은 같은 글자들로 이루어져 있으므로 서로 애너그램입니다. 이 문제는 파이썬의 Counter() 메서드를 활용하면 매우 간단하고 빠르게 해결할 수 있습니다. 알고리즘 전체 풀
수학 시간에 배운 집합(set) 개념을 떠올리면 이해가 훨씬 쉬워집니다. 파이썬의 세트(Set)는 수학의 집합과 동일한 개념을 가진 자료구조로, 다양한 요소들로 구성되며 요소 사이에는 순서가 정의되어 있지 않습니다. 세트에서는 요소를 자유롭게 추가하거나 삭제할 수 있고, 요소를 순회(iterate)할 수도 있으며, 합집합·교집합·차집합과 같은 표준 집합 연산도 손쉽게 수행할 수 있습니다. 이 글에서는 주어진 세트에서 요소를 제거하는 방법을 알아봅니다. 여기서는 pop() 메서드를 활용하는데, pop()은 파이썬의 내장 메서드로 세트
0과 1로만 구성된 2차원 배열(행렬)이 주어졌다고 가정해 봅시다. 모든 행은 정렬되어 있으며, 우리의 목표는 1이 가장 많이 포함된 행을 찾아 그 인덱스를 출력하는 것입니다. 이 문제는 파이썬의 내장 함수인 map()을 활용하면 매우 간결하게 해결할 수 있습니다.map() 함수는 파이썬 내장 함수 중 함수형 프로그래밍에 활용되는 가장 단순한 도구입니다. 리스트와 같은 시퀀스나 반복 가능한(iterable) 객체에 지정한 함수를 일괄적으로 적용해 줍니다.예제 입력입력 배열:[[0, 1, 1, 1, 1], [0, 0, 1, 1, 1]
배열이 주어졌을 때, 파이썬의 itertools.accumulate() 함수를 활용하면 접두사 합(prefix sum), 즉 누적 합 배열을 아주 간단하게 만들 수 있습니다. 이 글에서는 accumulate() 함수의 동작 원리와 함께 실제 예제 코드를 통해 접두사 합 배열을 구하는 방법을 살펴보겠습니다. accumulate() 함수란? itertools 모듈의 accumulate(iterable[, func]) 함수는 반복 가능한 객체(iterable)의 요소들을 순서대로 누적 계산하는 반복자(iterator)를 생성해 반환합니다
이 글에서는 사용자로부터 입력받은 문자열에 포함된 모음(vowel)의 개수를 세는 파이썬 프로그램을 다룹니다. 여기서는 파이썬의 집합(set) 자료형을 활용합니다. 집합은 순서가 없고, 반복 가능하며, 변경 가능하고 중복 요소를 허용하지 않는 컬렉션 자료형입니다.예제입력: str1 = pythonprogram출력: 3pythonprogram에는 모음 o, o, a가 각각 한 번씩 포함되어 있으므로 결과는 3이 됩니다.알고리즘Step 1: 문자열 내 모음의 개수를 저장할 카운터 변수를 하나 선언합니다.Step 2: 모음들로 구성된 집
주어진 값 n에 대해, n×n 크기의 행렬로 체커보드(체스판) 패턴을 출력하는 것이 이번 글의 목표입니다.Python의 과학 계산용 기본 패키지인 NumPy는 초기값이 지정된 배열을 손쉽게 생성할 수 있는 다양한 함수를 제공합니다. 그중 zeros() 함수를 활용하면 0으로 채워진 행렬을 만들고, 슬라이싱(slicing) 기법으로 특정 위치에만 1을 채워 체커보드 패턴을 간단히 구현할 수 있습니다.알고리즘1단계: 행렬의 차수(n)를 입력받는다. 2단계: zeros((n, n), dtype=int)를 사용해 n×n 행렬을 생성한다.
파이썬에서 문자열(string)은 문자들의 배열로 취급됩니다. 따라서 첫 번째 문자의 인덱스는 0부터 시작하며, 각 문자마다 고유한 인덱스 번호가 부여됩니다. 이러한 특성 덕분에 특정 위치의 문자에 쉽게 접근할 수 있고, 원하는 인덱스의 문자도 손쉽게 제거할 수 있습니다. 문자열에서 n번째 인덱스의 문자를 제거하는 기본 아이디어는 다음과 같습니다. 먼저 제거할 문자의 인덱스를 입력받은 뒤, 해당 문자를 기준으로 문자열을 두 개의 부분 문자열로 나눕니다. 즉, n번째 인덱스 이전 부분과 n번째 인덱스 이후 부분으로 분리한 후, 이 두
파이썬 진리값 테스트란?파이썬에서는 if 문이나 while 문에 조건을 넣어 어떤 객체든 진리값(truth value)을 테스트할 수 있습니다. 조건문 안에서 객체가 참인지 거짓인지 자동으로 판별되기 때문에, 별도의 비교 연산 없이도 간결하고 직관적인 코드를 작성할 수 있습니다.객체가 속한 클래스에 __bool__() 메서드가 정의되어 False를 반환하거나, __len__() 메서드가 0을 반환하는 경우를 제외하면 해당 객체의 진리값은 기본적으로 True로 간주됩니다.진리값 판정 규칙상수 중에서는 False와 None만 거짓(Fa
파이썬에서 불리언(Boolean) 연산은 조건 판단과 논리 흐름 제어의 핵심입니다. 기본적인 불리언 연산자는 and, or, not 세 가지이며, 각각의 동작 방식을 정확히 이해하면 더 깔끔하고 효율적인 코드를 작성할 수 있습니다. 1. and 연산자 and 연산의 기본 문법은 x and y 형태입니다. 파이썬의 and 연산은 단순히 참/거짓만 반환하지 않고, 피연산자 자체를 반환한다는 점이 특징입니다. x가 거짓(False)으로 평가되면 → x를 그대로 반환 x가 참(True)으로 평가되면 → y를 반환 즉, 두 값이 모두 참
파이썬은 다양한 숫자형(numeric type)을 기본적으로 제공합니다. 대표적인 숫자형으로는 정수형(int), 부동소수점형(float), 복소수형(complex)이 있으며, 각각의 특성과 용도가 다릅니다. 파이썬의 기본 숫자형 타입 복소수(complex)는 실수부(real)와 허수부(imag) 두 부분으로 구성되며, 일반적으로 (a + bj) 형태로 표현합니다. 여기서 a는 실수부, b는 허수부에 해당합니다. 또한 파이썬에서는 표준 숫자형 외에도 유용한 모듈을 제공합니다. fractions 모듈의 Fraction 클래스는 분수 형
파이썬에서는 리스트, 튜플, 딕셔너리 같은 컨테이너 객체를 순회(iteration)하는 개념이 매우 중요합니다. 반복자(Iterator)는 두 가지 핵심 메서드로 구성되어 있으며, 이를 활용하면 사용자가 직접 정의한 클래스에서도 반복 기능을 지원할 수 있습니다. 바로 __iter__()와 __next__()입니다. __iter__() 메서드란? __iter__() 메서드는 반복자(iterator) 객체 자신을 반환하는 역할을 합니다. 하나의 클래스가 서로 다른 방식의 순회를 지원해야 하는 경우, 추가적인 메서드를 함께 정의하여 다양
파이썬 시퀀스 자료형 개요 파이썬의 기본 시퀀스(sequence) 자료형에는 리스트(list), 튜플(tuple), 레인지(range)가 있습니다. 이 외에도 바이너리 데이터(binary data)와 텍스트 문자열(text string) 같은 추가적인 시퀀스 객체들이 존재합니다. 시퀀스 자료형 객체에는 값의 변경 가능(mutable) 여부와 관계없이 공통으로 사용할 수 있는 연산들이 많습니다. 대표적인 연산과 함수는 다음 표와 같습니다. 번호 연산/함수 및 설명 1 x in seq x가 시퀀스 seq 안에 존재하면 True
Python에서 텍스트(문자열) 데이터는 str 객체가 담당합니다. 문자열은 변경 불가능(immutable)한 유형으로, 한 번 생성된 후에는 내용을 직접 수정할 수 없습니다. 또한 문자열은 유니코드(Unicode) 문자들의 시퀀스이기 때문에 한글을 포함한 다양한 언어의 문자를 문제없이 다룰 수 있습니다.문자열 리터럴 표기법Python에서는 작은따옴표(), 큰따옴표(), 그리고 세 개의 따옴표( 또는 )를 사용해 문자열 리터럴을 정의할 수 있습니다.작은따옴표로 감싼 문자열큰따옴표로 감싼 문자열세 개의 작은따옴표로 감싼 문자열 또는
Python 이진 시퀀스 유형이란? Python에서 bytes와 bytearray는 이진 데이터를 다루는 데 사용되는 대표적인 자료형입니다. 이 두 객체는 memoryview라 불리는 버퍼 프로토콜(buffer protocol)에 의해 지원되며, memoryview를 활용하면 원본 데이터를 복사하지 않고도 다른 이진 객체의 내부 메모리에 직접 접근할 수 있어 성능 면에서 큰 이점을 얻을 수 있습니다. 바이트 리터럴 작성 방법 바이트 리터럴은 다음과 같은 형식으로 생성할 수 있습니다. b작은따옴표 하나로 감싼 바이트 b큰따옴표 하나
파이썬의 세트(set)는 중복 없는 해시 가능한 객체들을 담는 순서 없는 컬렉션입니다. 세트를 활용하면 합집합(union), 교집합(intersection), 차집합(difference) 같은 수학적 집합 연산을 간편하게 수행할 수 있으며, 컬렉션에서 중복 요소를 제거하는 용도로도 널리 사용됩니다. 세트는 요소의 위치(순서)를 기록하지 않기 때문에 인덱싱, 슬라이싱 등 시퀀스 관련 연산은 지원하지 않습니다. 파이썬에는 두 가지 세트 타입이 있습니다. 바로 set과 frozenset입니다. set은 가변(mutable) 타입이라 ad
파이썬 매핑 타입(Mapping Type)이란? 매핑(Mapping) 객체는 해시 테이블(hash table)의 값을 임의의 객체와 연결해 주는 자료 구조입니다. 파이썬에는 딕셔너리(dictionary)라는 대표적인 매핑 타입이 있으며, 딕셔너리는 변경 가능(mutable)한 자료형이라 실행 중에 자유롭게 요소를 추가하거나 수정할 수 있습니다. 딕셔너리의 키(key)는 임의의 값을 사용할 수 있고, 값(value)으로는 리스트, 정수 등 다양한 종류의 객체를 저장할 수 있다는 점이 큰 장점입니다. 딕셔너리의 주요 메서드와 연산 딕
파이썬에서 with 문은 런타임 컨텍스트(runtime context)를 지원하는 핵심 구문입니다. 이 컨텍스트는 컨텍스트 관리자(context manager)에 의해 정의되며, 컨텍스트 관리자를 활용하면 사용자가 직접 클래스를 만들어 런타임 컨텍스트를 정의할 수 있습니다.컨텍스트 관리자는 with 문의 본문(body)이 실행되기 전에 진입하여 작업을 시작하고, 본문의 실행이 끝나면 자동으로 종료됩니다. 덕분에 파일 열기/닫기처럼 리소스를 반드시 해제해야 하는 작업을 안전하게 처리할 수 있습니다.컨텍스트 관리자의 두 가지 핵심 메서