파이썬 순열(permutation)과 조합(combination) — itertools 활용법
·
Programming
파이썬에서 순열과 조합을 구현할 때 가장 편리한 방법은 itertools 표준 라이브러리를 활용하는 것입니다.수학적 개념을 코드로 간단하게 구현할 수 있고, 경우의 수를 계산하거나 모든 경우를 나열할 때 자주 사용됩니다.1. itertools 불러오기from itertools import permutations, combinations, product, combinations_with_replacementpermutations: 순서가 중요한 경우의 수(순열)combinations: 순서가 중요하지 않은 경우의 수(조합)product: 중복 순열 (데카르트 곱)combinations_with_replacement: 중복 조합 2. 순열 (permutations)순열은 서로 다른 n개의 원소 중에서 r개를..
[Python 코드 분석] 트리 구조 생성과 홀수 레벨 노드의 합계 구하기
·
Programming
파이썬으로 리스트(list)를 이용해 간단한 트리를 만들고, 재귀 함수를 통해 특정 조건에 맞는 노드들의 합을 구하는 코드를 분석해 보겠습니다.코드는 간결하지만 트리 구조의 생성 원리와 재귀 함수의 동작 방식을 이해하는 데 아주 좋은 예제입니다. 전체 코드 및 실행 결과먼저 분석할 전체 코드와 그 결과를 확인해 보겠습니다.# 트리의 기본 단위가 되는 노드 클래스class Node: def __init__(self, value): self.value = value self.children = []# 리스트를 받아 트리 구조로 만들어주는 함수def tree(li): nodes = [Node(i) for i in li] # 리스트의 1번 인덱스부터 시작하여 부모-자식 ..
[Java] 재귀 함수(Recursive Function)로 피보나치 수열 예제로 쉽게 이해하기
·
Programming
재귀는 함수가 자기 자신을 다시 호출하는 방식으로, 잘 사용하면 복잡한 문제를 매우 간결하게 표현할 수 있습니다. 재귀를 처음 배울 때 가장 많이 사용하는 예제인 피보나치 수열 코드를 통해 그 원리를 파헤쳐 보겠습니다. 재귀 함수의 핵심 구성 요소재귀 함수는 반드시 두 가지 요소를 가져야 합니다.기본 단계 (Base Case): 재귀 호출을 멈추는 조건입니다. 이 부분이 없다면 함수가 무한히 자신을 호출하다가 StackOverflowError를 내뿜으며 프로그램이 종료됩니다. 가장 중요합니다!재귀 단계 (Recursive Step): 문제를 더 작은 단위로 쪼개기 위해 자기 자신을 호출하는 부분입니다. 피보나치 수열 재귀 함수 코드피보나치 수열은 F(n) = F(n-1) + F(n-2) (단, F(1)=..
[Java] 상속과 오버라이딩: private, protected, static 변수 알아보기
·
Programming
자바 객체 지향 프로그래밍(OOP)의 핵심 개념인 클래스 상속과 메소드 오버라이딩에 대해 알아보겠습니다.여기에 더해, 상속 관계에서 private, protected, static 변수가 어떻게 동작하는지 실제 예제 코드를 통해 명확하게 파악해 보겠습니다. 예제 코드 및 실행 결과먼저 전체 예제 코드와 그 실행 결과를 살펴보겠습니다. Animal이라는 부모 클래스와 이를 상속받는 Dog 자식 클래스를 통해 개념을 이해해 봅시다.// Animal.java - 부모 클래스class Animal { // private 변수: 해당 클래스 내부에서만 접근 가능 private String name; // protected 변수: 상속받은 자식 클래스에서 접근 가능 protected int s..
함수 호출 방식에 대한 이해: Python, C, C++, Java 비교
·
Programming
프로그래밍 언어에서 함수 호출 방식은 중요한 개념 중 하나입니다. 각 언어마다 함수 호출 시 변수의 전달 방식이 다르기 때문에 이를 이해하고 정확히 사용하는 것이 필요합니다. 이번 포스트에서는 Python, C, C++, Java에서 함수 호출 방식이 어떻게 다르고, 실제 코드에서는 어떻게 동작하는지 알아보겠습니다. 1. Python: Call by Object ReferencePython에서는 함수에 변수를 전달할 때 객체의 참조가 전달됩니다. 이는 "Call by Object Reference" 또는 "Call by Assignment"라고 불립니다.변경 가능한 객체 (mutable objects)와 변경 불가능한 객체 (immutable objects)에 따라 동작이 다릅니다.변경 가능한 객체 예시..
프로그래밍 언어 개념 Chapter 2.1 :: 언어의 변천
·
Programming
이번 장에서는 디지털 컴퓨터 이전의 언어에 대해 알아볼 것이다. ℓ 디지털 컴퓨터 이전의 언어 주요 고급 언어의 계보의 그림이다. 10년 주기로 프로그래밍 언어의 발전사를 설명할 것이다. ℓ 1950년대 : 최초의 프로그래밍 언어 1950년 초반 당시의 프로그래밍은 주로 기계어로 작성되었으나, 뒤이어 어셈블리 언어가 탄생하였다. 어셈블리 언어는 기계어 코드를 대신할 기호나 연상기호를 사용할 수 있었다. 하지만 어셈블리 언어 역시 기계 의존적이며 자연언어와는 차이가 큰 구문을 사용했기에 때때로 저급 언어라 불린다. 이후 최초의 고급 언어는 1954년에서 1957년 사이에 IBM의 John Backus가 중심이 되어 만든 Fortran이다. Fortran 컴파일러는 효율적인 기계어 코드를 생성하여서 오랫동안..
프로그래밍 언어 개념 Chapter 1.1 :: 프로그래밍 언어 소개
·
Programming
ℓ 프로그래밍 언어란 무엇인가? 프로그래밍 언어에 대한 정의로 "기계가 읽을 수 있고 사람이 읽을 수 있는 형식으로 계산을 서술하기 위한 표기 체계이다." 이 정의에서 나타난 세 가지 주요 개념은 다음과 같다. ● 계산(computation) 튜링 머신이라는 수학적 개념을 가지고 형식적으로 정의할 수 있다. 컴퓨터가 수행할 수 있는 작업으로 간주한다. ● 기계가 읽을 수 있는(machine-readable) 단순한 구조를 가지고 있어야 한다. 제한된 시간 내에 번역이 가능하다. 프로그래밍 언어의 구조를 문맥 자유 언어로 제한한다. ● 사람이 읽을 수 있는(human-readable) 추상성을 제공해야 된다. 그래서 자연어를 닮게 된다. 소프트웨어 설계 기법을 지원하는 소프트웨어 개발 환경의 한부분이 되었..
김치바보
'Programming' 카테고리의 글 목록