프로그래밍 자습서

 

기술적으로 진보한 세상에서 프로그래밍과 컴퓨터 과학은 혁신을 주도하고 사회를 형성하는 변혁적 학문이 되었습니다.

예술 형식으로서의 프로그래밍은 창의성, 논리 및 문제 해결을 결합하여 우아하고 효율적인 솔루션을 만듭니다.

  • 과학과 창의성의 융합
    컴퓨터 과학은 컴퓨터 프로그램의 개발 및 구현을 위한 이론, 알고리즘 및 방법론을 다루는 프로그래밍의 과학적 기초 역할을 합니다. 그러나 프로그래밍 자체에는 상상력과 독창성이 필요합니다. 빈 캔버스 예술가처럼 프로그래머는 일련의 코드를 복잡한 알고리즘으로 엮어 산업을 혁신하고 작업을 단순화하며 사용자 경험을 향상시키는 디지털 걸작을 만듭니다. 객체 지향 프로그래밍(OOP)은 프로그래머가 코드를 재사용 가능한 모듈식 객체로 구성하여 복잡성을 관리할 수 있게 해주는 컴퓨터 과학의 핵심 패러다임입니다. 데이터와 동작을 개체에 캡슐화함으로써 프로그래머는 이해, 유지 관리 및 확장이 더 쉬운 솔루션을 창의적으로 설계할 수 있습니다.

  • 디자인 및 사용자 경험의 창의성
    프로그래밍은 문제 해결을 넘어 사용자 친화적인 인터페이스 설계와 매력적인 사용자 경험을 포함합니다. 예술적 감성과 기술적 지식이 결합된 측면입니다. 프로그래머는 사용자 인터페이스(UI)와 사용자 경험(UX)을 미학, 직관적인 탐색, 시선을 사로잡는 시각적 요소를 사용하여 사용자를 기쁘게 하고 사로잡는 소프트웨어를 만듭니다. 예술은 기능을 미적 매력과 매끄럽게 혼합하여 복잡한 기능을 직관적이고 시각적으로 즐거운 디자인으로 변환하는 데 있습니다. OOP를 사용하면 프로그래머는 작업을 분리하고 소프트웨어의 다양한 측면을 담당하는 별도의 개체를 만들 수 있습니다. 이 모듈식 접근 방식은 프로그래머가 개별 개체, 상호 작용 및 시스템의 전반적인 동작에 집중할 수 있도록 하여 디자인의 창의성을 촉진합니다. 상속 및 다형성과 같은 OOP 원칙을 사용하여 프로그래머는 직관적인 인터페이스, 사용자 친화적인 인터페이스 및 시각적으로 매력적인 미학으로 소프트웨어를 개발할 수 있습니다.

  • 예술로서의 소프트웨어 공학
    컴퓨터 공학의 한 분야인 소프트웨어 공학은 프로그래밍의 예술적 측면을 강조합니다. 요구 사항 수집에서 배포 및 유지 관리에 이르기까지 전체 소프트웨어 개발 수명 주기를 다룹니다. 소프트웨어 엔지니어는 설계자처럼 프로그래밍에 접근하여 안정적이고 확장 가능하며 유지 관리가 가능한 시스템과 플랫폼을 설계합니다. 기능과 우아함을 결합한 소프트웨어 솔루션을 만들기 위해 코드 모듈성, 재사용성 및 아키텍처 패턴과 같은 요소를 고려합니다. 소프트웨어 개발의 예술은 기술적 제약, 사용자 요구 및 디자인 목표의 균형을 유지하여 기능적이고 심미적으로 만족스러운 소프트웨어를 만드는 것입니다. OOP는 복잡성을 관리하는 구조화된 접근 방식을 제공함으로써 소프트웨어 개발에서 핵심적인 역할을 합니다. 코드를 클래스와 개체로 분리하면 소프트웨어 개발자가 모듈식, 재사용 및 유지 관리가 가능한 시스템을 설계할 수 있습니다. 올바른 추상화 및 캡슐화를 통해 소프트웨어 개발자는 기능적이고 우아한 소프트웨어를 생성하는 균형을 맞출 수 있습니다.

  • 혁신과 사회적 영향
    프로그래밍 및 컴퓨터 과학의 예술은 기술 분야를 넘어 산업과 사회 전체에 영향을 미칩니다. 의료에서 금융, 교육, 엔터테인먼트, 프로그래밍 및 컴퓨터 과학에 이르기까지 우리가 일하고 소통하고 생활하는 방식을 혁신하고 있습니다. 인공 지능, 가상 현실 및 블록체인 기술 과 같은 혁신은 산업을 변화시키고 새로운 지평을 열고 있습니다. 프로그래머와 컴퓨터 과학자는 이러한 혁신적인 발전에서 핵심적인 역할을 수행하여 가능성의 한계를 넓히고 아이디어를 현실로 만들고 있습니다. OOP를 통해 프로그래머는 다양한 영역을 혁신하는 혁신적인 솔루션을 만들 수 있습니다. OOP의 모듈식 및 확장 가능한 특성으로 복잡성을 관리함으로써 프로그래머는 인공 지능 알고리즘, 몰입형 가상 현실 경험 및 안전한 블록체인 애플리케이션과 같은 복잡한 시스템을 개발할 수 있습니다. 이러한 발전은 산업을 변화시키고 생산성을 높이며 전 세계 사람들의 삶의 질을 향상시키고 있습니다.

복잡성 관리는 소프트웨어 개발의 핵심 측면입니다. 시스템이 더욱 복잡해짐에 따라 복잡성을 관리하고 유지 관리 및 확장성을 보장하기 위해 효과적인 접근 방식을 사용해야 합니다.

개체 지향 패러다임은 복잡성 관리에 상당한 이점을 제공하는 강력한 접근 방식입니다. 개체의 데이터와 동작을 캡슐화하고 캡슐화, 상속 및 다형성과 같은 개념을 사용함으로써 개체 지향 패러다임은 복잡성 관리를 위한 견고한 기반을 제공합니다.

  1. 캡슐화.
    캡슐화는 개체 내에서 데이터와 메서드의 연결을 촉진하는 개체 지향 패러다임의 기본 원칙입니다. 이 캡슐화는 개체의 내부 복잡성을 숨기고 개체와 상호 작용하는 데 필요한 인터페이스만 노출합니다. 구현 세부 사항을 숨김으로써 캡슐화는 시스템의 다른 부분의 복잡성을 줄여 개발자가 더 높은 수준의 추상화에 집중할 수 있도록 합니다. 이는 모듈성을 촉진하고 코드 가독성을 향상시켜 복잡한 시스템을 더 쉽게 이해하고 유지 관리할 수 있도록 합니다.

  2. 추출.
    추상화는 복잡성을 관리하는 데 도움이 되는 객체 지향 패러다임의 또 다른 핵심 개념입니다. 이를 통해 개발자는 불필요한 세부 사항을 추상화하여 복잡한 실제 개체를 클래스로 나타낼 수 있습니다. 추상 클래스와 인터페이스를 생성함으로써 개발자는 여러 하위 클래스에서 상속 및 구현할 수 있는 공통 동작 및 특성을 정의할 수 있습니다. 이러한 클래스의 계층적 구성을 통해 개발자는 복잡한 시스템을 더 작고 관리하기 쉬운 구성 요소로 분해하여 복잡성을 관리할 수 있습니다. 각 클래스는 특정 책임에 중점을 두어 보다 모듈화되고 이해하기 쉬운 코드베이스를 만듭니다.

  3. 계승.
    상속은 코드 재사용을 촉진하고 중복성을 줄이는 객체 지향 패러다임이 제공하는 강력한 메커니즘입니다. 이를 통해 새 클래스는 기존 클래스 간에 "is" 관계를 설정하여 속성과 동작을 상속할 수 있습니다. 상속은 개발자가 공통 특성 및 동작으로 기본 클래스를 정의한 다음 이 클래스에서 상속되는 특수 클래스를 만들 수 있도록 하여 복잡성을 관리하는 데 도움이 됩니다. 이 계층적 클래스 구성은 코드 중복을 제거하고 복잡성을 줄이며 유지 관리성을 향상시킵니다.

  4. 다형성.
    다형성(Polymorphism)은 서로 다른 유형의 객체를 공통 인터페이스를 기반으로 교환 가능하게 처리할 수 있도록 하는 객체 지향 패러다임의 핵심 기능입니다. 다형성은 개발자가 각 개체의 특정 구현 세부 정보를 처리할 필요 없이 더 높은 수준의 추상화로 작동하는 코드를 작성할 수 있도록 하여 복잡성 관리를 단순화합니다. 다형성을 사용하면 개발자는 기존 코드에 영향을 주지 않고 새 클래스를 추가할 수 있으므로 보다 유연하고 확장 가능한 시스템을 만들 수 있습니다. 이는 모듈식 및 확장 가능한 개발을 촉진하여 장기적으로 복잡성을 줄입니다.

복잡성 관리는 소프트웨어 개발의 중요한 측면이며 객체 지향 패러다임은 이 작업을 위한 강력한 프레임워크를 제공합니다.

캡슐화, 추상화, 상속 및 다형성과 같은 원칙을 통해 객체 지향 패러다임을 통해 개발자는 복잡성을 효과적으로 관리하고 유지 관리 가능하고 확장 가능한 모듈식 시스템을 만들 수 있습니다. 개체의 데이터와 동작을 캡슐화하고, 불필요한 세부 사항을 추상화하고, 상속을 통해 코드를 재사용하고, 다형성을 사용함으로써 개체 지향 패러다임은 복잡성 관리에 대한 포괄적인 접근 방식을 제공합니다. 객체 지향 패러다임의 사용은 소프트웨어 개발 프로세스를 크게 개선하고 안정적이고 관리 가능한 소프트웨어 시스템 생성에 기여합니다.

프로그래밍 기술은 과학적 원리를 창의성, 문제 해결 및 혁신과 결합합니다. 기술적 기량과 예술적 비전이 모두 필요한 분야입니다. 객체 지향 접근 방식으로 복잡성을 관리하는 것은 프로그래밍에서 필수적이며, 이를 통해 프로그래머는 우아하고 효율적인 솔루션을 개발하고 사용자 경험을 개선할 수 있습니다.

기술이 발전함에 따라 소프트웨어는 계속해서 디지털 세계를 형성하고 미래 혁신을 주도할 것입니다.

 

프로그래밍의 예술



프로그래밍의 예술

프로그래밍 기술은 코드를 작성하는 것 이상입니다. 여기에는 우리의 사고 과정, 문제 해결 방식, 우리가 세상에 미치는 영향이 포함됩니다. 프로그래밍은 아이디어에 생명을 불어넣고 기술을 통해 자신을 표현할 수 있게 해주는 창의적인 언어입니다. 그것은 우리가 혁신적으로 생각하고, 틀에 얽매이지 않는 해결책을 찾고, 세상과 우리 자신에 대한 이해를 넓히도록 도전합니다. 이 비디오는 기본 구문 및 데이터 구조에서 고급 알고리즘 및 프로그래밍 패러다임에 이르기까지 기본적인 프로그래밍 개념을 탐구합니다. 의 시작하자.

코드 편집과 관련하여 텍스트 편집기와 IDE라는 두 가지 주요 유형의 도구가 있습니다. 텍스트 편집기는 일반 텍스트 편집에 중점을 두지만 IDE는 추가 기능을 제공합니다. 그러나 대부분의 경우 이 둘의 구분은 그다지 중요하지 않으며 용어를 서로 바꾸어 사용할 수 있습니다. 널리 사용되는 텍스트 편집기 및 IDE 옵션으로는 Vim, Atom, Sublime Text, Eclipse, IntelliJ, PyCharm 및 Visual Studio Code가 있습니다. 특히 Visual Studio Code는 사용자 정의가 가능하며 널리 권장됩니다.

코드를 실행하려면 컴퓨터가 이해할 수 있는 기계 코드로 컴파일해야 합니다. 이를 위해서는 언어 컴파일러 또는 런타임을 설치해야 합니다. 다른 언어에는 GCC, Java SDK, Python 인터프리터, Node.js 런타임 및 .NET SDK와 같은 자체 컴파일러 또는 런타임이 있습니다. 이러한 도구의 세부 사항을 이해할 필요는 없습니다. 코드를 실행할 언어를 설치하기만 하면 됩니다.

코드 실행에는 명령줄 인터페이스에 대한 액세스를 제공하는 터미널 사용이 포함됩니다. 일반적으로 사용되는 터미널에는 Powershell 및 Bash가 포함됩니다. 터미널을 사용하면 디렉토리 생성, 파일 나열 및 프로그램 실행과 같은 명령을 실행할 수 있습니다. Node.js용 npm 및 Python용 pip와 같은 패키지 관리자를 사용하여 명령줄을 통해 리포지토리에서 소프트웨어를 설치할 수 있습니다. 버전 관리 시스템인 Git은 코드 변경을 관리하고 다른 사람들과 협업하는 데 필수적입니다.

코딩을 시작하려면 적절한 텍스트 편집기 또는 IDE, 언어 컴파일러 및 터미널 명령에 대한 기본 지식이 필요합니다. Visual Studio Code는 텍스트 편집기 또는 IDE에 권장되는 선택입니다. 프로그래밍 언어를 설치하고 터미널 명령에 익숙해지면 코드를 작성하고 실행할 수 있습니다. 프로그래밍 언어를 배우려면 구문, 환경 및 규칙을 이해해야 합니다. 언어마다 복잡성 수준이 다르지만 모두 구조와 개념에서 유사성을 공유합니다.

다른 프로그래밍 언어로 출력을 인쇄하려면 각 언어에 특정한 기능이나 방법을 사용하면 됩니다. 예를 들어 Python에는 기본 제공 인쇄 기능이 있고 JavaScript에는 console.log 메서드가 있으며 Java 및 C++에는 표준 출력으로 인쇄하기 위한 자체 구문이 있습니다.

변수는 다양한 데이터 유형의 값을 저장하는 데 사용됩니다. 변수는 값으로 선언, 정의 및 초기화됩니다. 프로그래밍 언어는 정적으로 입력되거나 동적으로 입력될 수 있으며 변수에 대한 구문이 다릅니다. 정적 타이핑에는 변수 유형의 명시적 선언이 필요하지만 동적 타이핑에는 필요하지 않습니다. 변수에는 프로그램에서 액세스하고 사용할 수 있는 위치를 결정하는 범위가 있습니다. 범위는 글로벌 또는 로컬일 수 있으며 더 나은 구성 및 오류 방지를 허용합니다.

데이터 유형은 문자열, 부울, 정수, 부동 소수점 숫자, 문자 및 배열과 같은 다양한 종류의 데이터를 나타냅니다. 데이터 구조는 데이터를 구성하고 조작하는 방법을 제공합니다. 널리 사용되는 데이터 구조에는 배열, 스택, 힙, 트리, 연결 목록, 해시 테이블, 해시 맵 및 그래프가 포함됩니다. 배열과 맵은 다양한 응용 프로그램에서 일반적으로 사용되는 두 가지 데이터 구조입니다.

요약하면 프로그래밍은 사고, 문제 해결, 코드를 통해 세상을 형성하는 것을 포함하는 예술입니다. 여기에는 텍스트 편집기 또는 IDE 사용, 컴파일러 또는 런타임을 통한 코드 실행, 터미널 명령 및 버전 제어 이해가 포함됩니다. 프로그래밍 언어를 배우려면 구문, 변수, 데이터 유형 및 데이터 구조를 파악해야 합니다. 이 비디오는 프로그래밍 여정을 시작할 수 있도록 이러한 개념에 대한 높은 수준의 개요를 제공합니다.

The Art Of Programming
The Art Of Programming
  • 2023.05.11
  • www.youtube.com
In this video, we'll explore the basics of programming, including the different programming paradigms such as procedural, object-oriented, and functional pro...
 

소프트웨어 작성의 기술


소프트웨어 작성의 기술

악기와 마찬가지로 컴퓨터는 받은 지시에 따라 특정 작업을 수행하도록 설계된 세심하게 제작된 기계입니다. 코드로 작성된 이러한 지침은 작업을 안내하는 소프트웨어입니다. 악보가 작곡가가 사용하는 코드인 것처럼 컴퓨터 프로그래머는 소프트웨어 코드를 사용하여 프로그램을 만듭니다.

프로그래밍은 시인이나 음악가가 경험하는 감정과 유사한 기쁨과 만족의 원천이 될 수 있습니다. 초기 컴퓨터는 문제 해결과 복잡성을 즐기는 사람들에게 매력적이고 힘을 실어주었습니다. 그들은 놀라운 속도로 작동하여 컴퓨터의 기본 명령을 사용하여 표현되는 한 광범위한 문제를 해결할 수 있습니다. 그러나 컴퓨터는 본질적으로 멍청하고 무엇을 해야 하는지 이해하기 위해 정확한 지침이 필요합니다. 초기 프로그래머는 이진 명령을 나타내는 숫자를 사용하여 기계 언어를 작성해야 했습니다. 이 프로세스는 지루하고 오류가 발생하기 쉬웠기 때문에 보다 인간 친화적인 프로그래밍 언어가 개발되었습니다.

Fortran 및 COBOL과 같은 고급 언어의 도입으로 프로그래밍에 대한 접근성이 높아졌습니다. 프로그래머는 친숙한 과학적 공식이나 이해하기 쉬운 논리적 진술을 사용하여 지침을 표현할 수 있습니다. 그런 다음 컴파일러를 사용하여 이러한 명령을 컴퓨터의 이진 언어로 번역했습니다. 이 혁신은 프로그래머가 더 이상 각 컴퓨터의 특정 기계 언어를 배울 필요가 없기 때문에 소프트웨어 혁명의 문을 열었습니다.

수년에 걸쳐 다양한 요구 사항을 충족하기 위해 수백 개의 프로그래밍 언어가 개발되었습니다. 이러한 언어와 기계어 사이의 간격이 넓어져 프로그래머가 낮은 수준의 세부 사항보다는 달성하려는 것에 집중할 수 있습니다. 컴퓨팅이 더욱 개인화됨에 따라 프로그래밍 언어는 더욱 다양하고 사용자 친화적이 되었습니다. 사람들은 이제 평균을 계산하거나 데이터를 구성하는 것과 같이 수행할 작업을 컴퓨터에 지시함으로써 일상적으로 컴퓨터와 통신합니다. 프로그래밍은 개인에게 권한을 부여하는 도구가 되어 컴퓨터 시스템을 필요에 맞게 사용자 정의하고 조정할 수 있습니다.

소프트웨어 작성에는 코딩뿐만 아니라 데이터를 표현하고 구성하는 방법을 정의하는 것도 포함됩니다. 요구 사항에 따라 데이터를 문자열, 목록, 테이블, 트리 등으로 구성할 수 있습니다. 언어 및 데이터 구조의 선택은 프로그래밍 문제를 효과적으로 해결하는 데 중요합니다. 프로그래머는 문제를 해결하기 위해 알고리즘으로 알려진 단계별 절차를 만듭니다. 이러한 알고리즘은 원하는 결과를 달성하는 데 필요한 작업을 지정합니다. 그러나 주어진 문제에 대해 가장 효율적인 알고리즘을 찾는 것은 복잡한 작업이 될 수 있습니다. 신중한 사고, 집중, 때로는 전문 분야에 대한 광범위한 지식이 필요합니다.

소프트웨어 개발은 여러 측면을 동시에 염두에 두어야 하는 도전적이고 창의적인 노력입니다. 프로그래머는 기술 발전에 지속적으로 적응하여 컴퓨터가 달성할 수 있는 범위를 확장합니다. 그들은 코드의 우아함과 일관성을 위해 노력하여 기능적이고 미학적으로 만족스러운 소프트웨어를 만듭니다. 그들의 노력을 통해 소프트웨어 프로그래머는 우리의 능력을 확장하여 방대한 양의 정보를 활용하고 한때 마술처럼 여겨졌던 방식으로 세상과 상호 작용할 수 있게 했습니다. 프로그래밍은 컴퓨터를 작동시키고 오늘날 우리가 살고 있는 하이테크 세계를 형성하는 원동력입니다.

The Art of Writing Software
The Art of Writing Software
  • 2014.11.17
  • www.youtube.com
CHM Exhibition "Revolution: The First 2000 Years of Computing"Software is more than obscure computer code. It’s an art form: a meticulously-crafted literatur...
 

초보자를 위한 C++ 자습서 - 전체 과정


초보자를 위한 C++ 자습서 - 전체 과정

00:00:00 - 01:00:00 이 비디오는 C++로 코딩하는 방법을 배우고자 하는 초보자를 위한 튜토리얼입니다. 문자열, 숫자 및 변수 작업의 기본 사항을 다룹니다. 또한 다른 파일에서 코드를 가져오는 개념을 소개합니다.

01:00:00 - 02:00:00 초보자를 위한 이 C++ 튜토리얼은 4가지 기능을 갖춘 계산기를 만드는 방법을 다룹니다. 이 자습서에서는 데이터를 입력하고 연산자 동등성을 확인하고 해당 조건에 따라 코드를 실행하는 방법을 설명합니다.

02:00:00 - 03:00:00 이 비디오는 for 루프를 사용하여 특정 결과를 계산하는 데 중점을 두고 C++ 프로그래밍에 대한 기본적인 소개를 제공합니다. 시연 중인 함수는 숫자의 특정 거듭제곱 결과를 계산합니다.

03:00:00 - 04:00:00 초보자를 위한 이 C++ 자습서에서 강사는 상속을 사용하여 클래스 계층 구조에서 기능을 확장하는 방법을 보여줍니다. 상속을 통해 클래스는 다른 클래스와 동일한 기능을 가지면서 추가 기능으로 해당 기능을 확장할 수 있습니다. 강사는 클래스의 동작을 변경하기 위해 상속된 함수를 재정의하는 방법도 보여줍니다.

1 부

  • 00:00:00 이 비디오 자습서는 초보자에게 기본 C++ 코드를 작성하는 방법을 알려줍니다. 첫 번째 단계는 codeblocks 패키지에 포함된 텍스트 편집기와 C++ 컴파일러를 설치하는 것입니다. 그런 다음 자습서는 codeblocks에서 간단한 프로젝트를 설정하는 방법을 보여줍니다.

  • 00:05:00 이 자습서에서는 C++ 프로그래밍 언어와 C++ 프로그램을 작성하고 실행하는 데 필요한 도구에 대해 간략하게 소개합니다. 자습서의 첫 번째 부분에서는 Mac에 필요한 도구를 설치하는 방법을 보여주고 두 번째 부분에서는 코드 블록에서 새 C++ 프로젝트를 만드는 방법을 다룹니다.

  • 00:10:00 이 비디오 자습서에서 발표자는 C++ 프로그램 작성의 기본 사항을 안내합니다. 그는 C++ 프로젝트 및 파일의 필요성을 다루고 기능을 설명하며 프로그램을 빌드하고 실행하는 방법을 보여줍니다.

  • 00:15:00 이 자습서에서는 C++에서 기본 코드를 작성하는 방법과 콘솔에 정보를 출력하기 위해 인쇄 문을 사용하는 방법을 설명합니다.

  • 00:20:00 이 비디오에서 발표자는 스토리를 인쇄하는 프로그램의 예를 제공하여 프로그래밍에서 변수가 얼마나 유용한지 보여줍니다. 그런 다음 발표자는 캐릭터의 이름을 저장하는 "캐릭터 이름"이라는 변수를 만들고 값을 할당하는 방법을 보여줍니다. 다음으로 발표자는 캐릭터의 나이를 저장하는 "age"라는 변수를 만들고 값을 할당하는 방법을 보여줍니다. 마지막으로 발표자는 변수를 사용하여 여러 데이터를 저장하는 방법을 보여줍니다.

  • 00:25:00 이 비디오에서 발표자는 변수의 개념을 소개하고 변수를 사용하여 프로그램에 데이터를 저장하는 방법을 보여줍니다. 그들은 print 문을 사용하여 변수에 저장된 데이터에 액세스하고 조작하는 방법을 보여줍니다. 마지막으로 데이터가 별도의 문자열로 인쇄되도록 print 문 내부에 변수를 포함하는 방법을 보여줍니다.

  • 00:30:00 이 비디오는 C++의 변수 및 데이터 유형의 개념을 소개합니다. 변수는 데이터를 저장하는 컨테이너이며 모든 유형의 정보를 저장하는 데 사용할 수 있습니다. 문자열은 일반적인 유형의 변수이며 일련의 문자입니다. 정수를 사용하여 정수를 저장하거나 음수를 사용하여 음수를 저장할 수도 있습니다. 십진수를 정수로 저장할 수도 있습니다.

  • 00:35:00 이 자습서에서는 간단한 텍스트 및 숫자부터 시작하여 문자열 및 부울과 같은 보다 복잡한 데이터 유형으로 이동하여 C++ 프로그래밍의 기본 사항을 다룹니다.

  • 00:40:00 이 비디오는 C++ 문자열 함수 길이 및 문자열 인덱싱을 사용하여 문자열을 인쇄하고 문자열에서 특정 문자의 위치를 결정하는 방법과 문자열에서 특정 문자를 수정하는 방법을 다룹니다.

  • 00:45:00 이 비디오는 함수에 인수를 전달하는 방법과 다양한 수학 함수를 사용하여 문자열을 조작하는 방법을 포함하여 C++에서 문자열 작업의 기본 사항을 다룹니다.

  • 00:50:00 이 C++ 자습서에서는 숫자, 더하기, 빼기, 곱하기 및 나누기의 기본 사항을 다룹니다. 계수 연산자도 도입되어 두 숫자를 나누고 나머지를 계산하는 데 유용합니다. 마지막으로 변수에 숫자를 저장하는 방법을 설명합니다.

  • 00:55:00 초보자를 위한 이 C++ 자습서는 수학 함수를 사용하여 문제를 해결하는 방법을 설명합니다. 함수에는 제곱근, pow 및 라운드가 포함됩니다. 다른 파일에서 코드 가져오기에 대해서도 설명합니다.

2 부

  • 01:00:00 초보자를 위한 이 C++ 자습서에서는 사용자에게 나이와 이름을 입력하라는 메시지가 표시됩니다. 그런 다음 프로그램은 age라는 변수에 정보를 저장하고 사용자의 이름과 나이를 인쇄합니다.

  • 01:05:00 이 비디오 자습서는 C++에서 기본 계산기를 만드는 방법과 Mad Libs 게임을 빌드하는 방법을 보여줍니다.

  • 01:10:00 이 비디오는 C++에서 배열을 만들고 사용하는 방법을 설명합니다. 배열은 변수와 유사하지만 여러 값을 보유할 수 있습니다.

  • 01:15:00 이 비디오 자습서에서는 C++ 배열의 기본 사항을 설명합니다. 배열은 여러 데이터 조각을 저장할 수 있는 컨테이너이며 인덱스로 또는 배열의 "크기" 속성에 값을 할당하여 개별 요소에 액세스할 수 있습니다.

  • 01:20:00 이 자습서에서 작성자는 C++에서 함수를 만드는 방법을 보여줍니다. 함수는 특정 작업을 수행하고 프로그램 전체에서 재사용할 수 있는 코드 블록입니다. 함수의 반환 유형은 void 또는 정수일 수 있습니다. 저자는 또한 함수를 호출하는 방법을 보여줍니다.

  • 01:25:00 이 영상에서 저자는 함수의 작동 방식과 재사용 방법을 설명합니다. 또한 함수 서명을 만드는 방법과 서명을 사용하여 함수를 호출하는 방법도 보여줍니다. 마지막으로 그는 함수가 호출자에게 정보를 반환하는 C++의 반환에 대해 설명합니다.

  • 01:30:00 동영상에서는 C++에서 함수를 만드는 방법과 return 키워드를 사용하여 함수 실행이 완료되었음을 나타내는 방법에 대해 설명합니다. 비디오는 또한 큐브 함수를 사용하여 숫자를 세제곱한 결과를 반환하는 방법을 보여줍니다.

  • 01:35:00 이 자습서에서 저자는 초보자에게 C++의 if 문에 대해 가르칩니다. if 문은 프로그램이 다양한 상황에 응답할 수 있도록 하는 프로그래밍 구조입니다. 저자는 if 문을 사용하여 조건을 확인하는 방법과 더 복잡한 if 문을 만드는 방법을 보여줍니다.

  • 01:40:00 이 비디오 자습서에서는 C++에서 and 및 or 연산자를 사용하여 두 가지 조건을 확인하는 방법을 설명합니다. 두 조건 중 하나라도 거짓이면 전체 if 블록이 거짓이 되고 코드가 실행되지 않습니다.

  • 01:45:00 이 자습서에서 저자는 참 또는 거짓 값을 생성하기 위해 비교를 사용하는 방법을 설명하면서 초보자에게 if 문에 대해 가르칩니다. 이 함수는 두 개의 숫자를 입력으로 사용하고 가장 큰 숫자를 반환합니다.

  • 01:50:00 이 비디오는 C++에서 비교가 작동하는 방식과 보다 큼, 보다 작음 및 같음을 사용하여 두 숫자가 같거나 크거나 같은지 확인하는 방법을 설명합니다.

  • 01:55:00 초보자를 위한 이 C++ 자습서는 데이터 입력 방법, 연산자 동등성을 확인하고 해당 조건에 따라 코드를 실행하는 방법을 포함하여 4개의 함수 계산기를 만드는 방법을 알려줍니다.

파트 3

  • 02:00:00 이 비디오 자습서에서는 정수를 요일로 변환하는 기능을 시연합니다. 함수가 생성되고 주어진 날짜가 1일 이상인지 확인하기 위해 if 문이 사용됩니다. 1이면 함수는 "일요일"을 반환합니다. 하나가 아니면 함수는 "월요일"을 반환합니다.

  • 02:05:00 이 동영상은 switch 문을 사용하여 if 문의 코드를 보다 효율적으로 만드는 방법을 설명합니다. 비디오는 계속해서 각 요일에 대한 switch 문을 만드는 방법을 설명하고 입력으로 전달된 숫자에 대해 요일을 인쇄하여 기능을 시연합니다.

  • 02:10:00 이 비디오는 "C++ Tutorial for Beginners - Full Course" 비디오의 개요를 제공합니다. 이 비디오는 조건이 충족되는 동안 while 루프를 사용하여 코드 블록을 반복하는 방법을 보여줍니다.

  • 02:15:00 초보자를 위한 이 C++ 자습서는 while 루프와 do while 루프를 만드는 방법을 포함하여 루프의 기본 사항을 다룹니다. 동영상에서는 무한 루프와 이를 방지하는 방법에 대해서도 설명합니다. 마지막으로 for 루프가 시연됩니다.

  • 02:20:00 이 자습서에서는 while 루프와 do while 루프를 사용하여 추측 게임을 만드는 방법을 보여줍니다. 이 게임은 처음에는 사용자가 무제한 추측을 할 수 있다는 점에서 불공평하지만 튜토리얼에서는 추측 제한을 부과하여 게임을 더 공정하게 만드는 방법을 보여줍니다.

  • 02:25:00 이 비디오에서 저자는 for 루프의 작동 방식과 C++에서 루프를 사용하는 방법을 설명합니다. 그는 또한 for 루프를 사용하여 문제를 해결하는 방법의 예를 보여줍니다.

  • 02:30:00 이 비디오에서 저자는 변수가 실행될 때마다 변경되는 반복 구조인 while 루프에 대해 설명합니다. for 루프는 유사한 구성이지만 변수 선언, 초기화 및 루프 조건을 포함합니다.

  • 02:35:00 이 동영상 자습서는 for 루프를 사용하여 배열의 내용을 반복하는 방법과 숫자의 특정 거듭제곱을 취하는 함수를 빌드하는 방법을 보여줍니다.

  • 02:40:00 이 비디오 자습서는 for 루프를 사용하여 특정 결과를 계산하는 데 중점을 두고 C++ 프로그래밍에 대한 기본 소개를 제공합니다. 시연 중인 함수는 숫자의 특정 거듭제곱 결과를 계산합니다.

  • 02:45:00 이 자습서에서 저자는 2차원 배열을 만들고 사용하는 방법을 보여주고 그 안에 있는 요소에 액세스하는 방법에 대해 설명합니다.

  • 02:50:00 이 비디오 자습서는 C++ 언어를 소개하고 for 및 int 반복자를 사용하여 데이터 배열을 반복하는 방법을 보여줍니다. 중첩된 for 루프를 사용하면 배열 내에서 데이터를 쉽게 반복할 수 있습니다.

  • 02:55:00 이 비디오는 포인터가 무엇인지, 어떻게 유용한지, C++에서 포인터를 만드는 방법을 설명합니다.

파트 4

  • 03:00:00 이 비디오는 변수와 상수를 사용하여 정보를 저장하는 방법에 대한 예제와 함께 초보자에게 친숙한 C++ 프로그래밍 소개를 제공합니다. 비디오는 메모리 주소에 액세스하여 내부에 저장된 정보를 검색하는 방법도 보여줍니다.

  • 03:05:00 이 비디오는 "C++ Tutorial for Beginners - Full Course" 비디오의 개요를 제공합니다. 비디오에서 발표자는 포인터를 사용하여 변수의 메모리 주소에 액세스하는 방법을 보여줍니다. 포인터는 단지 데이터 유형인 메모리 주소일 뿐이며 다른 변수에 대한 포인터를 저장하는 데 사용할 수 있습니다.

  • 03:10:00 이 자습서는 프로그래밍에서 포인터를 사용하는 방법을 설명하고 특정 메모리 주소에 저장된 값에 액세스하기 위해 포인터를 역참조하는 방법을 보여줍니다. 또한 자습서에서는 C++의 클래스 및 개체에 대해 설명하고 클래스를 만들고 사용하는 방법을 보여 줍니다.

  • 03:15:00 초보자를 위한 C++ 튜토리얼 동영상에서 저자는 책을 나타내는 클래스를 만듭니다. 클래스에는 제목과 작성자라는 두 가지 속성이 있습니다. 그런 다음 저자는 책 개체를 만들고 제목과 저자를 설정합니다.

  • 03:20:00 이 비디오는 초보자에게 C++에서 개체를 만들고 작업하는 방법을 알려줍니다. 객체는 클래스의 실제 인스턴스이고 클래스는 데이터 유형의 템플릿입니다. 개체를 인쇄하고 해당 값을 변경할 수 있습니다.

  • 03:25:00 이 비디오는 생성자가 C++에서 작동하는 방식과 기본값으로 개체를 초기화하는 데 사용되는 방법을 설명합니다.

  • 03:30:00 이 비디오 자습서에서는 제목, 작성자 및 페이지를 입력 값으로 받아들이는 C++ 생성자를 만드는 방법을 설명합니다. 일단 초기화되면 생성자를 사용하여 매번 값을 전달할 필요 없이 새 객체를 생성할 수 있습니다.

  • 03:35:00 이 비디오는 C++에서 함수를 사용하여 학생이 우등생인지 아닌지를 결정하는 방법을 설명합니다. 함수는 개체 자체의 GPA에 따라 각 개체가 true 또는 false를 반환하는 데 사용할 수 있는 템플릿입니다.

  • 03:40:00 이 비디오는 초보자에게 C++ 클래스에서 getter 및 setter를 사용하는 방법을 알려줍니다. Getter 및 Setter를 사용하면 클래스의 특성 및 요소에 대한 액세스를 제어할 수 있습니다. 이 예제는 getter 및 setter를 사용하여 영화에 유효한 등급을 적용하는 방법을 보여줍니다.

  • 03:45:00 초보자를 위한 이 C++ 자습서에서 작성자는 getter 및 setter를 사용하여 영화 개체에 할당할 수 있는 등급을 제한하는 방법을 보여줍니다. 전달된 등급이 유효한 등급 중 하나가 아닌 경우 오류가 발생하거나 등급이 설정되지 않습니다.

  • 03:50:00 이 비디오에서 저자는 C++를 사용하여 비디오에 등급을 설정하는 방법을 설명합니다. 먼저 C++에서 등급이 13과 같은 양수 값 또는 -3과 같은 음수 값과 같은 등급으로 표현되는 방법을 설명합니다. 다음으로 등급 설정이라는 기능을 사용하여 동영상 등급을 설정하는 방법을 보여줍니다. 이 함수는 등급을 나타내는 문자열인 하나의 매개변수를 사용합니다. 입력한 등급이 유효하지 않은 경우 함수는 등급이 지정되지 않은 등급을 나타내는 문자열을 반환합니다. 마지막으로 작성자는 등급 가져오기라는 함수를 사용하여 비디오의 등급을 인쇄하는 방법을 보여줍니다. 이 함수는 매개변수를 사용하지 않고 단순히 동영상의 등급을 반환합니다.

  • 03:55:00 초보자를 위한 이 C++ 자습서에서 강사는 함수를 상속하는 방법과 클래스 계층 구조에서 함수를 재정의하는 방법을 보여줍니다. 이를 통해 클래스는 다른 클래스와 동일한 기능을 가지면서 추가 기능으로 해당 기능을 확장할 수 있습니다.
C++ Tutorial for Beginners - Full Course
C++ Tutorial for Beginners - Full Course
  • 2018.08.24
  • www.youtube.com
This course will give you a full introduction into all of the core concepts in C++. Want more from Mike? He's starting a coding RPG/Bootcamp - https://simula...
 

프로그래밍 및 컴퓨터 과학 입문 - 전체 과정



프로그래밍 및 컴퓨터 과학 입문 - 전체 과정

이 비디오는 코딩에 대한 배경 지식이 거의 또는 전혀 없는 사람들을 위한 프로그래밍 및 컴퓨터 과학에 대한 초보자 가이드입니다. 모든 프로그래밍 언어에 적용되는 기본 개념과 기술을 다룹니다. 이 비디오는 통합 개발 환경(IDE)에서 코드 작성의 기본 사항을 설명하고 프로그래밍 문법의 중요성을 강조합니다.

비디오에서 다루는 주제는 다음과 같습니다.

  1. 구문 및 프로그래밍 규칙을 포함한 프로그래밍 및 컴퓨터 과학 소개.
  2. 콘솔을 사용하여 프로그램에서 텍스트를 출력합니다.
  3. 프로그래밍의 기본 수학 연산 및 모듈러스 연산자.
  4. 문자열을 콘솔에 인쇄합니다.
  5. 변수, 데이터 유형 및 명명 규칙을 이해합니다.
  6. 프로그램에서 변수를 정의, 참조 및 조작하는 방법.
  7. 조건부 실행을 위한 if 문, elsif 문 및 else 문 탐색.
  8. 관련 변수를 저장하는 방법으로 배열을 소개합니다.
  9. for 루프, while 루프 및 do-while 루프를 포함한 루프의 기본 사항.
  10. 다양한 유형의 프로그래밍 오류 이해: 구문 오류, 런타임 오류 및 논리 오류.
  11. 인쇄 문, 중단점 및 주석 사용과 같은 디버깅 기술.
  12. 프로그래밍 오류를 방지하기 위한 전략.
  13. 함수를 사용하여 코드를 구성하고 반복을 줄입니다.
  14. 라이브러리에서 함수 가져오기 및 함수 명명 규칙.
  15. 다양한 유형의 기능과 그 목적.
  16. 유연한 데이터 저장 옵션으로 사전 소개.
  17. 선형 검색 및 이진 검색을 포함한 검색 알고리즘 개요.
  18. 기본 사례 개념을 포함한 재귀 프로그래밍 및 사용 사례.
  19. 문제 해결 및 계획과 같은 컴퓨터 과학을 위한 소프트 스킬.
  20. 코드 작성을 위한 계획 도구로 유사 코드 사용.
  21. 순서도 및 시간순 계획을 포함하여 코드를 계획하고 작성하는 다양한 방법입니다.
  22. 프로그래밍 언어 및 학습에 사용할 수 있는 리소스에 대한 개요입니다.

이 비디오는 프로그래밍 및 컴퓨터 과학에 대한 포괄적인 소개를 제공하여 시청자에게 코딩 여정을 시작하는 데 필요한 기초를 제공합니다. 또한 주제를 더 자세히 탐색할 수 있는 추가 리소스와 웹 사이트를 제안합니다.

  • 00:00:00 이 비디오는 컴퓨터 과학 및 프로그래밍에 관심이 있지만 어디서부터 시작해야 할지 모르고 코딩에 대한 배경 정보가 거의 또는 전혀 없는 사람들을 위한 비디오의 요점을 다룹니다. 이 비디오는 배우고자 하는 모든 프로그래밍 언어에 적용할 수 있는 컴퓨터 프로그래밍의 기초를 다룹니다.

  • 00:05:00 이 비디오는 프로그래밍의 기초, 통합 개발 환경(IDE)에서 코드를 작성하는 방법, 프로그래밍 문법의 중요성에 대해 설명합니다.

  • 00:10:00 이 비디오는 프로그래밍 및 컴퓨터 과학을 소개하고 구문 및 프로그래밍 규칙의 기본 사항을 다룹니다. 콘솔의 주요 용도는 프로그램에서 텍스트를 출력하는 것입니다.

  • 00:15:00 이 비디오는 산술, 덧셈, 뺄셈, 곱셈, 나눗셈을 포함한 기본 수학과 많은 프로그래밍 언어의 기본 연산자인 모듈러스를 다룹니다. 또한 콘솔에 문자열을 인쇄하는 방법도 다룹니다.

  • 00:20:00 이 비디오는 변수, 유형 및 이름을 포함하여 프로그래밍 및 컴퓨터 과학 개념을 소개합니다. 기본 변수에는 정수, 부울, 부동 소수점 및 복식이 포함됩니다. 문자열 변수는 문자열을 저장합니다. Char 변수는 하나의 문자를 보유합니다. 변수는 쉽게 참조할 수 있는 형식으로 정보를 저장하는 데 필수적입니다.

  • 00:25:00 이 비디오는 변수를 정의하거나 생성할 때 발생하는 일, 변수를 참조하는 방법 및 프로그램을 위해 변수를 조작하는 방법에 대해 설명합니다. 중요한 점은 변수가 특정 값을 저장하는 메모리의 공간일 뿐이며 숫자를 업데이트할 수 있고 해당 위치가 코드 전체에서 일정하게 유지된다는 것입니다.

  • 00:30:00 변수는 프로그래밍하는 동안 정보를 저장할 수 있는 장소입니다. 변수에 대한 명명 규칙은 가독성을 위해 중요합니다. if 문의 조건이 참이면 중괄호 안의 코드가 실행됩니다. if 문과 유사하게 작동하는 elsif 및 eltons라는 두 개의 추가 문이 있습니다. elsif의 조건이 참이면 elsif 다음의 코드가 실행됩니다. 그렇지 않으면 elsif 다음의 코드
    건너뛸 것입니다. elsif의 조건이 참이 아니면 elsif 다음의 코드는 건너뛰고 if 문 다음의 코드가 실행됩니다.

  • 00:35:00 배열은 서로 관련된 변수 목록입니다. 프로그래머가 서로 관련된 정보를 포함하는 많은 변수를 저장하고자 할 때 유용합니다.

  • 00:40:00 프로그래밍 및 컴퓨터 과학 소개 과정에서는 배열, 인덱스, 크기 및 배열 내부의 배열을 다룹니다. 루프도 포함됩니다.

  • 00:45:00 이 비디오는 for, while 및 do while 루프와 같은 다양한 유형의 루프를 다룹니다. 루프에 대한 조건을 설정하는 방법과 무한 루프를 피하는 방법을 설명합니다.

  • 00:50:00 이 비디오는 프로그래밍 중에 발생할 수 있는 세 가지 유형의 오류인 구문 오류, 런타임 오류 및 논리 오류를 다룹니다. 구문 오류는 일반적으로 몇 초 안에 수정할 수 있기 때문에 가장 쉽게 수정할 수 있습니다. 런타임 오류는 논리적으로 타당해 보이지만 컴퓨터가 물리적으로 합리적인 시간 내에 작업을 완료할 방법이 없는 코드의 문으로 인해 발생합니다. 논리 오류는 프로그램이 의도한 대로 작동하지 않는 경우가 많기 때문에 가장 짜증나고 디버그하기 어렵습니다. 코드를 디버깅하려면 점진적으로 테스트하고 구문 및 런타임 오류를 찾아야 합니다.

  • 00:55:00 코드에서 오류가 발생하면 인쇄 문과 콘솔을 사용하여 코드가 어디에서 잘못되었는지 확인하고 중단점을 사용하여 오류의 원인을 추적하고 주석을 사용하여 표시할 수 있습니다. 컴퓨터가 아닌 사용자를 위한 코드입니다. 마지막으로 오류를 방지하기 위한 전략에 대해 설명합니다.

  • 01:00:00 이 비디오에서 강사는 오류 및 기능을 포함하여 프로그래밍 및 컴퓨터 과학의 기초를 다룹니다. 계속해서 인수가 함수에서 작동하는 방식과 함수를 사용하여 코드의 반복을 줄이는 방법을 설명합니다.

  • 01:05:00 이 프로그래밍 및 컴퓨터 과학 소개 비디오에서는 네 가지 유형의 함수, 용도 및 코드에서 함수를 사용하는 방법에 대해 설명합니다. 함수는 전체 프로그램을 거치지 않고도 코드를 구성하고, 시간을 절약하고, 코드를 크게 변경하는 데 유용할 수 있습니다.

  • 01:10:00 이 비디오에서는 프로그래밍 및 컴퓨터 과학의 기초를 소개합니다. 라이브러리에서 함수 가져오기에 대해 설명하고 함수 명명 규칙에 대해 설명합니다. 유형 및 인수 수를 기반으로 함수를 생성하는 규칙도 소개됩니다.

  • 01:15:00 이 비디오에서 강사는 함수, 범위 및 인수 전달을 포함하여 프로그래밍 및 컴퓨터 과학의 기본을 설명합니다. 또한 값을 반환하지 않는 함수를 만드는 방법도 다룹니다.

  • 01:20:00 이 비디오에서 발표자는 배열, 함수 및 사전을 검토합니다. 배열은 함께 저장되는 값 목록과 같으며 함수는 선택한 경로에 따라 변수를 반환합니다. 한 가지 주의해야 할 작은 세부 사항은 다른 유형을 반환하도록 함수를 이미 정의한 경우 한 유형의 변수를 반환할 수 없다는 것입니다. 배열 목록은 목록의 크기가 10개 요소를 초과하면 스스로 커지며 사전은 여러 값을 저장합니다.

  • 01:25:00 컴퓨터는 이해하기 어려울 수 있는 다양한 방식으로 데이터를 저장합니다. 사전은 기존 배열보다 더 유연하고 구성하기 쉬운 데이터 저장소 유형입니다. 검색 알고리즘은 값 목록에서 특정 데이터를 빠르게 찾는 데 사용됩니다.

  • 01:30:00 이 비디오는 검색 알고리즘의 개념과 효율성을 소개합니다. 선형 검색은 정렬되지 않은 목록에 대한 좋은 기본 알고리즘이지만 최악의 시나리오에서는 비효율적입니다. 이진 검색은 목록이 정렬된다는 사실을 이용하여 정렬된 목록에 대한 효율적인 검색 알고리즘입니다.

  • 01:35:00 이진 검색 알고리즘은 정렬된 목록에서 항목을 찾기 위한 선형 검색보다 빠르고 효율적입니다. 재귀 함수는 재귀 프로그래밍 문의 예입니다. 재귀 문의 기본 사례는 모든 재귀 문이 충족해야 하는 명확한 값입니다. n이 1보다 작거나 같지 않으면 재귀 문은 n의 합계를 반환한 다음 재귀 합계 메서드의 반환 값에서 1을 뺀 값을 반환합니다.

  • 01:40:00 이 비디오는 프로그래밍과 컴퓨터 과학을 소개하고 재귀가 유용한 기술인 이유를 설명합니다. 컴퓨터 과학에 필요한 소프트 스킬에는 문제 해결 및 계획이 포함됩니다. 유사 코드는 이러한 계획을 세우는 데 도움이 되는 단순화된 형태의 프로그래밍입니다.

  • 01:45:00 유사 코드는 논문의 개요를 구성하는 것과 유사한 컴퓨터 코드를 계획하는 시각적 방법입니다. 순서도와 프로그램이 시간순으로 수행하기를 원하는 것을 작성하는 것은 두 가지 일반적인 방법입니다.

  • 01:50:00 이 비디오는 코드를 계획하고 작성하는 다양한 방법과 의사 코드의 중요성을 포함하여 프로그래밍 및 컴퓨터 과학 개념을 소개합니다. 또한 다양한 프로그래밍 언어와 그 용도에 대해서도 다룹니다.

  • 01:55:00 이 시리즈에서 저자는 구문과 규칙을 포함하는 프로그래밍의 기초를 다루고 특정 언어를 배우는 방법을 가르칩니다. 또한 시작하는 데 도움이 되는 웹사이트와 리소스를 제공합니다.
Introduction to Programming and Computer Science - Full Course
Introduction to Programming and Computer Science - Full Course
  • 2020.04.21
  • www.youtube.com
In this course, you will learn basics of computer programming and computer science. The concepts you learn apply to any and all programming languages and wil...
 

C++ 프로그래밍 과정 - 초급~고급


C++ 프로그래밍 과정 - 초급~고급

이 과정은 C++ 프로그래밍의 다양한 측면을 다룹니다.

다루는 주제:

  1. C++ 개발 환경 설정: 비디오는 다양한 플랫폼에서 C++ 개발 환경을 설정하는 방법에 대한 개요를 제공합니다. 여기에는 다양한 컴파일러를 설치하고 컴파일러와 C++ 표준 라이브러리를 사용하도록 Visual Studio Code를 구성하는 작업이 포함됩니다. 지침은 Windows, Mac 및 Linux와 같은 플랫폼을 다룹니다.

  2. C++ 프로그래밍의 기본 사항: 비디오는 변수, 데이터 유형, 함수 및 흐름 제어 문과 같은 기본 개념을 다룹니다. 변수를 선언하고, 함수를 정의하고, 루프 및 조건문과 같은 제어 구조를 사용하는 방법을 설명합니다. 비디오는 주석과 같은 개념과 C++의 주요 기능도 소개합니다.

  3. 문자열 조작: 특정 비디오는 C++에서 문자열 작업에 중점을 둡니다. strcmp 및 strcat과 같은 함수를 사용하여 문자열을 비교하고 연결하는 방법을 설명합니다. 비디오는 또한 strcpy 함수를 사용하여 문자열을 복사하는 방법을 보여줍니다.

  4. 배열: 비디오는 C++의 배열 개념을 소개합니다. 배열 선언 및 초기화, 포인터를 사용한 요소 액세스, 문자 배열 인쇄와 같은 주제를 다룹니다.

  5. 동적 메모리 할당 및 포인터: 이 비디오는 C++에서 메모리를 관리하는 방법과 동적 메모리 할당 기술을 사용하여 프로그램에 추가 메모리를 할당하는 방법을 설명합니다. 포인터, 메모리 맵 및 메모리 관리 장치의 개념을 다룹니다. 비디오는 또한 포인터를 안전하게 사용하고, 충돌을 피하고, 동일한 메모리 위치를 가리키는 여러 포인터를 처리하는 방법에 대해서도 설명합니다.

  6. 함수 템플릿 및 람다 함수: 동영상은 C++에서 함수 템플릿을 사용하여 일반 함수를 만드는 방법을 설명합니다. 컴파일러가 전달된 매개변수 유형을 기반으로 함수 정의를 생성하는 방법을 보여줍니다. 또한 동영상은 이름을 지정하지 않고 호출할 수 있는 익명 함수인 람다 함수를 다룹니다. 람다 함수의 구문 및 반환 유형 사양을 설명합니다.

  7. 클래스 및 상속: 이 비디오는 C++의 클래스 개념을 소개하고 클래스 내에서 멤버 변수 및 함수를 정의하는 방법을 설명합니다. 생성자, 소멸자, 액세스 지정자(보호 및 비공개), 다형성을 달성하기 위한 정적 및 동적 바인딩 사용과 같은 주제를 다룹니다. 비디오는 또한 상속을 사용하여 기존 클래스를 기반으로 파생 클래스를 만들고 사용하는 방법을 보여줍니다.

  8. 디버깅 및 오류 처리: 비디오는 C++ 프로그램 디버깅에 대한 지침을 제공합니다. 중단점을 설정하고, 로컬 범위에서 변수를 검사하고, 초기화되지 않은 포인터 및 메모리 누수와 관련된 오류를 처리하는 방법을 설명합니다. 비디오는 객체 슬라이싱 및 기본 클래스 생성자 재정의와 같은 개념도 다룹니다.

  9. 인터페이스 및 다형성: 일부 비디오는 C++의 인터페이스 및 다형성에 중점을 둡니다. 동적 바인딩, 참조 및 재정의 키워드를 사용하여 프로그램에서 다형성 동작을 달성하는 방법을 설명합니다. 비디오에서는 가상 메서드를 최종으로 표시하고 파생 클래스에서 재정의되는 것을 방지하는 데 사용할 수 있는 최종 지정자에 대해서도 설명합니다.

  10. 기타 주제: 다루는 추가 주제에는 기본 매개변수, 자동 출력 스트림 인쇄를 위한 스트림 삽입 가능 인터페이스, 보다 읽기 쉬운 코드를 생성하기 위한 인터페이스 활용이 포함됩니다.

비디오는 초보자가 설치 및 구성에서 개체 지향 프로그래밍, 메모리 관리 및 다형성과 같은 고급 개념에 이르기까지 C++ 프로그래밍을 배우는 데 도움이 되는 단계별 지침, 데모 및 설명을 제공합니다. 이 콘텐츠는 C++ 프로그래밍의 기초를 배우고자 하는 초보자와 기술을 갱신하거나 특정 주제를 깊이 탐구하려는 숙련된 프로그래머 모두에게 적합합니다.

코드: https://github.com/rutura/The-C-20-Masterclass-Source-Code


1장: 도구 설정

  • 00:04:32 C++ 개발 도구
  • 00:11:06 Windows에 C++ 컴파일러 설치
  • 00:24:27 Windows에 VS Code 설치
  • 00:28:00 Windows에서 C++용 Visual Studio Code 구성
  • 00:57:27 Linux에 C++ 컴파일러 설치
  • 01:04:02 Linux에 Visual Studio Code 설치
  • 01:07:40 Linux에서 C++용 Visual Studio Code 구성
  • 01:22:45 MacOS에 C++ 컴파일러 설치
  • 01:28:07 MacOS에 Visual Studio Code 설치
  • 01:30:16 MacOS에서 C++용 Visual Studio Code 구성
  • 01:35:37 온라인 컴파일러


2장: 다이빙


3장: 변수와 데이터 유형


4장: 데이터 작업


5장: 흐름 제어


7장: 배열


8장: 포인터


9장: 참조


10장: 문자 조작과 문자열


11장: 함수


12장: 함수에서 벗어나기


13장: 함수 오버로딩


14장: Lambda 함수


15장: 함수 템플릿


16장: 개념


17장: 클래스


18장: 상속

  • 22:52:43 상속 소개
  • 22:55:59 상속에 대한 첫 번째 시도
  • 23:21:10 보호된 회원
  • 23:32:06 기본 클래스 액세스 지정자: 확대
  • 23:36:49 기본 클래스 액세스 지정자: 데모
  • 24:07:42 개인 상속 종료
  • 24:26:36 범위 내에서 멤버 부활
  • 24:46:59 상속이 있는 기본 Arg 생성자
  • 24:57:37 상속이 있는 사용자 지정 생성자
  • 25:26:56 상속이 있는 복사 생성자
  • 25:51:53 기본 생성자 상속
  • 26:06:00 소멸자와의 상속
  • 26:12:20 상속에서 재사용된 기호


19장: 다형성

  • 26:21:03 다형성 소개
  • 26:26:54 상속을 통한 정적 바인딩
  • 26:55:24 가상 기능을 사용한 다형성(동적 바인딩)
  • 27:14:31 다형성 객체의 크기 및 슬라이싱
  • 27:26:37 컬렉션에 저장된 다형성 개체
  • 27:45:42 재정의
  • 27:52:45 과부하, 재정의 및 숨기기
  • 28:07:35 다양한 수준의 상속 및 다형성
  • 28:33:03 정적 멤버를 사용한 상속 및 다형성
  • 28:49:13 결승
  • 29:07:42 기본 인수가 있는 가상 함수
  • 29:23:18 가상 소멸자
  • 29:35:38 Dynamic_cast<>()
  • 30:08:17 생성자 및 소멸자에서 가상(다형성) 함수를 호출하지 마십시오.
  • 30:24:45 순수 가상 함수 및 추상 클래스
  • 30:43:37 인터페이스로서의 추상 클래스
C++ Programming Course - Beginner to Advanced
C++ Programming Course - Beginner to Advanced
  • 2022.02.17
  • www.youtube.com
Learn modern C++ 20 programming in this comprehensive course.💻 Source code: https://github.com/rutura/The-C-20-Masterclass-Source-Code✏️ Course developed by...
 

초급부터 고급까지의 데이터 구조 - Google 엔지니어의 전체 자습서(1-4부)


초급부터 고급까지의 데이터 구조 - Google 엔지니어의 전체 자습서

간단한 요약:

00:00:00
- 01:00:00 강사가 더 빠르고 강력한 알고리즘을 만드는 데 있어 데이터 구조와 그 중요성에 대해 설명합니다. 이 자습서에서는 Big O 표기법을 다루고 알고리즘에 필요한 시간과 공간을 표준화하는 데 사용되는 방법과 다양한 시간 복잡도에 대한 구체적인 예를 제공합니다. 튜토리얼은 또한 장점과 단점을 포함하여 정적 및 동적 배열의 구현을 다루고 단일 및 이중 연결 목록에 노드를 만들고 삽입하는 방법을 자세히 설명합니다. 마지막으로 튜토리얼은 스택 데이터 구조에 대한 소개를 제공하고 기본 작업을 간략하게 설명합니다.

01:00:00
- 02:00:00 "데이터 구조 초급에서 고급 과정" 자습서의 이 섹션에서는 다양한 데이터 구조와 해당 기능에 대한 포괄적인 내용을 제공합니다. 이 자습서는 스택 및 대기열의 작동 원리, 배열 및 연결 목록을 사용한 구현, 그래프 순회 및 서버 요청 관리를 비롯한 다양한 응용 프로그램에서의 중요성에 대해 청중을 안내합니다. 튜토리얼은 또한 우선순위 큐와 힙을 사용한 구현을 탐색하여 우선순위 큐와 힙의 차이점과 힙 유형을 명확히 합니다. 자습서는 이진 힙에서 요소를 추가하고 제거하는 방법에 대한 단계별 데모를 제공하는 것으로 끝납니다.

02:00:00 - 03:00:00 Google 엔지니어는 바이너리 힙 데이터 구조에서 노드를 제거하는 방법, 우선순위 대기열에서 힙 불변성을 유지하는 방법, 수영 및 이진 힙 데이터 구조의 싱크 노드. 비디오는 또한 데이터 구조가 작동하는 방법을 설명하기 위해 자석에 대한 예와 함께 분리된 세트로 분할된 요소를 추적하고 두 그룹을 병합하는 데 사용되는 합집합 찾기 데이터 구조를 다룹니다. 또한 그래프에서 최소 스패닝 트리를 찾기 위한 Kruskal의 알고리즘을 설명하고 통합 찾기 데이터 구조를 보다 효율적으로 만들기 위해 경로 압축 개념을 도입합니다.

03:00:00 - 04:00:00 이 튜토리얼에서는 union-find 데이터 구조와 find, connected, parent, size 및 unify를 포함하는 메서드부터 시작하여 다양한 데이터 구조를 다룹니다. 그런 다음 자습서는 트리, 뿌리 트리, 이진 트리 및 이진 검색 트리에 대한 정의를 포함하여 트리로 이동합니다. 이 비디오는 이진 검색 트리에서 노드를 삽입하고 제거하는 예와 사전 순서, 순서, 사후 순서 및 수준 순서를 포함한 다양한 순회 알고리즘을 제공하고 Python 및 Java에서 이러한 구성을 구현하는 방법을 설명합니다. 또한 이 비디오는 해시 테이블을 소개하고 해시 함수 및 널리 사용되는 충돌 해결 방법의 중요성에 대해 설명합니다.

04:00:00
- 05:00:00 이 섹션에서는 해시 테이블과 구현의 다양한 측면을 다룹니다. 키를 값에 매핑하는 해시 함수의 중요성과 별도의 연결 및 개방 주소 지정과 같은 기술을 사용하여 해시 충돌을 처리하는 방법에 대해 설명합니다. 이 자습서에서는 해시 테이블의 항목을 삽입, 제거 및 검색하는 방법과 로드 요소 크기 조정 및 관리 방법도 다룹니다. 연사는 무한 루프와 성능 문제를 피하기 위해 적절한 프로빙 기능과 테이블 크기를 선택하는 것이 중요하다고 강조합니다. 자습서 전체에서 개념을 설명하기 위해 실제 예제가 사용됩니다.

05:00:00
- 06:00:00 이 섹션에서는 충돌 해결의 해시 테이블, 이중 해시 및 2차 조사에 대한 포괄적인 개요를 제공합니다. 이 비디오는 해시 테이블 크기 조정 및 확장, 충돌 및 삭제 처리, 2차 조사를 사용한 해시 테이블 구현의 개념을 다룹니다. 비디오는 또한 선형 구성 시간과 로그 시간의 범위 쿼리 및 포인트 업데이트를 지원하는 데이터 구조인 Fenwick 트리를 소개합니다. 이 비디오는 Fenwick 트리를 사용하여 접두사 합계 및 범위 쿼리를 수행하는 방법에 대한 단계별 설명을 제공합니다.

06:00:00 - 07:00:00 비디오 자습서는 빠른 범위 쿼리 및 포인트 업데이트를 위한 Fenwick 트리의 개념, 접미사 배열 및 LCP 배열을 사용하여 고유한 하위 문자열 및 가장 긴 공통 하위 문자열을 찾고 문제를 해결하는 등 다양한 주제를 다룹니다. 슬라이딩 윈도우 기법을 사용하는 가장 긴 공통 하위 문자열 문제입니다. 튜토리얼은 또한 LCP 배열을 사용하여 가장 긴 반복 하위 문자열을 효율적으로 찾는 방법을 설명하고 균형 잡힌 이진 검색 트리, 특히 AVL 트리의 속성과 중요성, 트리 회전을 사용하여 균형을 유지할 수 있는 방법을 탐색합니다. 비디오는 GitHub에서 사용 가능한 Java의 자세한 설명, 예제 및 소스 코드를 제공합니다.

07:00:00 - 08:00:00 이 섹션에서는 다양한 데이터 구조와 구현에 대해 자세히 다룹니다. 비디오는 AVL 트리에 대해 설명하고 삽입 및 제거 방법을 설명하며 AVL 트리에 대한 이진 검색 트리 제거 방법을 보강하는 방법을 설명합니다. 강사는 Java로 재귀적인 AVL 트리 구현을 위한 소스 코드를 제공하여 개인 삽입 방법과 업데이트 및 균형 방법을 설명합니다. 나중에 비디오는 인덱스 값을 키에 할당하는 방법을 설명하고 삽입, 업데이트 및 제거와 같은 유용한 작업을 위한 의사 코드를 제공하면서 인덱스 우선 순위 큐를 자세히 다룹니다. 비디오는 또한 노드 위치 조회를 사용하여 선형 시간 복잡도에서 대수 시간 복잡도로 노드 제거를 개선하는 방법을 자세히 설명합니다.

1 부

  • 00:00:00 연사는 데이터를 효율적으로 구성하는 방법으로서 데이터 구조의 개념과 더 빠르고 강력한 알고리즘을 만드는 데 데이터 구조가 어떻게 필수적인지 소개합니다. 발표자는 당면한 작업에 적절한 데이터 구조를 언제 어떻게 사용해야 하는지 이해하는 것의 중요성과 데이터 구조가 코드를 더 깨끗하고 이해하기 쉽게 만드는 방법에 대해 이야기합니다. 추상 데이터 유형의 개념은 추상 데이터 유형이 인터페이스만 제공하고 데이터 구조를 구현하는 방법에 대한 구체적인 세부 정보는 제공하지 않는 방법에 대한 예와 함께 설명됩니다. 또한 비디오는 데이터 구조의 성능을 이해하기 위해 계산 복잡성에 대해 간략하게 다룹니다.

  • 00:05:00 Big O 표기법의 개념은 가능한 최악의 입력 배열을 기반으로 알고리즘을 실행하는 데 필요한 시간과 공간을 표준화하는 방법으로 도입되었습니다. Big O는 입력이 실제로 커질 때 발생하는 일에만 관심이 있고 big O 표기법에 추가된 상수 값을 제거합니다. 함수 f의 개념도 도입되었으며, Big O of f of n은 단지 n의 세제곱이며, 이는 해당 함수에서 가장 크고 지배적인 항입니다.

  • 00:10:00 Google 엔지니어는 Big O 표기법이 사용되는 방법에 대한 구체적인 예를 제공합니다. 예제는 시간 복잡도(상수 시간, 선형 시간, 2차 시간, 대수 시간)에 따라 분류됩니다. 그는 또한 이진 검색의 예를 사용하여 로그 시간 복잡도를 달성하는 방법에 대한 단계별 분석을 제공합니다. 또한 그는 더 복잡한 알고리즘의 시간 복잡도를 계산하는 방법을 보여주고 알고리즘의 복잡도를 결정하는 규칙을 설명합니다.

  • 00:15:00 발표자가 외부 루프와 내부 루프가 있는 중첩 루프의 복잡성 분석에 대해 논의합니다. 내부 루프에는 일정한 작업량이 있고 외부 루프에는 가변적인 작업량이 있습니다. n^3이 지배항이므로 함수의 큰 O는 O(n^4)입니다. 그런 다음 스피커는 인접한 메모리 청크인 인덱싱 가능한 요소를 포함하는 고정 길이 컨테이너인 정적 배열을 소개합니다. 정적 배열은 일시적으로 개체를 저장하는 것부터 입력 또는 출력 스트림의 정보를 저장하는 것까지 모든 곳에서 사용됩니다. 연사는 어레이의 기본 구조, 어레이에서 수행할 수 있는 일반적인 작업 및 복잡성 분석에 대해 설명합니다.

  • 00:20:00 강사가 하나의 반환 값만 허용하는 언어와 동적 프로그래밍에 대한 해결 방법을 포함하여 프로그래밍에서 배열을 사용하는 방법에 대해 설명합니다. 배열은 인덱싱 가능한 속성으로 인해 액세스 시간이 일정하지만 최악의 시나리오에서는 검색에 최대 선형 시간이 걸릴 수 있다고 설명합니다. 정적 배열에서 삽입, 추가 및 삭제는 가능하지 않지만 동적 배열을 사용하면 추가를 위해 내부 배열의 크기를 조정하면 드물지만 일정한 시간 작업이 발생합니다. 마지막으로 그는 for-each 루프를 사용하여 요소를 반복할 수 있으며 컴퓨터 과학의 배열 인덱싱은 0에서 시작하므로 일부 초보자에게는 혼란스러울 수 있다고 지적합니다.

  • 00:25:00 비디오는 배열의 인덱싱 개념에 대해 설명합니다. 여기에서 대괄호는 인덱싱을 나타내며 동적 배열이 필요에 따라 확장 및 축소되어 정적 배열과 유사한 get set 작업을 허용하는 방법에 대해 설명합니다. 동적 배열을 구현하기 위해 정적 배열을 사용하며, 용량 초과 시 배열 크기를 두 배로 늘리고 모든 요소를 새로운 정적 배열로 복사합니다. 비디오는 또한 T 유형의 제네릭을 지원하고 내부 정적 배열, 길이 및 용량에 대한 인스턴스 변수가 있는 배열 클래스의 소스 코드를 보여줍니다.

  • 00:30:00 강사는 size, inset, clear, add, remove, index of, contains 및 toString을 포함하여 동적 배열에 대한 여러 메서드를 구현합니다. add 메서드는 용량에 도달했을 때 크기를 두 배로 늘려 배열 크기를 조정하는 작업을 포함하고 remove 메서드는 두 개의 인덱스를 사용하여 제거 인덱스를 제외한 배열의 모든 요소를 복사합니다. 또한 강사는 동적 배열에 대한 반복자를 만드는 방법을 시연하고 배열 요소를 반복하기 위해 반복자를 사용하는 이점에 대해 설명합니다. 전반적으로 이 자습서는 동적 배열 구현에 대한 간단하면서도 포괄적인 소개를 제공합니다.

  • 00:35:00 강사는 단일 및 이중 연결 목록에 대해 소개하면서 이들이 데이터를 보유하고 데이터를 포함하는 다른 노드를 가리키는 노드의 순차적 목록이라고 설명합니다. 연결된 목록은 목록, 스택 및 대기열의 구현뿐만 아니라 순환 목록, 해시 테이블 분리 체인, 인접 목록 및 그래프에 사용됩니다. 강사는 연결 목록을 만드는 데 유용한 몇 가지 용어도 다룹니다. 또한 단일 연결 목록과 이중 연결 목록의 장점과 단점에 대해 설명합니다. 단일 연결 목록은 메모리 효율성이 높지만 이전 요소에 액세스할 수 있는 기능이 부족한 반면 이중 연결 목록은 뒤로 순회할 수 있고 노드를 쉽게 제거할 수 있습니다.

  • 00:40:00 강사가 단일 연결 목록과 이중 연결 목록에 노드를 만들고 삽입하는 구현 세부 사항을 설명합니다. 단일 연결 목록에 노드를 삽입하려면 새 포인터가 생성되고 순회자 포인터가 원하는 위치로 이동한 후 새 노드가 생성되고 다른 노드에 연결됩니다. 반면에 이중 연결 리스트는 다음 포인터와 이전 포인터를 모두 가지고 있으며, 새 노드를 삽입할 때 인접 노드의 포인터와 새 노드의 포인터를 모두 업데이트해야 합니다. 단일 연결 목록에서 노드를 제거하려면 두 개의 포인터를 사용하여 원하는 노드로 이동하여 제거한 다음 나중에 메모리 할당을 해제해야 합니다.

  • 00:45:00 발표자는 이중 연결 목록에서 노드를 제거하는 방법을 설명합니다. 이 방법은 마지막 노드에 대한 참조를 수동으로 유지할 필요가 없기 때문에 단일 연결 목록에서 노드를 제거하는 것보다 쉽습니다. 연사는 Java 구현을 보여주고 헤드 또는 테일에서 요소 검색 및 제거와 같은 연결된 목록의 다양한 작업의 복잡성에 대해 논의합니다. 연결된 목록에서 검색하는 것은 최악의 시나리오에서 선형이지만 헤드에 삽입하거나 헤드를 제거하는 것은 일정한 시간입니다. 꼬리에서 제거하는 것은 단일 연결 목록에서는 선형 시간이 걸리지만 이전 노드에 대한 참조가 있기 때문에 이중 연결 목록에서는 그렇지 않습니다.

  • 00:50:00 비디오의 이 섹션에서 발표자는 목록을 지우고, 크기를 가져오고, 비어 있는지 확인하고, 목록의 시작과 끝에 노드를 추가하는 방법으로 이중 연결 목록의 구현을 설명합니다. 그는 또한 목록의 첫 번째 또는 마지막 요소를 엿보고 첫 번째 또는 마지막 요소를 제거하고 목록 중간에서 임의의 노드를 제거하는 방법을 설명합니다. 발표자는 적절한 메모리 할당 해제의 중요성을 강조하고, 사용자가 직접 액세스하지 못하도록 노드 클래스를 비공개로 설정합니다.

  • 00:55:00 비디오의 이 섹션에서 튜터는 노드가 명시적으로 인덱싱되지 않은 경우에도 연결된 목록에서 특정 인덱스의 노드를 제거하는 방법을 설명합니다. Remove 메서드는 연결된 목록에서 임의의 값을 제거하고 null 값을 검색하는 것을 지원합니다. 튜터는 또한 링크드 리스트 내에서 객체의 인덱스를 가져오는 방법의 인덱스와 반복자 방법을 설명합니다. 마지막으로 튜터는 스택 데이터 구조를 소개하고 기본 작업인 푸시 및 팝에 대한 개요를 간략하게 제공합니다. 튜터는 또한 이 시리즈의 다음 비디오에서 스택 구현, 스택을 사용하여 해결되는 문제 및 스택 작업과 관련된 시간 복잡성을 다룰 것이라고 강조합니다.

2 부

  • 01:00:00 이 비디오는 스택 데이터 구조가 어떻게 기능하고 프로그래밍에서 다양한 용도로 사용되는지에 대해 설명합니다. 이 동영상은 스택에서 작업을 추가하고 제거하는 방법에 대한 자세한 예를 제공하고 스택이 텍스트 편집기, 컴파일러 및 지원 재귀에서 사용되는 방법을 설명합니다. 또한 이 비디오는 스택을 사용하여 그래프에서 깊이 우선 검색을 수행하는 방법을 강조하고 브래킷 시퀀스가 스택을 사용하여 유효한지 여부를 결정하는 방법에 대한 멋진 예제 문제를 제시합니다. 마지막으로 비디오에는 스택의 복잡성 분석과 스택이 연결 목록으로 작동하는 방식이 포함되어 있습니다.

  • 01:05:00 Google 엔지니어가 스택 데이터 구조를 사용하여 브래킷 시퀀스가 유효한지 확인하는 방법을 보여줍니다. 그는 알고리즘을 단계별로 진행하면서 왼쪽 대괄호를 스택으로 밀고 오른쪽 대괄호를 만나면 팝하고 일치하는지 확인합니다. 그는 또한 각 못이 스택을 나타내고 디스크가 특정 조건에서만 이동할 수 있는 요소를 나타내기 때문에 하노이 타워 게임이 스택과 어떻게 관련될 수 있는지 설명합니다. 마지막으로 배열 또는 연결 목록을 사용하여 스택을 구현하는 방법에 대해 설명합니다.

  • 01:10:00 단일 연결 목록을 사용하여 스택을 만들고 Java 프로그래밍 언어로 스택 데이터 구조를 간단하게 구현하여 스택에서 요소를 팝하는 방법을 배웁니다. 스택은 스택이 비어 있음을 의미하는 null 노드를 헤드로 지정하여 생성됩니다. 새 요소가 헤드 앞에 삽입되고 요소 팝핑은 헤드 포인터를 다음 노드로 이동하고 마지막 노드 할당을 해제하여 수행됩니다. 데이터 구조의 메모리 누수는 문제를 일으킬 수 있으므로 모든 데이터 구조에서 이를 주의하고 필요할 때 수정하는 것이 중요합니다.

  • 01:15:00 강사가 큐에 넣기 및 큐에서 빼기라는 두 가지 기본 작업으로 실제 대기열을 모델링하는 데 사용되는 선형 데이터 구조인 대기열에 대해 설명합니다. 큐의 앞과 뒤는 각각 요소를 삽입하고 제거하는 데 사용됩니다. 또한 강사는 대기열에 추가하는 것을 대기열에 추가하거나 대기열에서 빼는 것을 폴링 또는 대기열 앞에서 제거하는 등 대기열과 관련된 다양한 용어를 설명합니다. 대기열의 전형적인 예는 영화관이나 레스토랑의 줄이며 대기열은 시퀀스에서 가장 최근의 x개 요소를 추적하는 데 유용할 수 있습니다.

  • 01:20:00 비디오는 대기열이 서버 요청을 관리하고 그래프에서 폭 우선 검색 순회를 수행하는 데 어떻게 사용되는지 설명합니다. 유휴 서버가 한 번에 특정 수의 요청만 처리할 수 있고 초과 요청은 대기열에 들어가는 대기열 요청 개념이 도입되었습니다. 이 비디오는 또한 시작 노드로부터의 거리에 따라 그래프의 노드를 방문하는 너비 우선 검색의 기본 사항을 다룹니다. 비디오는 큐 데이터 구조를 사용하여 n-큐잉 및 큐에서 빼기 요소의 구현을 설명하는 것으로 끝납니다.

  • 01:25:00 이 자습서에서는 대기열을 자세히 살펴보고 배열 또는 다른 종류의 연결 목록(단일 연결 목록 및 이중 연결 목록)을 사용하여 대기열 추상 데이터 유형을 구현할 수 있는 방법을 설명합니다. 이 자습서에서는 대기열의 단일 연결 목록 구현이 작동하는 방법에 대한 예제를 제공하고 Java 프로그래밍 언어를 사용하여 피크, 폴 및 제안과 같은 다양한 대기열 방법의 구현에 대해서도 설명합니다. 튜토리얼은 또한 github.com에서 대기열 구현의 소스 코드에 대한 링크를 공유합니다.

  • 01:30:00 가이드의 이 섹션에서 Google 엔지니어는 데이터 구조, 특히 대기열 및 우선순위 대기열의 개념과 구현에 대해 설명합니다. 그는 각 요소에 특정 우선 순위가 있고 우선 순위가 높은 요소가 먼저 대기열에서 나온다는 유일한 차이점을 제외하고 우선 순위 대기열이 일반 대기열과 유사하게 작동하는 방식에 대해 설명합니다. 그는 또한 우선순위 대기열이 비교 가능한 요소만 지원한다는 점을 강조합니다. 즉, 우선순위 대기열에 삽입하는 데이터는 정렬되어야 합니다. 또한 폴링 작업과 우선순위 대기열에 요소를 추가하는 작업을 설명하는 예제를 제공합니다. 튜토리얼의 다음 섹션에서는 우선 순위 큐에서 수행되는 일반적인 작업, 최소 우선 순위 큐를 최대 우선 순위 큐로 전환, 복잡성 분석 및 우선 순위 큐 구현 방법에 대해 자세히 설명합니다.

  • 01:35:00 Google 엔지니어가 힙을 사용하여 우선순위 대기열을 구현하는 방법을 설명합니다. 힙은 힙 불변성을 만족하는 트리 기반 데이터 구조입니다. 즉, 상위 노드의 값이 모든 노드에 대해 항상 하위 노드의 값보다 크거나 같으므로 두 가지 유형의 힙이 생성됩니다. 최대 힙 그리고 최소 힙. 힙은 우선 순위 대기열에 대한 표준 기본 데이터 구조를 형성하므로 중요합니다. 그런 다음 Google 엔지니어는 구조의 예를 보여주고 청중에게 힙인지 여부를 묻고 모든 힙이 트리여야 하며 힙 불변성을 충족해야 함을 보여줍니다.

  • 01:40:00 Dijkstra의 최단 경로 알고리즘 및 Huffman 인코딩과 같은 알고리즘에서 우선순위 큐의 중요성에 대해 논의합니다. 우선 순위 대기열은 다음으로 가장 좋은 요소나 최악의 요소를 동적으로 가져와야 하는 상황에서 유용합니다. 주요 초점은 바이너리 힙으로 구현된 우선순위 큐와 요소 추가, 요소 제거, 포함 확인 및 최소 우선순위 큐를 최대 우선순위 큐로 변경하는 작업을 포함하는 작업입니다. 나이브 방법의 경우 모든 요소에 대해 선형 스캔이 수행되는 반면 해시 테이블을 사용하여 제거 시간 복잡도를 대수로 개선할 수 있습니다. 이 섹션은 최소 우선 순위 대기열을 최대 우선 순위 대기열로 변환하는 해킹으로 끝납니다.

  • 01:45:00 Google 엔지니어가 부정을 사용하여 우선 순위 대기열에서 역방향 힙을 구현하는 간단한 방법을 설명합니다. 그는 표준 사전 편찬 비교기 및 부정 비교기와 함께 최소 우선 순위 큐를 사용하여 숫자 및 문자열 조작의 예를 제공합니다. 엔지니어는 또한 이진 힙의 개념과 여기에 요소를 추가하는 방법을 소개합니다.

  • 01:50:00 강사가 이진 힙을 사용하여 요소를 우선순위 대기열에 효과적으로 추가하는 방법을 이해하는 데 필요한 중요한 용어와 개념을 설명합니다. 그는 우선순위 큐가 힙이 아니라 우선순위 큐가 가져야 하는 동작을 정의하는 추상 데이터 유형이며 힙은 실제로 해당 동작을 구현할 수 있게 해주는 데이터 구조일 뿐이라고 설명합니다. 또한 이진 힙을 포함한 힙 유형에 대해 설명하고 전체 이진 트리 속성과 배열 구성을 사용하여 이진 힙을 나타내는 방법을 설명합니다.

  • 01:55:00 Google 엔지니어가 노드의 하위 및 상위 노드에 쉽게 액세스하는 기술을 사용하여 바이너리 힙에 노드를 추가하고 힙 불변성을 유지하는 방법을 설명합니다. 그들은 최소 힙에 값을 삽입하는 예를 보여주고 힙 불변성을 만족시키기 위해 노드를 버블링하는 방법을 보여줍니다. 다음 섹션에서 엔지니어는 이진 힙에서 요소 제거를 다루고 우선 순위가 가장 높은 관심 노드인 루트 값 제거의 중요성을 강조합니다.

파트 3

  • 02:00:00 Google 엔지니어가 pull 메서드를 사용하여 바이너리 힙 데이터 구조에서 노드를 제거하는 과정을 설명합니다. 풀링은 루트 노드를 제거할 때와 특정 노드를 제거할 때 두 가지 경우에 수행됩니다. 루트 노드를 제거할 때 노드는 배열의 마지막 노드와 교체되며 버블링 다운을 통해 힙 불변성이 보장됩니다. 특정 노드를 제거할 때 해당 노드를 선형적으로 찾아 힙의 마지막 노드와 스왑한 후 스왑된 노드의 값에 따라 버블링 업 또는 다운을 통해 힙 불변성을 확보한다. 엔지니어는 당기는 데 루트 노드의 경우 로그 시간이 걸리고 특정 노드의 경우 선형 시간이 걸린다고 결론을 내립니다.

  • 02:05:00 튜토리얼의 이 섹션에서 Google 엔지니어는 해시 테이블을 사용하여 개선된 시간 복잡성으로 힙에서 노드를 제거하는 방법을 설명합니다. 제거할 노드의 인덱스를 찾기 위해 선형 스캔을 수행하는 대신 각 노드가 발견된 인덱스에 매핑됩니다. 특정 노드를 제거하려면 해당 인덱스를 조회하여 제거하면 됩니다. 이 비디오는 또한 힙에 있는 여러 값의 문제를 처리하는 방법과 트리에서 값의 위치를 추적하는 방법을 다룹니다. 엔지니어는 힙 불변성을 만족하는 한 제거하는 노드는 중요하지 않다고 설명합니다. 자습서에는 제안된 새 체계로 요소를 추가, 가져오기 및 제거하는 예가 포함되어 있습니다.

  • 02:10:00 발표자가 힙 데이터 구조를 사용하여 우선 순위 대기열에서 힙 불변성을 삽입, 제거 및 유지하는 방법을 설명합니다. 그런 다음 소스 코드를 자세히 살펴보고 우선 순위 대기열을 구현하는 데 필요한 몇 가지 중요한 인스턴스 변수와 생성자를 강조합니다. 그는 우선 순위 대기열에 허용된 요소가 유사한 인터페이스를 구현해야 하며 로깅 및 제거는 요소를 힙에서 요소의 위치를 나타내는 정수 집합에 매핑하는 맵을 사용하여 추적할 수 있다고 설명합니다.

  • 02:15:00 가이드의 이 섹션에서 Google 엔지니어는 용량이 설정된 초기 빈 대기열 만들기, 초기 용량이 정의된 대기열 만들기, 선형 대기열 구성 등 우선순위 대기열을 만드는 다양한 방법에 대해 설명합니다. heapify 작업을 사용하는 시간. 엔지니어는 비어 있음, 지우기, 크기, 엿보기, 폴링 및 포함을 포함하여 우선 순위 대기열의 몇 가지 간단한 방법도 살펴봅니다. 대기열에 요소를 추가하는 방법과 맵에서 요소를 추적하는 것의 중요성에 대한 세부 정보와 함께 add 메서드에 대해서도 설명합니다. 목록 끝에 요소를 추가한 후 수영 기능도 필수 단계로 강조 표시됩니다.

  • 02:20:00 동영상의 이 섹션에서 Google 엔지니어는 바이너리 힙 데이터 구조에서 노드를 수영 및 싱크하는 방법을 설명합니다. 수영 방법은 노드를 부모 노드와 교환하고 노드가 해당 값에 따라 올바른 위치에 올 때까지 위쪽으로 이동하는 것입니다. 싱킹 방법은 비슷하지만 노드를 자식 노드와 비교하고 올바른 위치에 도달할 때까지 더 작은 노드로 교환합니다. 엔지니어는 또한 바이너리 힙에 구현된 교체, 제거 및 제거 추가 방법을 설명합니다. 제거 추가 방법에는 제거된 노드를 힙의 마지막 요소로 교체하고 새 노드를 적절한 위치로 가라앉히거나 수영하는 작업이 포함됩니다.

  • 02:25:00 튜토리얼의 이 섹션에서 강사는 힙 데이터 구조에서 노드를 제거하고 스왑이 힙의 주문하다. 이 섹션에서는 또한 합집합 찾기 데이터 구조와 두 가지 기본 작업인 찾기 및 합집합을 소개합니다. 이 작업은 각각 서로소 집합으로 나누어진 요소를 추적하고 두 그룹을 함께 병합하는 데 사용됩니다.

  • 02:30:00 발표자는 자석의 예를 사용하여 통합 찾기 데이터 구조가 작동하는 방식을 설명합니다. 조합 찾기는 항목 또는 항목 그룹을 효율적으로 병합하여 임의의 색상을 할당합니다. 합집합 찾기 데이터 구조는 최소 스패닝 트리 알고리즘 및 그리드 여과와 같은 다양한 알고리즘에서 사용됩니다. 합집합 찾기는 복잡도가 뛰어나고 구성이 선형 시간인 반면 구성 요소 수 기능은 일정한 시간에 구성 요소 수를 결정할 수 있으므로 주변에 두기에 좋은 데이터 구조입니다.

  • 02:35:00 튜토리얼의 이 섹션에서 Google 엔지니어는 그래프에서 최소 스패닝 트리를 찾기 위한 Kruskal의 알고리즘을 설명합니다. 이 알고리즘은 모든 정점이 하나의 그룹으로 통합될 때까지 에지 가중치를 오름차순으로 정렬한 다음 동일한 그룹에 속하지 않는 노드를 통합합니다. 합집합 찾기 데이터 구조는 그룹을 효율적으로 병합하고 순환을 방지하는 데 사용됩니다. 엔지니어는 예제 그래프를 제공하고 알고리즘의 작동 방식을 설명하기 위해 알고리즘 단계를 안내합니다.

  • 02:40:00 이 튜토리얼에서는 union find 데이터 구조와 그것이 내부적으로 어떻게 작동하는지 설명합니다. 첫 번째 단계는 객체와 0에서 N(포함되지 않음) 범위의 정수 사이에 매핑을 만드는 것입니다. 여기서 N은 요소의 수입니다. 그런 다음 배열이 구성되고 각 인덱스에는 매핑을 통해 수행되는 연결된 개체가 있습니다. 배열 위치의 값은 초기에 배열이 있는 인덱스이며 각 노드는 자신에게 매핑되는 루트 노드입니다. 개체를 그룹으로 통합하라는 지침이 수행됨에 따라 배열의 값이 다른 개체에 매핑되도록 변경되었습니다. 더 작은 구성 요소는 더 큰 구성 요소로 병합되고 루트 노드는 그룹을 통합하는 데 사용됩니다.

  • 02:45:00 화자가 union find 데이터 구조를 사용하여 요소를 다른 그룹으로 병합하는 방법에 대해 이야기합니다. 각 구성 요소의 루트 노드의 부모 노드를 찾아 따라가면 요소가 속한 구성 요소를 확인할 수 있습니다. 두 구성 요소를 통합하기 위해 루트 노드 중 하나가 다른 루트의 부모가 되도록 합니다. 구성 요소의 수는 남아 있는 루트 노드의 수와 같으며 루트 노드의 수는 구성 요소를 통합할 때만 감소합니다. 발표자는 또한 이 구조의 구현은 현재 다음 비디오에서 논의할 최적화인 경로 압축을 사용하지 않고 상각된 시간 복잡도를 가지지 않는다는 점에 주목합니다.

  • 02:50:00 통합 검색 데이터 구조를 보다 효율적으로 만드는 방법을 보여주기 위해 경로 압축의 개념이 도입되었습니다. 경로 압축에는 루트 노드까지의 경로를 따라 모든 노드가 압축되므로 주어진 구성 요소에 대한 루트 노드의 일정한 시간 조회가 가능합니다. 경로 압축을 사용하거나 사용하지 않고 그룹을 통합하는 예는 두 가지 방법을 비교 및 대조하여 경로 압축을 통해 얻은 효율성을 보여줍니다.

  • 02:55:00 강사가 효율적인 데이터 구조를 생성하기 위해 경로 압축과 합집합 찾기가 함께 작동하는 방법에 대해 설명합니다. 그는 경로 압축이 최종 상태에 도달할 때까지 경로를 따라 동적으로 압축하는 방법을 보여줍니다. 유니온 찾기 코드는 부모-자식 관계를 인덱싱하고 추적하기 위한 배열 사용에 대한 설명과 함께 비디오에 표시됩니다. 또한 코드에는 루트 노드를 확인하고 경로를 압축하는 메서드가 포함되어 있습니다. 강사는 주제를 완전히 이해하기 위해 union find에서 다른 비디오를 시청하는 것이 중요하다고 강조합니다.

파트 4

  • 03:00:00 강사는 find, connected, parent, size 및 unify를 포함하여 union-find 데이터 구조와 메소드를 소개합니다. 그는 구조의 루트 노드가 연결된 각 구성 요소의 크기를 포함하는 방법과 통합 방법이 더 작은 그룹을 더 큰 그룹으로 병합하는 방법을 보여줍니다. 트리로 이동하여 강사는 무방향 그래프로 트리에 대한 간략한 개요를 제공하고 이진 트리 및 이진 검색 트리를 소개합니다. 그는 이진 검색 트리, 트리 순회에서 노드를 삽입 및 제거하는 방법과 이후 자습서에서 일반 트리에 적용할 수 있는 방법을 다룰 것을 약속합니다.

  • 03:05:00 여러 정의가 제공되는 트리 개념이 도입되었습니다. 트리는 연결되고 비순환적인 방향이 없는 그래프, n개의 노드와 n-1개의 가장자리가 있는 그래프 또는 두 정점 사이에 경로가 하나만 있는 그래프로 정의할 수 있습니다. 루트 트리도 도입되어 모든 노드가 루트가 될 수 있고 자식 및 부모 노드가 정의됩니다. 루트 노드의 부모는 자신이며 리프 노드는 자식이 없는 노드로 정의됩니다. 트리 내의 삼각형으로 표시되는 하위 트리의 개념도 도입됩니다. 또한 이진 트리의 정의는 모든 노드가 최대 두 개의 자식을 갖는 트리로 설명됩니다.

  • 03:10:00 비디오는 이진 검색 트리 불변성을 충족하는 이진 트리인 이진 검색 트리를 다룹니다. 즉, 왼쪽 하위 트리는 항상 현재 노드보다 작은 값을 갖고 오른쪽 하위 트리는 더 큰 값을 가집니다. 이 비디오는 이진 검색 트리의 다양한 예를 제시하고 시청자가 불변성을 충족하는지 확인하도록 합니다. 이진 검색 트리는 추상 데이터 유형의 많은 구현에 유용하며 균형 이진 검색 트리 및 구문 트리에 사용됩니다. 또한 무작위 데이터에 대한 삽입 및 검색과 같은 작업의 경우 평균적인 경우에 로그 시간 복잡도가 있습니다.

  • 03:15:00 튜토리얼의 이 섹션에서 Google 엔지니어는 이진 검색 트리와 여기에 요소를 삽입하는 방법에 대해 설명합니다. 이진 검색 트리는 평균적으로 로그 동작을 하므로 대부분의 경우 구현하기 쉽고 효율적입니다. 그러나 최악의 경우 이진 트리는 선형 데이터 구조가 될 수 있으므로 이상적이지 않습니다. 이진 검색 트리에 요소를 삽입하려면 요소가 비교 가능해야 하며 왼쪽 하위 트리 아래로 재귀, 오른쪽 하위 트리 아래로 재귀, 중복 값 처리 또는 새 노드 삽입의 네 가지 경우 중 하나가 발생할 수 있습니다. 마지막으로 엔지니어는 애니메이션을 사용하여 이진 검색 트리에 값을 삽입하는 방법을 보여줍니다.

  • 03:20:00 Google 엔지니어는 이진 검색 트리에 값을 삽입하여 선형 구조가 되는 최악의 시나리오를 설명합니다. 이 동작은 노드 검색 또는 값 삭제와 같은 작업 속도를 저하시키므로 바람직하지 않습니다. 그런 다음 엔지니어는 두 단계로 이진 검색 트리에서 요소를 제거하는 방법을 설명합니다. 먼저 제거할 노드를 찾은 다음 이진 검색 트리 불변성을 유지하기 위해 후속 노드로 교체합니다. 이 비디오는 프로세스를 이해하는 데 도움이 되도록 이진 검색 트리에서 값을 검색하는 방법의 예를 제공합니다.

  • 03:25:00 Google 엔지니어는 이진 검색 트리를 처리할 때 제거 단계의 네 가지 사례를 설명합니다. 첫 번째 경우는 제거할 노드가 리프 노드인 경우이고 두 번째 및 세 번째 경우는 왼쪽 또는 오른쪽에 하나의 하위 트리만 있을 때 발생합니다. 네 번째 경우는 노드에 왼쪽 하위 트리와 오른쪽 하위 트리가 모두 있을 때 발생하며 질문은 노드의 후속 노드가 될 하위 트리는 무엇입니까? 답은 계승자는 왼쪽 하위 트리에서 가장 큰 값이거나 오른쪽 하위 트리에서 가장 작은 값일 수 있고 두 가지 가능한 계승자가 있을 수 있다는 것입니다.

  • 03:30:00 과정의 이 섹션에서 강사는 후속 노드의 개념을 사용하여 이진 검색 트리에서 노드를 제거하는 방법을 설명합니다. 후속 노드는 오른쪽 하위 트리에서 가장 작은 노드이거나 왼쪽 하위 트리에서 가장 큰 노드입니다. 강사는 제거 후 트리 균형 재조정의 중요성을 강조하면서 몇 가지 예를 통해 노드 제거를 시연합니다. 이 섹션은 pre-order, in-order, post-order 및 level order를 포함하여 다양한 트리 순회에 대한 개요로 결론을 내립니다.

  • 03:35:00 강사가 이진 트리에서 사전 순서, 순서 및 사후 순회에 대한 개념을 설명합니다. 그는 pre-order가 현재 노드의 값과 왼쪽 및 오른쪽 하위 트리를 인쇄한 다음 pre-order traversal이 이진 트리에서 작동하는 방식에 대한 예를 제공하여 방문하는 노드를 추적하기 위해 호출 스택을 유지한다고 설명합니다. 마찬가지로 그는 왼쪽 하위 트리를 순회하고 값을 인쇄한 다음 오른쪽 하위 트리를 순회하는 순차적 순회가 작동하는 방식을 설명합니다. 강사는 이진 검색 트리를 예로 사용하고 순회 중에 노드를 방문하고 인쇄하는 순서를 강조 표시합니다.

  • 03:40:00 이 자습서에서는 이진 트리에 대한 다양한 순회 알고리즘에 대해 설명합니다. 첫째, 노드의 값을 오름차순으로 인쇄하는 inorder traversal입니다. 다음으로 왼쪽 하위 트리를 순회한 다음 오른쪽 하위 트리를 순회하고 둘 다 순회한 후에만 사후 순회가 노드의 값을 인쇄합니다. 이 튜토리얼에서는 너비 우선 검색과 한 번에 한 레이어씩 노드를 인쇄하는 레벨 순회에 어떻게 사용할 수 있는지 설명합니다. 대기열은 탐색할 노드를 추적하는 데 사용되며 부모 노드를 방문하면 노드가 대기열에 추가됩니다.

  • 03:45:00 비디오의 이 섹션에서 강사는 큐 데이터 구조를 사용하여 너비 우선 검색을 수행하는 방법을 설명합니다. 그는 노드를 탐색하고 순서에 따라 자녀를 대기열에 추가하는 과정을 보여줍니다. 그는 레벨 순서 순회를 수행할 때 스택 대신 대기열을 사용하는 것의 중요성을 강조합니다. 그런 다음 비디오는 클래스 구조, 인스턴스 변수 및 트리에 요소를 추가하는 데 사용되는 메서드를 설명하는 강사와 함께 Java의 이진 검색 트리 구현으로 초점을 이동합니다. 그는 또한 이진 검색 트리로 작업할 때 비교 가능한 유형을 선택하는 것의 중요성을 강조합니다.

  • 03:50:00 강사가 이진 검색 트리에서 노드를 제거하는 과정을 설명합니다. 먼저 노드를 제거하는 공용 방법에 대해 논의하고 노드가 먼저 확인되는 트리 내에 존재하는 경우에만 노드를 제거한다고 설명합니다. 그런 다음 노드를 제거하는 데 사용되는 재귀 방법을 탐구합니다. 이 방법에는 제거할 노드를 찾은 다음 왼쪽 및/또는 오른쪽 하위 트리가 있는지 여부에 따라 노드를 실제로 제거하는 작업이 포함됩니다. 강사는 왼쪽 또는 오른쪽 하위 트리 또는 왼쪽 및 오른쪽 하위 트리가 모두 포함된 세 가지 제거 사례를 설명합니다. 또한 후속 노드를 찾기 위해 트리를 순회하기 위한 도우미 메서드를 제공합니다.

  • 03:55:00 Google 엔지니어가 새 노드 삽입, 특정 요소 검색 및 트리 높이 계산을 포함하여 Python에서 이진 검색 트리를 구현하는 방법을 설명합니다. 그는 또한 트리 순회 순서를 입력으로 사용하고 해당 순서에 대한 반복자를 반환하는 "순회"라는 사용자 지정 메서드를 사용하여 이진 트리 순회를 반복적으로 구현하는 방법을 보여줍니다. 다음으로 그는 해시 테이블을 소개하고 해시 함수의 중요성과 분리 연결 및 개방 주소 지정과 같은 널리 사용되는 충돌 해결 방법에 대해 논의합니다.
Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer
Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer
  • 2019.09.19
  • www.youtube.com
Learn and master the most common data structures in this full course from Google engineer William Fiset. This course teaches data structures to beginners usi...
 

초급부터 고급까지의 데이터 구조 - Google 엔지니어의 전체 자습서(5-8부)


초급부터 고급까지의 데이터 구조 - Google 엔지니어의 전체 자습서

파트 5

  • 04:00:00 강사가 해시 테이블의 개념과 해싱 기술을 사용한 구현을 소개합니다. 해시 테이블은 키에서 값으로의 매핑을 구성하는 데 사용되며 각 키는 고유하고 값과 연결됩니다. 키를 값에 매핑하기 위해 키를 고정된 범위의 정수에 매핑하는 해시 함수가 사용됩니다. 강사는 문자열에 있는 문자의 ASCII 값을 사용하여 문자열과 같은 임의 개체에 대한 해시 함수를 정의하는 방법을 보여줍니다. 해시 테이블은 종종 값의 빈도를 추적하고 키가 해시 가능한 경우 키-값 쌍 간의 매핑을 구성하는 데 사용됩니다. 이 섹션은 세 개의 필드가 있는 사람의 데이터베이스에 대한 해시 함수를 정의하는 미니 챌린지로 끝납니다.

  • 04:05:00 강사가 해시 함수와 해당 속성에 대해 설명합니다. 해시 함수는 임의로 정의되며 무한한 가능성을 가질 수 있습니다. 강사는 해시 테이블을 망가뜨리지 않도록 해시 함수가 결정론적이어야 한다고 강조합니다. 해시 함수의 균일성은 두 개체가 동일한 값으로 해시될 때 발생하는 해시 충돌을 최소화하는 데에도 중요합니다. 강사는 또한 해시 값이 개체 비교 속도를 높일 수 있는 방법을 설명하고 암호화 해시 함수 및 체크섬과 같은 정교한 해시 함수가 해시 테이블에 사용되는 해시 함수 대신 파일에 사용된다고 계속 설명합니다.

  • 04:10:00 튜토리얼은 't' 유형의 키를 해시 가능하게 만드는 요소와 해시 테이블이 균일한 해시 함수를 사용하여 색인을 생성하는 방법을 설명합니다. 해시 함수는 결정론적이어야 하며 변경할 수 없는 문자열 및 정수와 같이 고정되고 일정한 변경 불가능한 키를 적용해야 한다고 언급합니다. 해시 함수를 해시 테이블에 인덱싱하는 방법으로 사용하면 빠른 삽입, 조회 및 제거 시간을 일정한 시간 내에 달성할 수 있습니다. 튜토리얼은 또한 결국 해시 충돌로 이어지는 테이블에 키-값 쌍을 삽입하는 예를 제공하고 충돌을 처리하는 방법을 설명합니다.

  • 04:15:00 발표자가 해시 충돌 해결 기술, 특히 분리 체인에 대해 논의합니다. 별도의 연결은 특정 값으로 해시되는 모든 다른 키-값 쌍을 보유하기 위해 보조 데이터 구조(일반적으로 연결된 목록)를 유지하여 해시 충돌을 처리하는 방법입니다. 해시 테이블의 시간 복잡도는 평균적으로 일정한 시간 삽입, 제거 및 검색을 달성할 수 있지만 균일하지 않은 끔찍한 해시 함수를 사용하면 선형 시간이 될 수 있습니다. 스피커는 또한 분리된 체인이 작동하는 방식과 배열의 각 인덱스에 대해 연결된 목록 데이터 구조를 유지함으로써 해시 테이블 내에서 충돌을 처리하는 데 사용할 수 있는 방법에 대한 예를 제공합니다.

  • 04:20:00 연사는 연결 목록을 사용하여 충돌을 처리하는 별도의 연결이 있는 해시 테이블에서 조회가 작동하는 방식을 설명합니다. 주어진 키로 화자는 키를 해시하고 해시 테이블의 해당 버킷에서 연결 목록을 검색하여 해당 값을 찾는 방법을 시연합니다. 발표자는 또한 일정한 시간 복잡성 유지, 키-값 쌍 제거, 해시 테이블의 버킷 처리를 위한 다양한 데이터 구조 사용에 대한 몇 가지 일반적인 질문에 답합니다. 마지막으로 화자는 별도의 연결을 사용하여 해시 테이블 구현을 위한 일부 소스 코드를 공유합니다.

  • 04:25:00 비디오는 해시 테이블과 Java에서 구현되는 방법을 소개합니다. 제네릭, 해시 코드 및 equals 메서드에 중점을 두고 항목 클래스에 대해 먼저 설명합니다. 해시 테이블 자체는 최대 로드 팩터, 용량, 임계값 및 연결된 목록의 배열인 테이블 자체와 같은 인스턴스 변수를 포함하여 설명됩니다. size, empty, clear, contains key 및 hash와 같은 다양한 메서드도 구현 세부 정보와 함께 설명합니다. 마지막으로 해시 테이블에서 조회를 위해 해시 값을 인덱스로 변환하는 데 사용되는 정규화 인덱스 방법에 대해 설명합니다.

  • 04:30:00 비디오의 이 섹션에서 발표자는 삽입, 가져오기, 제거, 검색 항목 및 테이블 크기 조정과 같은 해시 테이블 구현과 관련된 방법을 설명합니다. insert 메서드는 해시 테이블에 새 항목을 추가하거나 기존 항목을 업데이트하는 반면 get은 특정 키와 연결된 값을 검색합니다. 제거는 해시 테이블에서 키 값 쌍을 제거하고 검색 항목 방법은 주어진 버킷 인덱스에서 항목을 찾는 데 도움이 됩니다. 마지막으로 resize table은 용량을 2배로 늘려 테이블의 크기를 조정한 후 새로운 용량으로 새로운 테이블을 생성하고 기존 테이블에서 새로운 테이블로 데이터를 이동한 후 기존 데이터를 제거한다.

  • 04:35:00 강사가 해시 테이블의 충돌을 해결하기 위한 개방형 주소 지정 기술에 대해 설명합니다. 이 방법은 보조 데이터 구조 대신 테이블 자체에 키-값 쌍을 저장합니다. 따라서 해시 테이블의 크기와 요소 수를 관리하는 것이 중요합니다. 테이블 크기에 대한 항목의 비율인 로드 팩터는 기하급수적으로 나빠지는 것을 방지하기 위해 특정 임계값 이하로 유지되어야 합니다. 새 키를 삽입할 때 해시 함수는 키의 원래 위치를 제공하지만 충돌이 있는 경우 프로빙 시퀀스를 사용하여 다음 열린 지점을 찾습니다. 선형 프로빙 시퀀스는 선택할 수 있는 많은 시퀀스 중 하나입니다.

  • 04:40:00 강사는 원래 해시 인덱스가 이미 사용 중일 때 항목이 다른 위치에 배치되는 해시 테이블의 충돌을 처리하는 방법인 개방 주소 지정에 대해 설명합니다. Linear probing, quadratic probing, double hashing, pseudo random number generator probing function과 같은 다양한 probing function이 도입되었으며, 각각 다른 수학 공식을 사용하여 다음 슬롯을 찾습니다. 그러나 개방 주소 지정의 주요 어려움은 무한 루프로 이어질 수 있는 해시 테이블의 크기보다 짧은 주기를 생성할 가능성이 있다는 것입니다. 이 문제를 설명하기 위해 실용적인 예가 제공됩니다.

  • 04:45:00 발표자가 해시 테이블에 사용되는 프로빙 함수의 주기 문제와 이를 처리하는 방법에 대해 논의합니다. 발표자는 선형 조사, 2차 조사 및 이중 해싱과 같은 기술이 모두 이 주기 문제의 대상이지만 요소를 삽입하는 동안 무한 루프에 빠지지 않도록 길이의 주기를 생성하도록 재정의할 수 있다고 설명합니다. 선형 탐색에서 상수 "b"는 쓸모 없는 것으로 간주되며 화자는 일부 선형 함수가 "n" 차수의 전체 주기를 생성하지 못할 수 있다고 언급합니다. 이 문제에 대한 해결책은 상수 "a"와 테이블 크기 "n"이 서로 상대적으로 소수인지 확인하여 정확히 "n"의 주기를 생성하는 프로빙 함수를 선택하는 것입니다.

  • 04:50:00 강사가 해시 테이블과 작동 방식(프로빙 기능, 테이블 크기, 부하 계수 및 크기 조정 포함)에 대해 설명합니다. 그는 해시 테이블에 키 값 쌍을 삽입하고 해시 충돌로 인한 무한 루프를 피하는 방법을 보여주기 위해 선형 조사를 사용한 예제를 사용합니다. 그러나 그는 프로빙 함수와 테이블 크기의 선택이 성능에 상당한 영향을 미칠 수 있으며 테이블 크기와의 최대 공통 분모가 하나가 아닌 함수를 선택하면 사이클이 발생하여 문제가 발생할 수 있다고 지적합니다.

  • 04:55:00 충돌 없이 키-값 쌍을 해시 테이블에 삽입하기 위해 프로빙 기능을 사용하는 예를 봅니다. 충돌이 발생하면 프로빙 기능은 주기가 발생하지 않도록 빈 지점을 찾을 때까지 계속 프로빙합니다. 요소 수가 테이블의 임계값을 초과하면 N의 GCD를 유지하면서 테이블 크기가 두 배가 됩니다. 그런 다음 이전 요소는 동일한 프로빙 기능을 유지하면서 새 테이블 크기를 사용하여 새 테이블에 배치됩니다. 마지막으로 새로운 키-값 쌍이 삽입되고 자리가 비어 있으면 문제가 없습니다.

6부

  • 05:00:00 강사가 개방 주소 지정에서 충돌을 해결하는 데 사용되는 해시 테이블의 2차 조사에 대해 설명합니다. 여기에는 무작위 조사 함수 선택을 사용하여 이차 공식에 따라 조사하는 것이 포함됩니다. 강사는 모든 2차 함수가 무한 루프에 빠지는 순서 순환을 생성하지 않기 때문에 실행 가능한 것은 아니지만 대부분의 무작위로 선택된 2차 함수는 순환을 생성하게 된다고 설명합니다. 강사는 프로빙 함수를 선택하는 가장 인기 있는 세 가지 방법을 제공하고 두 번째 방법에 중점을 둡니다. 여기서 p(x)는 x의 제곱 더하기 x를 2로 나눈 값이고 테이블 크기는 2의 거듭제곱입니다.

  • 05:05:00 발표자는 이중 해싱 및 개방형 주소 지정 충돌 해결 기술을 사용하여 요소를 해시 테이블에 삽입하는 프로세스에 대해 논의합니다. 그들은 2의 거듭제곱인 테이블 크기의 중요성과 프로빙을 사용하여 충돌을 처리하는 방법을 설명합니다. 연사는 또한 로드 팩터가 특정 임계값을 초과할 때 테이블 크기를 조정하는 프로세스를 시연합니다. 계속해서 기존 요소를 업데이트하는 방법과 새 요소를 테이블에 삽입하는 방법에 대해 논의합니다.

  • 05:10:00 강사가 해시 테이블의 충돌을 처리하는 데 사용되는 프로빙 방법인 이중 해싱의 개념을 설명합니다. 이중 해싱 체계에는 보조 해시 함수라고 하는 다른 해시 함수의 상수 배수에 따라 조사하는 작업이 포함됩니다. 강사는 이중 해싱의 경우 발생할 수 있는 무한 순환의 문제에 대해 경고하고 테이블 크기에 대한 소수를 선택하고 델타라는 값을 구성하는 등의 해결 전략을 제공합니다. 또한 동일한 기본 빌딩 블록을 사용하여 다양한 데이터 유형에 대한 새로운 해시 함수를 생성하는 체계적인 방법에 대해서도 설명합니다.

  • 05:15:00 발표자가 해시 함수의 개념과 이를 결합하여 새로운 해시 함수를 만드는 방법을 설명합니다. 그들은 범용 해시 함수의 사용을 언급하고 이중 해싱을 사용하는 예를 제공합니다. 해시 충돌 및 업데이트를 처리하면서 키-값 쌍을 해시 테이블에 삽입하는 프로세스에 대해 논의합니다. 이 예에서는 테이블 크기 7과 최대 부하 계수 0.75를 사용하고 해싱 함수는 정수와 실수를 빌딩 블록으로 사용합니다.

  • 05:20:00 이 자습서는 테이블 크기를 두 배로 늘리고 해당 값 위의 다음 소수를 찾고 새 테이블을 할당하고 이전 요소를 새 테이블. 이 자습서에서는 원래 테이블이 5개의 요소를 삽입한 후 최대 임계값에 도달하고 테이블 크기가 새 크기인 17로 조정되는 예를 제공합니다. 또한 이 자습서는 개방 주소 지정을 사용하여 해시 테이블에서 요소를 제거할 때 발생하는 문제를 탐색합니다. 체계, 삽입 및 삭제 작업 중 충돌 방지의 중요성.

  • 05:25:00 비디오는 해시 테이블에서 해시 충돌 및 삭제를 처리하는 방법을 설명합니다. 단순히 버킷의 내용을 지우는 순진한 삭제 방법은 해시 테이블에서 요소를 제대로 찾는 기능에 영향을 미치기 때문에 결함이 있는 것으로 나타났습니다. 대신 동영상에서는 삭제된 요소 대신 삭제 표시라는 고유한 마커를 배치할 것을 권장합니다. 이 마커는 나중에 새로운 키-값 쌍으로 대체되거나 해시 테이블 크기 조정 중에 제거될 수 있습니다. 이 비디오는 해시 테이블 조회 중에 삭제 표시가 사용되는 방법을 보여주기 위해 2차 조사를 사용하는 예를 제공합니다.

  • 05:30:00 Google 엔지니어는 충돌 해결 방식으로 열린 두 개의 주소를 사용하는 해시 테이블에 대한 개요를 제공합니다. 엔지니어는 검색할 때 많은 삭제 표시를 치는 것을 방지하기 위해 키 값 쌍을 재배치하는 지연 삭제 또는 지연 재배치를 논의합니다. 엔지니어는 항목에 대한 래퍼 클래스가 있는 하나의 배열을 보유하지 않고 배열 내부에 키 값 쌍을 직접 저장하는 것과 관련된 2차 탐색을 사용하는 해시 테이블에 대한 코드의 워크스루를 제공합니다. 엔지니어는 사용자가 매개 변수 없이 초기화할 수 있는 해시 테이블의 생성자와 기본 상수를 탐색합니다.

  • 05:35:00 과정의 이 섹션에서 강사는 2차 조사를 사용하여 해시 테이블의 구현을 설명합니다. 이 방법에는 임계값 계산, 인덱스 정규화 및 테이블 초기화가 포함됩니다. 키-값 쌍이 해시 테이블에 삽입되거나 키가 이미 있는 경우 업데이트되는 삽입 방법 정보가 제공됩니다. 강사는 삽입 방법으로 이동하기 전에 키 수, 해시 테이블의 빈 수표 및 덧셈에 대해서도 설명합니다. 키 삽입을 위한 do-while 루프에 대해 자세히 설명합니다.

  • 05:40:00 강사가 해시 테이블 구현의 contains key, has key, get 및 remove 메소드를 설명합니다. contains key 및 has key 메소드는 contains 플래그에 대해 true 또는 false 값을 리턴하는 get 메소드를 호출하여 키가 해시 테이블에 존재하는지 여부를 확인합니다. get 메소드는 해시 인덱스를 찾고 키를 찾습니다. 키가 존재하면 포함 플래그가 true로 설정되고 값이 반환됩니다. 제거 방법은 더 간단합니다. 먼저 해시 테이블에서 키를 찾은 다음 감소시키고 삭제 표시를 그 자리에 덤프합니다. resize table 메소드는 테이블 크기를 늘리기 위해 새로운 요소를 삽입할 때 호출되며, 이때 새로운 테이블이 할당되고 현재 테이블이 새로운 테이블로 교체되어 insert 메소드를 호출합니다.

  • 05:45:00 이진 인덱스 트리라고도 하는 Fenwick 트리는 배열에서 범위 쿼리를 효율적으로 계산하고 포인트 업데이트를 수행하기 위한 데이터 구조로 도입되었습니다. Fenwick 트리 뒤에 있는 동기는 배열의 범위를 계산할 때 선형 쿼리의 비효율성입니다. 배열에 대한 모든 접두사 합계를 계산하면 범위 쿼리를 일정한 시간 내에 계산할 수 있습니다. 그러나 배열을 업데이트하려면 모든 접두사 합계를 다시 계산해야 하므로 프로세스가 비효율적입니다. Fenwick 트리는 선형 구성 시간과 로그 시간의 범위 쿼리 및 포인트 업데이트를 지원하여 이 문제를 해결하기 위해 만들어졌습니다. Fenwick 트리는 각 셀이 최하위 비트 값에 따라 다른 셀 범위를 담당하도록 함으로써 작동합니다.

  • 05:50:00 비디오의 이 섹션에서 강사는 Fenwick 트리와 범위 쿼리에 대해 작동하는 방식에 대해 설명합니다. 그는 1부터 시작하는 배열과 각 숫자의 이진 표현이 포함된 다이어그램을 보여줍니다. 다이어그램은 자신을 담당하는 최하위 비트와 2, 4, 8 또는 16 셀 범위를 담당하는 다른 모든 셀을 보여줍니다. 범위 쿼리를 수행하기 위해 강사는 0에 도달할 때까지 하향 계단식으로 특정 인덱스까지 접두사 합계를 계산하는 방법을 설명합니다. 그는 특정 인덱스에 대한 접두사 합계를 찾는 방법과 주어진 두 인덱스 사이의 간격 합계를 수행하는 방법을 보여줍니다.

  • 05:55:00 캐스케이딩 다운 효과를 사용하여 접두사 합계를 계산하는 방법과 Fenwick 트리를 사용하여 범위 쿼리 알고리즘을 수행하는 방법을 배웁니다. 접두사 합계 계산에는 지정된 인덱스에서 시작하여 0에 도달할 때까지 값에서 최하위 비트를 뺀 다음 각 뺄셈 동안 모든 값을 더하는 작업이 포함됩니다. 범위 쿼리 알고리즘은 범위 쿼리에 대한 접두사 합계 간의 차이를 취하는 Fenwick 트리를 사용합니다. 이 알고리즘은 비트 조작이 필요하며 더 빠른 계산을 위해 깔끔하고 작은 알고리즘을 제공합니다. 비디오 작성자는 트리가 어떻게 설정되고 작업이 수행되는지에 대한 자세한 내용은 이전 Fenwick 트리 범위 쿼리 비디오를 확인할 것을 권장합니다.

7부

  • 06:00:00 Google 엔지니어가 포인트 업데이트 및 Fenwick 트리 구성의 개념을 설명합니다. 포인트 업데이트에는 특정 인덱스에서 트리에 값을 추가하고 해당 책임 범위를 담당하는 셀을 찾는 작업이 포함됩니다. 한편, Fenwick 트리의 선형 구성에는 트리 전체에 값을 전파하여 값을 담당하는 직접 셀을 업데이트하는 작업이 포함되며, 그 결과 완전히 작동하는 Fenwick 트리가 생성됩니다. 전파 프로세스는 특정 값을 담당하는 부모를 업데이트하는 계단식 아이디어에 의존합니다.

  • 06:05:00 튜토리얼의 이 섹션에서는 Fenwick 트리의 개념에 대해 자세히 설명합니다. Fenwick 트리는 값 배열에 대한 범위 쿼리 및 포인트 업데이트를 신속하게 수행하는 데 사용되는 데이터 구조입니다. 데이터 구조는 각 셀이 자신의 값을 부모에게 전파하는 일을 담당하는 이진 인덱싱 유형을 활용합니다. 원래 배열을 복제하고 새 트리 구조의 각 요소에 대한 부모 셀을 계산하여 값 배열을 Fenwick 트리로 바꾸는 것과 관련된 Fenwick 트리의 구성 알고리즘에 대해서도 설명합니다. Java의 Fenwick 트리 구현에 대한 소스 코드가 표시되며 GitHub 리포지토리에서 사용할 수 있습니다.

  • 06:10:00 강사가 Fenwick 트리 클래스와 다양한 생성자를 만드는 방법을 설명합니다. 그는 또한 1에서 i까지 모두 포함하는 접두사 합계를 계산할 수 있는 접두사 합계를 설명합니다. 비디오는 또한 포인트 업데이트에서 추가하는 방법과 인덱스를 k와 동일하게 설정하는 추가 방법을 다룹니다. 강사는 문자열 처리에 매우 유용한 이진 조작 및 접미사 배열 데이터 구조 사용의 중요성을 강조합니다.

  • 06:15:00 "낙타"라는 단어에 대한 접미사 배열을 구성하는 예와 함께 접미사 및 접미사 배열의 개념이 소개됩니다. 접미사 배열은 접미사 자체를 저장하지 않고 정렬된 접미사의 압축 표현을 허용하는 정렬된 색인의 배열로, 접미사 트리에 대한 공간 효율적인 대안이 됩니다. 두 개의 정렬된 접미사가 서로 공통으로 가지는 문자 수를 저장하는 LCP(Longest Common Prefix) 배열도 접미사 배열과 관련된 중요한 정보로 소개되며, 주어진 조건에 대해 LCP 배열을 구성하는 예와 함께 제공됩니다. 끈.

  • 06:20:00 비디오는 많은 공간을 필요로 하는 순진한 알고리즘보다 더 효율적인 방식으로 고유 하위 문자열을 찾고 계산하는 접미사 배열 및 LCP 배열의 적용에 대해 설명합니다. LCP 어레이 내부에 저장된 정보를 이용하여 신속할 뿐만 아니라 공간 효율적인 솔루션을 제공합니다. LCP 배열은 원래 문자열의 인접한 두 접미사 사이의 공유 문자 수를 나타냅니다. LCP 값을 검사하여 어떤 하위 문자열이 반복되는지 확인하고 이를 제거하여 모든 고유 하위 문자열을 효과적으로 계산할 수 있습니다.

  • 06:25:00 화자는 주어진 n개 문자열 중 적어도 k개 간에 공유되는 가장 긴 공통 하위 문자열을 찾는 문제에 대해 논의합니다. 이 문제를 해결하는 한 가지 접근 방식은 동적 프로그래밍이지만 빠르게 다루기 어려워질 수 있습니다. 더 나은 접근 방식은 선형 시간에서 솔루션을 찾을 수 있는 접미사 배열을 사용하는 것입니다. 이를 위해 화자는 먼저 모든 문자열을 더 큰 문자열로 연결하고 각 문자열 사이에 접미사가 섞이지 않도록 고유한 센티넬 값을 추가한다고 설명합니다. 그런 다음 이 연결된 문자열에 대한 접미사 배열을 구성하여 가장 큰 LCP 값을 공유하는 서로 다른 색상의 K 문자열을 찾아 K 문자열의 가장 긴 공통 하위 문자열을 찾을 수 있습니다.

  • 06:30:00 비디오 자습서는 슬라이딩 윈도우 기술을 사용하여 문자열 내에서 k개의 서로 다른 색상의 가장 긴 공통 하위 문자열을 찾는 방법에 대해 설명합니다. 접근 방식은 서로 다른 색상의 k 접미사를 포함하도록 창 크기를 조정하고 해당 범위 내에서 최소 LCP 값을 쿼리하는 것입니다. 최소 범위 쿼리는 선형 솔루션 또는 세그먼트 트리와 같은 최소 범위 쿼리 데이터 구조를 사용하여 해결할 수 있습니다. 자습서는 또한 해시 테이블을 사용하여 창의 색상을 추적할 것을 권장합니다. 슬라이딩 윈도우는 누락된 색상을 캡처하기 위해 아래로 확장되고 기준이 충족되면 축소됩니다.

  • 06:35:00 비디오의 이 섹션에서 강사는 접미사 배열을 사용하여 가장 긴 공통 하위 문자열 문제를 해결하는 예를 보여줍니다. 창 LCP 및 창 LCS 값은 현재 창에 대한 가장 긴 공통 접두사 및 가장 긴 공통 하위 문자열 값을 추적하는 데 도움이 되는 반면, LCS 길이 및 LCS 세트는 지금까지 최상의 값을 추적합니다. 이 예에서는 가장 긴 공통 하위 문자열을 공유하기 위해 4개의 문자열과 4개의 풀 중 최소 2개의 문자열을 사용합니다. 강사는 가장 긴 공통 하위 문자열을 검색하는 동안 창을 확장 및 축소하는 방법을 시연하고 시청자가 캐스트 웹 사이트에서 확인해야 할 과제를 암시하고 GitHub에서 알고리즘 구현에 대한 링크를 제공합니다.

  • 06:40:00 동영상은 슬라이딩 윈도우 기법을 사용하여 가장 긴 공통 하위 문자열 문제를 해결하는 과정을 설명합니다. 창 크기를 확장 및 축소하고 가장 긴 공통 접두사 배열을 사용하여 공통 하위 문자열을 식별함으로써 알고리즘은 선형 시간 복잡도를 가진 솔루션을 찾습니다. 그런 다음 비디오는 가장 긴 반복 하위 문자열 문제를 소개하고 N 제곱 시간과 많은 메모리가 필요한 순진한 접근 방식과 비교하여 가장 긴 공통 접두사 배열을 사용하여 주어진 문자열에서 가장 긴 반복 하위 문자열을 효율적으로 찾는 방법을 설명합니다.

  • 06:45:00 Google 엔지니어가 접미사 배열과 LCP 배열을 사용하여 가장 길게 반복되는 하위 문자열을 찾는 방법을 알려줍니다. 색인의 LCP 값은 인접한 두 접미사 사이에서 가장 긴 공통 접두사 길이를 제공합니다. LCP 배열의 최대값은 가장 긴 반복 하위 문자열의 길이를 제공합니다. 동률인 경우 가능한 가장 긴 값을 모두 찾아야 합니다. 그런 다음 엔지니어는 균형 잡힌 이진 검색 트리의 중요성과 그들이 보유하고 있는 노드 수에 비례하여 로그 높이를 유지하기 위해 자체 조정된다는 점에서 기존 이진 검색 트리와 어떻게 다른지 설명하여 삽입 및 삭제를 매우 빠르게 만듭니다. 이를 달성하기 위한 핵심 개념은 트리 회전이며 비디오에서 자세히 설명합니다.

  • 06:50:00 균형 이진 검색 트리에서 트리 불변 및 트리 회전의 개념을 설명합니다. 트리 불변은 모든 작업이 끝날 때 트리에 적용되는 규칙으로 일련의 트리 회전을 적용하여 보장됩니다. 트리 회전은 노드의 순서와 배치가 유지되는 경우 이진 검색 트리 불변성을 깨지 않고 트리의 노드 주위를 이동하는 합법적인 변환입니다. 오른쪽 회전 프로세스에 대해 자세히 설명하고 노드가 자식 노드와 부모 노드 모두에 대한 참조를 가질 때 포인터를 업데이트하는 단계에 대해 설명합니다.

  • 06:55:00 비디오 자습서는 트리 회전 기술을 사용하여 AVL 트리에 노드를 삽입하는 방법과 AVL 트리의 균형을 유지하는 속성을 설명하는 데 중점을 둡니다. 먼저 AVL 트리가 무엇인지, 균형 이진 검색 트리의 첫 번째 유형으로서의 의미에 대해 설명합니다. 그런 다음 비디오는 오른쪽 하위 트리와 왼쪽 하위 트리의 높이 차이인 균형 요소를 소개합니다. 동영상은 AVL 트리의 균형을 유지하기 위해 모든 노드의 균형 요소가 마이너스 1, 0 또는 플러스 1이어야 함을 강조합니다. 그런 다음 자습서는 이것이 사실이 아닌 경우 트리 회전으로 해결할 수 있는 경우를 처리하는 방법에 대해 논의합니다.

파트 8

  • 07:00:00 강사가 AVL 트리에서 왼쪽이 무거운 트리의 균형을 맞추는 데 필요한 네 가지 고유한 회전 사례를 설명합니다. 강사는 또한 AVL 트리에 노드를 삽입하기 위한 의사 코드를 제공하고 업데이트 및 균형 방법을 설명합니다. 업데이트 방법은 노드의 높이와 균형 요소를 계산하는 반면, 균형 방법은 노드의 균형 요소가 AVL 트리 속성을 위반하는지 확인하고 적절한 회전을 결정하여 트리 균형을 재조정합니다. 좌-우, 우-좌의 경우도 1회전 후 좌-좌, 우-우의 경우로 축소되어 설명된다.

  • 07:05:00 비디오는 일반 이진 검색 트리에서 요소를 제거하는 것과 매우 유사한 avielle 트리에서 요소를 제거하는 방법을 설명합니다. 제거 프로세스는 요소 찾기 및 이진 검색 트리 불변성을 유지하기 위한 후속 노드로 교체의 두 단계로 나눌 수 있습니다. 노드 찾기에는 일치 항목이 발견되거나 검색이 트리 끝에 도달할 때까지 대상 요소를 트리의 노드와 비교하는 작업이 포함됩니다. 교체 프로세스는 제거할 노드가 리프 노드인지 또는 왼쪽 또는 오른쪽 하위 트리만 있는지 여부에 따라 달라집니다. 후자의 두 경우에는 후속 노드가 직속 자식이 됩니다.

  • 07:10:00 강사가 이진 검색 트리에서 노드를 제거하는 방법을 설명하고 삭제의 세 가지 사례에 대한 예를 제공합니다. 첫 번째 경우는 제거할 노드에 자식이 없는 경우이고, 두 번째 경우는 자식이 한 개 있는 경우이고, 마지막 경우는 두 개의 자식이 있는 경우입니다. 또한 강사는 트리가 균형을 유지하고 균형 요소와 높이 값이 최신 상태로 유지되도록 코드 두 줄을 추가하여 AVL 트리에 대한 이진 검색 트리 제거 방법을 보강하는 방법을 설명합니다. 마지막으로 강사는 시청자가 AVL 트리의 소스 코드와 작동 중인 AVL 트리의 라이브 데모를 찾을 수 있는 GitHub 리포지토리에 대한 링크를 제공합니다.

  • 07:15:00 강사가 Java에서 재귀 AVL 트리 구현을 위한 소스 코드에 대해 설명합니다. AVL 트리는 제네릭 형식 인수를 허용하고 비교 가능해야 하는 노드 내부에 값을 저장합니다. 노드 하위 클래스는 왼쪽 및 오른쪽 자식 포인터와 노드의 높이 및 균형 요소를 저장합니다. 트리는 트리 프린터 인터페이스를 사용하여 터미널에 표시할 수 있으며 size, is empty, set contains 등의 공용 메서드가 코드에 제공됩니다. 삽입 방법도 기본 사례와 비교 값을 사용하여 설명하여 삽입 성공 여부를 판단합니다.

  • 07:20:00 왼쪽 또는 오른쪽 하위 트리에 새 노드를 삽입하고 이에 따라 노드의 균형 요소 및 높이를 업데이트하는 AVL 트리의 개인 삽입 방법에 대해 설명합니다. update 메서드는 노드의 높이와 균형 요소를 업데이트하고 균형 메서드는 트리의 균형을 유지하기 위해 필요한 회전 메서드를 호출합니다. 왼쪽-왼쪽, 왼쪽-오른쪽, 오른쪽-오른쪽, 오른쪽-왼쪽의 경우에 대해 설명하고 회전 후 업데이트 방법의 순서는 AVL 트리가 균형을 유지하는 데 중요하다고 강조합니다.

  • 07:25:00 강사가 이진 검색 트리 데이터 구조의 제거 방법에 대해 설명합니다. 그는 요소를 제거하기 위해 메소드가 먼저 요소가 트리에 존재하는지 확인한 다음 개인 remove 메소드를 호출한다고 설명합니다. 강사는 제거 중에 발생할 수 있는 네 가지 사례를 설명하고 두 하위 트리가 있는 노드를 제거하려고 시도할 때 제거할 하위 트리를 결정하는 경험적 방법을 제안합니다. 마지막으로 그는 시청자에게 노드 제거에도 불구하고 트리가 균형을 유지하도록 제거 메서드의 콜백에서 업데이트 및 재조정 메서드를 호출하도록 상기시킵니다.

  • 07:30:00 Google 엔지니어가 키-값 쌍의 빠른 업데이트 및 삭제를 지원하는 데이터 구조인 색인화된 우선순위 대기열을 소개합니다. 우선 순위 대기열의 값을 빠르게 조회하고 동적으로 변경할 수 있는 문제를 해결합니다. 이는 환자가 최우선 순위로 먼저 서비스를 받아야 하는 병원 대기실과 같은 다양한 상황에서 유용할 수 있습니다. 엔지니어는 우선 순위가 다른 환자의 예와 인덱싱된 우선 순위 대기열이 우선 순위를 즉석에서 업데이트하는 데 도움이 되는 방법을 제공합니다.

  • 07:35:00 비디오는 특정 항목에 대한 우선 순위의 효율적인 동적 업데이트를 허용하는 인덱스 우선 순위 대기열에 대해 설명합니다. 인덱스 우선 순위 큐를 사용하는 첫 번째 단계는 인덱스 값을 모든 키에 할당하여 양방향 매핑을 만드는 것입니다. 이 매핑은 양방향이어야 하며 양방향 해시 테이블을 사용하면 가능합니다. 키에 인덱스 값을 사용하는 이유는 종종 우선 순위 큐가 구현되는 방식인 배열에 대한 인덱스를 활성화하기 위함입니다.

  • 07:40:00 발표자는 인덱스 우선 순위 큐의 개념을 소개하고 키 삭제, 키와 관련된 값 가져오기, 우선 순위 큐에 키가 있는지 확인, 키 인덱스 가져오기 등 지원해야 하는 작업을 설명합니다. 가장 작은 값, 인덱스에서 가장 작은 값 가져오기, 키 값 쌍 삽입 및 업데이트 가능, 특수 업데이트 작업은 키를 늘리거나 줄입니다. 이러한 모든 작업의 시간 복잡도는 일정하거나 대수적입니다. 발표자는 또한 바이너리 힙이 작동하는 방식, 우선 순위 대기열에 새 값을 삽입하는 방법 및 항목을 제거하는 방법을 포함하여 기존의 우선 순위 대기열 데이터 구조에 대한 복습을 제공합니다.

  • 07:45:00 바이너리 힙이 있는 인덱싱된 우선 순위 큐를 어떻게 구현합니까? 첫 번째 단계는 각 항목에 고유한 인덱스 값과 인덱스 우선 순위 큐의 초기 값을 할당하는 것입니다. 그런 다음 최소 인덱스 우선 순위 큐를 사용하여 가장 낮은 값을 먼저 정렬하고 위치 맵을 유지하여 주어진 키 인덱스에 대한 힙의 노드 인덱스를 알려줍니다. 또한 주어진 노드의 키를 찾기 위해 역 조회 테이블을 유지 관리합니다. 이 정보를 통해 병원에서 환자의 우선순위를 지정하거나 식당에서 고객의 우선순위를 지정하는 것과 같은 다양한 애플리케이션에 대한 우선순위 대기열에 효율적으로 액세스하고 조작할 수 있습니다.

  • 07:50:00 비디오는 인덱스 우선 순위 대기열에서 키-값 쌍 삽입, 업데이트 및 제거와 같은 유용한 작업을 수행하는 방법에 대해 설명합니다. 삽입 프로세스는 일반 우선 순위 큐와 유사하지만 위치 및 역 맵을 업데이트하는 단계가 추가되었습니다. 비디오는 삽입 프로세스에 대한 의사 코드를 제공하여 힙 불변성이 충족될 때까지 노드가 힙을 통해 위로 이동하는 방법을 보여줍니다. 스와핑 프로세스에는 위치 및 역 맵 업데이트가 포함되지만 노드 인덱스가 아닌 키 인덱스로 인덱싱된 값 배열은 업데이트되지 않습니다. 비디오는 또한 키-값 쌍 폴링 및 제거에 대해 간략하게 다룹니다. 여기에는 삽입과 유사한 단계가 포함되지만 그 반대입니다.

  • 07:55:00 이 비디오는 현재 상수 시간인 노드 위치 조회를 사용하여 색인화된 우선순위 대기열에서 요소를 제거하는 것이 선형 시간 복잡도에서 로그 시간 복잡도로 개선되는 방법을 설명합니다. 비디오는 노드 교체, 제거 전 키 값 쌍 저장, 제거된 노드 정리, 교체된 노드를 위 또는 아래로 이동하여 힙 불변량 복원을 포함하여 노드를 제거하는 방법에 대한 단계별 예제를 제공합니다. 또한 키-값 쌍을 제거하기 위한 의사 코드가 제공되어 짧은 5줄 구현과 3줄 정리 프로세스를 보여줍니다. 마지막으로 동영상은 동기화 방법과 작동 방식, 제거와 유사하지만 로그 시간이 걸리는 키-값 쌍 업데이트를 설명합니다.
Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer
Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer
  • 2019.09.19
  • www.youtube.com
Learn and master the most common data structures in this full course from Google engineer William Fiset. This course teaches data structures to beginners usi...
 

C 프로그래밍 풀 코스 무료


C 프로그래밍 풀 코스 무료

00:00:00 - 01:00:00 "C 프로그래밍 풀 코스 무료" 동영상은 시청자에게 gcc 컴파일러 설치 방법, IDE 설정 방법, C 코드 작성 방법을 알려줍니다. 이 비디오는 printf 문, 주석, 이스케이프 시퀀스 및 형식 지정자를 사용하여 다양한 데이터 유형을 표시하는 방법을 포함하여 C 프로그래밍의 기본 사항을 다룹니다. 강사는 변수를 생성하고 초기화하는 방법과 산술 및 증가/감소 연산자를 사용하는 방법을 설명합니다. 또한 비디오는 scanf를 사용하여 사용자 입력을 수락하고 printf를 사용하여 출력 형식을 지정하는 방법을 다룹니다. 강사는 또한 C의 유용한 수학 함수와 반지름에 대한 사용자 입력을 기반으로 원주와 원의 면적을 계산하는 데 사용하는 방법에 대해 설명합니다. 영상은 C가 어려운 언어지만 끈기와 노력을 기울이면 누구나 배울 수 있다는 점을 강조한다.

01:00:00 - 02:00:00 "C 프로그래밍 풀 코스 무료" YouTube 동영상은 C 언어로 프로그래밍 개념을 가르칩니다. 이 비디오 섹션에서 강사는 if/else 문, switch 문, 논리 연산자, 함수 및 루프와 같은 주제를 다룹니다. 강사는 프로그램이 조건에 따라 선택을 할 수 있도록 하는 조건문과 switch 문이 else if 문보다 더 효율적인 버전인 방법을 설명합니다. 또한 강사는 온도 단위를 변환하는 방법, 간단한 계산기 프로그램을 만드는 방법, 논리 연산자를 사용하여 프로그램 효율성을 향상시키는 방법 및 코드 중복을 최소화하는 함수를 사용하는 방법을 심도 있게 보여줍니다. 마지막으로 강사는 삼항 연산자와 문자열 함수가 프로그램 생성을 어떻게 도울 수 있는지 설명합니다.

02:00:00 - 03:00:00 이 C 프로그래밍 전체 과정은 while과 do-while 루프의 차이점을 설명하고 중첩 루프를 사용하여 도형을 만드는 방법을 시작으로 광범위한 주제를 다룹니다. 그런 다음 비디오는 2차원 배열로 이동하고 2D 그리드 또는 데이터 테이블을 만드는 방법에 앞서 배열의 기본 사항과 1차원 배열의 요소를 반복하고 표시하는 방법을 다룹니다. 그런 다음 강사는 변수 교환의 개념, 버블 정렬과 같은 정렬 알고리즘을 소개하고 C의 구조체 및 typedef에 대해 가르치고 난수 생성 및 숫자 추측 게임을 만듭니다. 전반적으로 이 과정은 C 프로그래밍 개념에 대한 포괄적이고 심층적인 이해를 제공합니다.

03:00:00 - 04:00:00 "C 프로그래밍 풀 코스 무료"라는 제목의 이 YouTube 비디오는 숫자 추측 및 퀴즈 게임과 같은 게임 만들기를 포함하여 포괄적인 C 프로그래밍 주제를 다루고 메모리, 포인터, 비트 연산자 및 파일 I/O. 또한 이 비디오는 중첩된 for 루프와 if 문을 사용하여 승자를 확인하고 컴퓨터 플레이어를 위해 무작위 이동을 생성하는 Tic Tac Toe 게임을 만드는 방법을 설명합니다. 강사는 비디오 전반에 걸쳐 명확한 설명과 데모를 제공하므로 C 프로그래밍 학습에 관심이 있는 모든 사람에게 유용한 리소스가 됩니다.

04:00:00 - 04:00:00 강사는 계속해서 C로 Tic-Tac-Toe 게임을 만들고 이동을 배치하고 승자를 인쇄하는 기능을 만들기 전에 선택한 자리가 비어 있는지 확인하는 검사를 추가합니다. 그런 다음 do while 루프를 사용하여 "다시 재생" 옵션을 추가하고 각 루프의 시작 부분에서 변수를 재설정합니다. 코드는 사용자가 사용할 수 있도록 댓글 섹션에서 공유됩니다.

1 부

  • 00:00:00 저자는 고급 소프트웨어와 저급 하드웨어 사이의 다리 역할을 하는 중간 수준 언어인 C 학습의 중요성을 설명합니다. C는 1970년대에 탄생했으며 컴파일러, 운영 체제, 데이터베이스 작성 등 다양한 용도로 널리 사용됩니다. YouTuber는 또한 C 코드 작성을 시작하기 위해 IDE를 설정하고 필요한 확장 및 컴파일러를 설치하는 방법에 대한 지침을 제공합니다. 하지만 유튜버는 C가 초보자에게는 어려운 언어지만 끈기와 노력을 기울이면 누구나 배울 수 있다고 경고한다.

  • 00:05:00 이 비디오는 Mac 또는 Linux 시스템에 gcc를 설치하는 방법과 환경 변수 아래에 gcc 컴파일러 경로를 추가하는 방법을 설명합니다. gcc가 설치되면 비디오는 VS Code가 프로그램을 컴파일하는 방법을 알 수 있도록 기본 빌드 작업을 구성하는 방법을 설명합니다. 비디오는 글꼴 크기를 늘리고 자동 저장을 활성화하여 나중에 골칫거리를 저장하도록 권장합니다. 이 비디오는 또한 C 프로그래밍의 기본 사항을 살펴보고 해시태그 포함, 표준 io 입력/출력용 std 및 print f 괄호와 같은 중요한 기능을 포함합니다. 마지막으로 비디오는 오류를 확인하기 위해 main 함수 끝에 return 0 문을 추가해야 할 필요성을 강조합니다.

  • 00:10:00 C 프로그래밍 자습서의 이 섹션에서 강사는 printf 문을 사용하여 텍스트를 출력하는 방법과 이스케이프 시퀀스를 사용하여 새 줄 문자를 추가하는 방법을 보여줍니다. 또한 명령 프롬프트를 사용하여 C 파일을 컴파일하고 실행하는 방법을 시연하고 C 프로그래밍에서 주석의 목적을 설명합니다. 이 비디오는 C 프로그래밍의 기초를 다루고 초보자에게 유용한 팁을 제공합니다.

  • 00:15:00 C 프로그래밍에 대한 비디오 자습서의 이 섹션에서 강사는 코드에서 주석 및 이스케이프 시퀀스를 사용하는 방법을 설명합니다. 주석은 코드를 읽는 모든 사람을 위한 설명, 설명 또는 메모에 사용됩니다. 한 줄 주석은 두 개의 슬래시를 사용하여 작성하고 여러 줄 주석은 슬래시 뒤에 별표를 사용하고 별표 뒤에 슬래시를 사용하여 작성합니다. 반면 이스케이프 시퀀스는 텍스트 또는 문자열 내에서 작업을 지정하는 문자 조합입니다. 가장 일반적으로 사용되는 이스케이프 시퀀스는 텍스트 문자열 내에 새 줄과 탭을 만드는 데 사용됩니다. 강사는 이스케이프 시퀀스를 사용하여 따옴표, 작은따옴표 및 백슬래시를 표시하는 방법도 보여줍니다.

  • 00:20:00 비디오는 C 프로그래밍에서 변수를 생성하는 방법을 설명합니다. 먼저 변수를 선언하고 이 변수에 이름과 데이터 유형을 할당해야 합니다. 다음으로 이 변수를 어떤 값과 동일하게 설정하여 초기화해야 합니다. 비디오는 정수, 부동 소수점, 문자 및 배열을 포함한 다양한 데이터 유형의 예를 제공합니다. 동영상에서는 printf 문과 형식 지정자를 사용하여 변수 내에 저장된 값을 표시하는 방법도 설명합니다.

  • 00:25:00 비디오의 이 섹션에서 강사는 형식 지정자를 사용하여 C 프로그래밍에서 다양한 데이터 유형을 표시하는 방법을 설명합니다. 예를 들어 문자 배열을 표시하려면 퍼센트 기호 다음에 문자열에 's'를 사용합니다. 문자 변수를 표시하려면 퍼센트 c를 사용하고 부동 소수점 숫자를 표시하려면 퍼센트 f를 사용하십시오. 강사는 또한 chars, floats, integers 및 doubles와 같은 데이터 유형에 대해 설명합니다. doubles는 64비트의 정밀도를 가지며 floats보다 더 많은 유효 숫자를 유지합니다. 참 또는 거짓을 저장하고 1바이트의 메모리를 사용하는 부울도 도입되었습니다. 다양한 형식 지정자와 이를 사용자 지정하는 방법은 다음 비디오에서 설명합니다.

  • 00:30:00 부울은 퍼센트 d를 사용하여 표시될 수 있으며 1은 참을 나타내고 0은 거짓을 나타냅니다. 문자는 음수 128에서 양수 127 범위 내의 정수를 저장할 수 있으며 해당 표현은 퍼센트 d 또는 퍼센트 c 형식 지정자를 사용하여 표시됩니다. 부호 없는 변수는 문자와 short 모두에 대해 양수 범위를 두 배로 늘리므로 char는 0에서 255 사이의 숫자를 저장할 수 있는 반면 short는 부호 있는 경우 음수 32,768에서 양수 32,767까지, 부호 없는 경우 0에서 65,535까지의 숫자를 저장할 수 있습니다. 단축형으로 short in 대신 short를 사용할 수 있음을 배웁니다. 정수는 양수 또는 음수 값이 될 수 있는 정수를 저장할 수 있습니다.

  • 00:35:00 다양한 데이터 유형에 대해 서로 다른 형식 지정자가 있으며 잘못된 형식 지정자를 사용하면 오류나 예기치 않은 출력이 발생할 수 있다는 점에 유의하는 것이 중요합니다. C 프로그래밍에는 많은 데이터 유형이 있지만 이 과정에서는 주로 문자, 문자 배열, 복식, 부울 및 정수에 중점을 둘 것입니다.

  • 00:40:00 강사가 지정된 방식으로 표시할 데이터 유형을 정의하고 형식을 지정하는 형식 지정자에 대해 설명합니다. 출력을 표시하기 위한 최소 필드 너비를 설정하기 위해 백분율 기호 뒤에 숫자를 추가하여 특정 공간을 할당합니다. 백분율 기호 왼쪽 뒤에 음수 기호를 사용하면 데이터가 정렬됩니다. 비디오는 또한 프로그램이 실행되는 동안 변경할 수 없는 고정 값인 상수에 대해서도 다룹니다. 변수를 상수로 변환하려면 데이터 유형 앞에 키워드 'const'를 붙이고 상수 이름을 지정할 때 대문자 규칙을 따릅니다. 덧셈, 뺄셈, 곱셈 및 나눗셈과 같은 산술 연산자도 다루어집니다. 여기서 정수로 나누기는 소수 부분을 자를 수 있으므로 결과를 저장하기 위해 float 또는 double을 사용해야 하며 나머지 연산자는 나눗셈의 나머지를 구하는 데 사용됩니다.

  • 00:45:00 강사는 모듈러스를 포함하여 C 프로그래밍의 산술 연산자를 설명합니다. 모듈러스는 2로 나눌 때 나머지를 찾아 숫자가 짝수인지 홀수인지 빠르게 결정하는 데 사용할 수 있습니다. 비디오는 또한 증가 및 감소 연산자를 다룹니다. 변수를 1씩 늘리거나 줄이는 데 사용할 수 있으며 사용자가 변수에 대해 산술 연산을 수행하고 바로 가기를 사용하여 결과를 동일한 변수에 다시 할당할 수 있는 확장된 할당 연산자를 사용할 수 있습니다. 마지막으로 강사는 scanf 함수와 C 프로그래밍 프롬프트를 사용하여 사용자 입력을 수락하는 방법에 대한 개요를 제공합니다.

  • 00:50:00 강사가 사용 중인 변수 유형에 적합한 형식 지정자와 함께 scanf 함수를 사용하여 C 프로그래밍에서 사용자 입력을 수락하는 방법을 설명합니다. 이 섹션에서는 공백이 있는 문자열을 허용하려면 공백 때문에 scanf 대신 fgets 함수가 필요하다는 주의 사항과 함께 정수 및 문자열 허용에 대해 다룹니다. 강사는 fgets를 사용하여 개행 문자를 제거한 후 문자열의 형식을 지정하는 방법도 설명합니다. 이 섹션은 가독성을 향상시키기 위한 printf 문 형식의 개요로 끝납니다.

  • 00:55:00 비디오의 이 섹션에서 강사는 수학 헤더 파일을 포함할 때 C에서 유용한 수학 함수에 대해 설명합니다. 제곱근, 거듭제곱, 반올림(천정 및 바닥 사용), 절대값, 로그 및 삼각법 함수를 코드에서 사용하는 방법에 대한 예제와 함께 설명합니다. 나중에 강사는 반지름에 대한 사용자 입력을 기반으로 원주를 계산하는 프로그램을 작성하는 방법을 보여주고 더 나아가 파이 곱하기 반지름 제곱 공식을 사용하여 원의 면적을 계산하고 표시합니다.

2 부

  • 01:00:00 동영상의 이 섹션에서 강사는 C 프로그래밍 언어를 사용하여 원의 둘레와 면적을 계산하는 방법과 제곱근 함수를 사용해야 하는 직각 삼각형의 빗변을 찾는 방법을 시연합니다. math.h 헤더 파일에서. 강사는 또한 조건을 확인하고 그에 따라 코드를 실행하여 프로그램에 선택 사항을 추가하는 데 사용되는 if 문과 if 문을 소개합니다. 그는 크거나 같음 조건과 이중 등호 비교 연산자를 사용하는 방법과 조건이 거짓일 때 다른 출력을 제공하기 위해 else 문을 사용하는 방법을 보여줍니다.

  • 01:05:00 비디오는 C 프로그래밍의 if 문과 else if 문에 대해 설명합니다. 이러한 명령문을 통해 프로그램은 조건이 참인지 확인하고 참인 경우 코드의 특정 하위 집합을 수행하며, 그렇지 않은 경우 프로그램은 다음 블록으로 이동하여 다른 조건을 확인합니다. 모든 조건이 거짓으로 평가되면 프로그램은 else 블록 내에 있는 코드를 실행합니다. 또한 비디오에서는 여러 else if 문을 사용하는 것보다 더 효율적인 대안으로 switch 문을 사용하는 방법을 소개합니다. switch 문을 사용하면 case 키워드를 사용하여 값이 여러 경우에 대해 동일한지 테스트할 수 있습니다. 마지막으로 비디오는 일치하는 사례가 발견되면 switch 문에서 각 사례 뒤에 break 문을 추가하여 스위치를 종료하는 것의 중요성을 강조합니다.

  • 01:10:00 비디오의 이 섹션에서 강사는 온도를 섭씨에서 화씨로 또는 그 반대로 변환하는 프로그램을 만드는 방법을 가르칩니다. 프로그램은 측정 단위(섭씨 또는 화씨)와 현재 온도에 대한 사용자 입력을 수락한 다음 if/else 문과 적절한 공식을 사용하여 변환을 수행합니다. 강사는 to_upper 함수를 사용하여 대소문자 구분을 처리하는 방법과 scanf를 사용하여 부동 소수점 숫자를 허용하는 방법도 보여줍니다. 프로그램은 사용자에게 입력을 요청하고 변환된 온도를 표시합니다.

  • 01:15:00 과정의 이 섹션에서 강사는 사용자 입력을 기반으로 온도 단위(섭씨에서 화씨로 또는 그 반대로)를 변환하는 프로그램을 C로 만드는 방법을 시연합니다. 이 프로그램은 사용자에게 온도와 측정 단위를 입력하라는 메시지를 표시하고 scanf를 사용하여 입력을 수락한 다음 일련의 조건문을 사용하여 필요에 따라 온도 단위를 변환합니다. 강사는 형식 지정자 사용, 섭씨에서 화씨로의 변환 공식 및 프로그램 흐름에서 다양한 유형의 작업을 처리하는 switch 문에 대해 설명합니다. 최종 프로그램은 다운로드 및 검토를 위해 댓글 섹션에 게시됩니다.

  • 01:20:00 비디오의 이 섹션에서 강사는 더하기, 빼기, 곱하기 및 나누기를 수행할 수 있는 C로 간단한 계산기 프로그램을 만드는 방법을 시연합니다. 프로그램은 switch 문을 사용하여 사용자 입력에 따라 수행할 작업을 결정합니다. 또한 논리 연산자, 특히 일련의 조건이 참인지 확인하는 "and" 연산자의 사용에 대해 설명합니다. 강사는 논리 연산자를 사용하여 온도가 특정 범위에 속하는지 확인하는 방법과 조건 확인에 부울 변수를 포함하는 방법에 대한 예를 제공합니다.

  • 01:25:00 or 논리 연산자와 not 논리 연산자에 대해 설명합니다. or 논리 연산자는 하나 이상의 조건이 참인지 확인하는 반면 not 논리 연산자는 조건의 상태를 반전시킵니다. 또는 연산자를 사용하여 세로 막대를 더 추가하여 여러 조건을 확인할 수 있습니다. 반면에 not 연산자는 프로그램 작성 방식에 대해 더 많은 옵션을 제공할 수 있습니다. 이러한 논리 연산자는 보다 복잡한 조건을 생성하고 프로그램의 효율성을 향상시키는 데 도움이 될 수 있습니다.

  • 01:30:00 강사는 동일한 코드를 반복하지 않도록 C 프로그래밍에서 함수를 사용하는 방법을 가르칩니다. 새 함수를 생성하면 코드를 한 번 작성한 다음 해당 함수를 호출하는 것만으로 여러 번 재사용할 수 있습니다. 그런 다음 강사는 문자 배열과 정수를 함수의 인수로 전달하는 예를 들어 인수와 매개변수에 대해 설명합니다. 전달되는 변수를 함수가 인식하도록 하려면 함수 선언에서 매개 변수를 선언해야 합니다. 일치하는 매개변수 세트가 없으면 함수를 호출할 수 없습니다.

  • 01:35:00 스크립트의 이 섹션에서 화자는 return 문의 개념과 호출 함수에 값을 다시 반환하는 방법을 설명합니다. 하나의 인수를 받아들이고 해당 인수를 제곱한 다음 결과를 호출 함수에 다시 반환하는 "square"라는 함수의 예를 보여줍니다. 또한 값을 할당하거나 반환할 때 if-else 문을 사용하는 지름길인 삼항 연산자의 구문에 대해 설명하고 두 정수의 최대값을 찾는 데 사용할 수 있는 방법의 예를 보여줍니다. 발표자는 또한 함수 선언 내에서 return 키워드를 사용할 때 데이터 유형 일치의 중요성을 강조합니다.

  • 01:40:00 값을 할당하거나 반환할 때 if-else 문을 사용하기 위한 지름길 역할을 하는 삼항 연산자에 대해 배웁니다. 연산자는 조건, 물음표, 조건이 참인 경우 반환할 값, 콜론, 조건이 거짓인 경우 반환하는 값으로 구성됩니다. 또한 함수에 대한 호출이 올바른 수와 인수 유형으로 이루어지도록 하는 함수 프로토타입에 대해서도 설명합니다. 기본 함수 앞에 함수 프로토타입을 추가하면 예기치 않은 동작을 방지하고 잘못된 인수가 사용되는 경우 오류가 발생할 수 있습니다.

  • 01:45:00 동영상의 이 섹션에서 강사는 C로 된 함수 프로토타입과 그 장점을 설명하고 문자열 길이, 문자열 비교, 문자열 하위, 문자열 등 C로 이미 작성된 몇 가지 유용한 문자열 함수를 소개합니다. 어퍼, 스트링캣. 강사는 이러한 각 기능의 작동 방식에 대한 예를 제공하고 해당 출력을 시연합니다. 문자열 비교 함수는 비교되는 두 문자열이 같으면 0을 반환하고 그렇지 않으면 다른 숫자를 반환합니다. 강사는 이러한 문자열 함수를 사용하는 코드 조각을 포함하여 섹션을 끝냅니다.

  • 01:50:00 강사는 제한된 횟수만큼 코드 섹션을 반복하는 for 루프를 다룹니다. 그는 for 루프를 사용하여 1부터 10까지 세는 예제를 제공하고 for 루프에 필요한 세 가지 명령문(인덱스 선언, 코드 반복 기간에 대한 조건 정의, 인덱스를 증가 또는 감소시키는 방법)을 설명합니다. 그는 또한 인덱스를 증가 및 감소시키는 다양한 방법을 보여줍니다. 그런 다음 강사는 특정 조건이 참인 한 코드 섹션을 무제한으로 반복하는 while 루프를 설명하고 사용자가 유효한 응답을 입력할 때까지 사용자에게 이름을 묻는 메시지를 표시하는 예를 제공합니다.

  • 01:55:00 비디오의 이 섹션에서 강사는 C 프로그래밍에서 사용자 입력을 위해 scanf 대신 fgets를 사용하는 방법을 보여줍니다. 그런 다음 while 루프를 사용하여 사용자에게 이름을 입력하라는 메시지를 표시하고 이름을 제대로 입력하지 않은 경우 소리를 지릅니다. 그런 다음 강사는 do-while 루프에 대한 논의로 전환하고 사용자가 0보다 크면 원하는 만큼의 숫자를 입력하도록 요청하고 해당 숫자의 합계를 계산하는 프로그램의 데모를 제공합니다.

파트 3

  • 02:00:00 C프로그래밍 풀코스 본편에서는 강사가 C언어에서 while문과 do-while문의 차이점을 설명한다. true인 경우 do-while 루프는 코드를 한 번 실행한 다음 조건을 확인하여 계속하기 전에 참인지 확인합니다. 강사는 예제 코드로 이를 시연하고 while 루프를 do-while 루프로 수정하는 방법을 설명합니다. 또한 이 섹션에서는 다른 루프 내부의 루프인 중첩 루프를 다루고 행, 열 및 기호에 대한 사용자 입력 값을 기반으로 기호 사각형을 인쇄하기 위해 중첩 루프를 사용하는 예를 보여줍니다.

  • 02:05:00 비디오의 이 섹션에서 강사는 C의 중첩 루프를 사용하여 사각형 모양을 만드는 방법을 보여줍니다. 강사는 사용자가 사각형의 기호와 행 및 열 수를 입력하도록 허용하지만 방법도 보여줍니다. 적절한 사용자 입력을 허용하기 위해 입력 버퍼를 지웁니다. 강사는 또한 C 루프 컨텍스트 내에서 continue 및 break 문의 차이점을 설명합니다. 여기서 continue는 나머지 코드 섹션을 건너뛰고 루프의 다음 반복을 강제 실행하는 반면 break는 루프를 완전히 종료합니다. 마지막으로 강사는 배열의 개념을 동일한 데이터 유형의 많은 값을 저장할 수 있는 데이터 구조로 정의하고 변수를 배열로 변환하는 방법을 보여줍니다.

  • 02:10:00 비디오는 C 프로그래밍 언어의 배열 개념을 다룹니다. 배열은 동일한 데이터 유형의 여러 값을 고정 크기 데이터 구조에 저장하는 방법입니다. 비디오는 인덱스 번호를 사용하여 배열을 초기화하고 특정 요소에 액세스하는 방법을 보여줍니다. 즉시 값을 할당하거나 프로그램에서 나중에 값을 할당하는 등 배열을 초기화하는 다양한 방법이 있습니다. 비디오는 또한 for 루프를 사용하여 배열의 모든 요소를 반복하고 인쇄하는 방법을 설명합니다.

  • 02:15:00 비디오는 C 프로그래밍에서 배열의 요소를 반복하고 표시하는 방법을 다룹니다. 강사는 배열의 요소에 액세스하는 데 사용되는 for 루프의 인덱스와 함께 for 루프 및 printf 문을 사용하는 방법을 보여줍니다. 또한 요소가 배열에서 추가되거나 제거되면 자동으로 업데이트되는 크기 연산자를 사용하여 루프가 반복되어야 하는 횟수를 계산하는 방법도 보여줍니다. 그런 다음 강사는 각 요소 자체가 배열인 배열인 2차원 배열을 만들기 위해 이동합니다. 간단한 그리드 또는 데이터 테이블의 예를 사용하여 2차원 배열을 초기화하고 구성하는 방법을 보여줍니다.

  • 02:20:00 강사가 C 프로그래밍에서 값을 선언하고 2차원 배열에 할당하는 방법을 설명합니다. 또한 중첩 루프와 형식 지정자 "d"를 사용하여 2차원 배열의 요소를 표시하는 방법도 설명합니다. 그런 다음 강사는 연산자의 크기와 행 중 하나의 크기를 사용하고 첫 번째 행에서 찾은 요소 중 하나의 크기를 사용하여 2차원 배열의 행과 열 수를 계산하는 방법을 보여줍니다. 이 섹션은 2D 배열에 추가된 새 행으로 코드를 테스트하는 방법에 대한 예제로 끝납니다.

  • 02:25:00 비디오의 이 섹션에서 강사는 각 요소가 전체 배열인 배열의 배열인 C에서 2차원 배열을 만드는 방법을 설명합니다. 두 개의 인덱스는 요소 중 하나에 액세스하는 데 사용됩니다. 하나는 행용이고 다른 하나는 열용입니다. 강사는 각 요소가 문자열인 경우를 제외하고 개별 문자의 2D 배열인 문자열 배열을 만드는 방법도 보여줍니다. 문자열 배열을 표시하려면 for 루프를 사용할 수 있습니다. 마지막으로 강사는 값의 임시 저장소로 세 번째 변수를 도입하여 C에서 변수를 교체하는 방법을 설명합니다. 변수 교환은 다음 항목에서 다룰 정렬 알고리즘에서 중요합니다.

  • 02:30:00 강사는 정수 및 문자 배열에 대해 C에서 두 변수의 값을 교환하는 방법을 가르칩니다. 강사는 임시 변수와 문자열 복사 기능을 사용하여 두 번째 인수의 길이가 첫 번째 인수보다 짧은 경우 값을 교환하고 문자 배열의 예기치 않은 동작을 방지하는 방법을 보여줍니다. 강사는 또한 스왑 값을 더 잘 이해하기 위해 액체가 들어 있는 안경으로 변수를 상상할 것을 제안하고 설명 섹션에서 샘플 코드를 제공합니다. 그런 다음 강사는 처음에는 정수 배열을 사용한 다음 문자 배열을 사용하여 배열 내의 요소를 정렬하는 프로그램을 작성하는 방법을 설명합니다. 강사는 정렬을 위한 별도의 함수를 선언하고 중첩된 for 루프를 사용하여 배열을 반복하고 정렬을 위해 값을 비교합니다.

  • 02:35:00 발표자가 버블 정렬 알고리즘을 사용하여 C에서 배열 요소를 정렬하는 방법에 대해 설명합니다. 임시 변수 및 if 문의 사용과 정렬되는 숫자의 크기가 배열의 최종 위치에 미치는 영향을 설명합니다. 연사는 데이터 유형과 인쇄 기능을 변경하여 문자 배열을 정렬하는 방법도 보여줍니다. 그런 다음 실제 개체를 모방할 수 있는 기능을 사용하여 하나의 메모리 블록에서 관련 멤버를 구성하는 방법으로 구조체의 개념을 소개합니다. 구조체는 struct 키워드 뒤에 태그 이름과 멤버를 나타내는 중괄호 세트를 사용하여 정의됩니다.

  • 02:40:00 비디오의 이 섹션에서 강사는 C 프로그래밍 언어의 구조체 및 typedef에 대해 가르칩니다. 구조체를 사용하면 프로그래머가 메모리 블록의 한 이름으로 관련 값을 그룹화할 수 있으며, 이를 사용하여 데이터 유형이 다른 멤버에 값을 할당할 수 있습니다. typedef 키워드는 기존 데이터 유형에 별칭을 부여하여 코드에서 데이터 유형을 더 쉽게 사용할 수 있도록 합니다. 강사는 또한 3개의 멤버가 있는 구조체를 생성하고 여기에 값을 할당하는 예를 보여줍니다. 비디오는 그것을 사용하려는 사용자를 위한 샘플 코드를 제공합니다.

  • 02:45:00 구조체는 기본 함수 외부에서 생성되고 "student"라는 태그 이름이 지정되며 이름에 대한 문자 배열과 GPA에 대한 부동 변수를 포함합니다. 4명의 학생 배열이 초기화된 다음 "students"라는 배열 내에 배치됩니다. 프로그램은 for 루프를 사용하여 배열을 반복하고 점 멤버 액세스 연산자를 사용하여 각 학생의 이름과 GPA를 출력합니다. 마지막으로 동영상에서는 구조체와 함께 "typedef" 키워드를 사용하면 구조체를 만들기 위해 더 이상 struct 키워드를 사용할 필요가 없으며 대신 할당한 닉네임을 사용할 수 있다고 설명합니다.

  • 02:50:00 강사는 C에서 구조체 배열을 만드는 방법을 가르칩니다. 여기서 배열의 각 요소는 이름 및 GPA와 같은 각 학생의 데이터를 포함하는 구조체입니다. 강사는 또한 정수 값을 관련 이름으로 대체하여 프로그램을 더 읽기 쉽게 만들 수 있는 명명된 정수 식별자의 사용자 정의 유형인 열거형을 사용하여 프로그래머와 코드를 검토하는 모든 사람이 코드를 더 쉽게 이해할 수 있도록 합니다. 열거형의 구조에 대해 설명하고 강사는 if-else 문에서 열거형을 사용하여 열거형 변수의 값에 따라 다른 출력을 인쇄하는 방법을 보여줍니다.

  • 02:55:00 비디오의 이 섹션에서 강사는 C 프로그래밍에서 난수를 생성하는 방법을 시연합니다. 현재 시간은 0에서 32767 사이의 난수를 생성하는 rand 함수의 시드를 생성하는 데 사용됩니다. 주어진 범위 내에서 난수를 얻으려면 모듈러스 연산자를 사용할 수 있습니다. 강사는 1에서 6 사이의 난수(주사위 굴리기)와 세 개의 주사위 굴리기에 대한 예를 제공합니다. 난수 생성 지식을 활용한 숫자 추측 게임도 소개됩니다. 최소 및 최대 범위에 대한 상수가 설정되고 사용자에게 숫자를 추측하라는 메시지가 표시됩니다. 프로그램은 rand 함수를 사용하여 주어진 범위 사이에서 임의의 숫자를 생성하고 사용자는 피드백을 받아 정확한 숫자가 입력될 때까지 추측을 조정합니다.

파트 4

  • 03:00:00 강사는 C로 숫자 추측 게임을 만드는 방법을 가르칩니다. 이 게임에서는 프로그램이 지정된 두 값 사이에서 임의의 숫자를 생성하고 사용자에게 숫자를 추측하도록 유도하고 추측이 너무 높거나 낮은 경우 피드백을 제공합니다. , 또는 정확합니다. 이 프로그램은 do-while 루프를 사용하여 최소한 한 번은 추측하고 사용자가 추측한 횟수를 세도록 합니다. 강사는 또한 출력을 시각적으로 더 매력적으로 만들기 위해 몇 가지 텍스트 장식을 추가합니다. 이 예제는 C에서 조건부, 루프, 사용자 입력 및 난수 생성을 사용하는 방법을 보여줍니다.

  • 03:05:00 강사가 C로 퀴즈 게임을 만드는 방법을 보여줍니다. 이 게임은 2차원 문자 배열을 사용하여 질문을 저장하고 별도의 2차원 문자 배열을 사용하여 옵션을 저장합니다. 정답은 1차원 문자 배열에 저장됩니다. 게임은 질문 수를 계산하고 for 루프를 사용하여 질문을 하나씩 순환하여 가능한 옵션과 함께 표시합니다. 이를 위해 강사는 옵션 배열 내에서 매 4번째 문자열로 시작하는 중첩된 for 루프를 사용합니다. 이 for 루프는 네 번 순환하여 각 질문에 대해 가능한 네 가지 옵션을 표시합니다.

  • 03:10:00 강사가 C로 사용자에게 질문을 하고 답변을 확인하는 간단한 퀴즈 게임을 만드는 방법을 안내합니다. 이 코드는 중첩된 for 루프를 사용하여 질문과 옵션을 표시하고, scanf를 사용하여 사용자 입력을 수락하고, "toupper" 함수를 사용하여 소문자를 대문자로 변환합니다. 그런 다음 프로그램은 사용자의 추측이 정답과 일치하는지 확인하고 그에 따라 점수를 높입니다. 모든 질문에 답하면 프로그램이 최종 점수를 표시합니다. 또한 강사는 비트 연산자에 대해 간략하게 설명하고 C에서 5가지 비트 연산자를 사용하는 방법을 보여줍니다.

  • 03:15:00 C 프로그래밍에서 비트 연산에 대해 배웁니다. 우리는 AND 연산자로 시작하는데, 두 개의 이진수에 적용될 때 두 해당 비트가 모두 1인 경우에만 결과에 1을 할당합니다. 그런 다음 해당 비트 중 하나라도 1인 경우 결과에 1을 할당하는 OR 연산자로 이동합니다. 배타적 OR 연산자는 해당 비트가 하나만 1인 경우 결과에 1을 할당합니다. 또한 이진수의 비트를 왼쪽 또는 오른쪽으로 이동하는 왼쪽 및 오른쪽 이동 연산자에 대해서도 배웁니다. 비트를 왼쪽으로 이동하면 숫자가 두 배가 되고 오른쪽으로 이동하면 반대 효과가 발생합니다.

  • 03:20:00 비디오는 RAM 내의 바이트 배열인 C 프로그래밍의 메모리를 설명합니다. 각 단위는 값을 보유할 수 있는 메모리 블록입니다. 메모리 주소는 RAM 내에서 메모리 블록이 있는 위치를 가리키며 거리 주소와 같습니다. 변수를 선언할 때 메모리 주소와 관련된 값을 보유하기 위해 일부 메모리 블록을 따로 설정합니다. 각 변수는 1바이트의 메모리 블록을 사용하며 비디오는 메모리 주소와 다양한 문자의 크기를 예로 표시합니다. 비디오는 또한 0에서 9까지의 숫자와 a에서 f까지의 문자를 사용하여 각 숫자에 대해 가능한 16개의 값을 생성하는 16진수 값에 대해 간략하게 설명합니다. 마지막으로 비디오는 2바이트 메모리를 사용하는 짧은 데이터 유형을 다룹니다.

  • 03:25:00 강사는 변수가 메모리 블록을 사용하는 방법과 배열이 크기 및 데이터 유형에 따라 여러 메모리 블록을 사용하는 방법을 포함하여 C 프로그래밍의 기본 메모리를 설명합니다. 그는 또한 다른 변수에 대한 값으로 메모리 주소를 보유하는 포인터의 개념을 소개하고 특정 작업을 보다 쉽게 수행하는 데 사용할 수 있는 방법을 설명합니다. 강사는 변수의 값과 주소를 표시하는 방법과 가리키는 변수와 동일한 데이터 유형의 포인터를 만드는 방법을 보여줍니다.

  • 03:30:00 C 프로그래밍의 포인터에 대해 배웁니다. 포인터는 간접 연산자로 별표를 사용하여 선언되며 일반적인 명명 규칙은 소문자 "p" 다음에 변수 이름을 사용하고 첫 글자를 대문자로 하는 것입니다. 포인터의 값은 주소이며 간접 연산자를 사용하여 해당 주소에 저장된 값에 액세스할 수 있습니다. 포인터와 포인터가 가리키는 변수의 데이터 유형이 일치하는지 확인하는 것이 중요합니다. 포인터는 또한 함수에 대한 인수로 전달될 수 있으므로 함수가 가리키는 변수에 저장된 값에 액세스하고 수정할 수 있습니다. 또한 포인터는 두 단계로 선언하고 초기화할 수 있지만 값을 즉시 할당하는 것이 좋습니다.

  • 03:35:00 강사가 C 프로그래밍의 포인터를 설명합니다. 포인터는 다른 변수, 배열 등에 대한 메모리 주소를 보유하는 변수입니다. 포인터를 선언하려면 간접 연산자를 사용합니다. 포인터에 값을 할당하려면 동일한 연산자를 사용합니다. 강사는 포인터, fopen, fwrite 및 fclose를 사용하여 C에서 파일에 쓰는 방법을 보여줍니다. 파일에 쓰려면 파일에 대한 포인터를 만들고 `fprintf`를 사용하여 파일에 써야 합니다. 강사는 또한 파일을 삭제하고 컴퓨터 디렉토리의 특정 위치에 있는 파일에 쓰는 방식으로 파일 I/O를 시연합니다.

  • 03:40:00 강사는 데이터 유형이 "file"인 포인터를 만들고 fopen 함수를 사용하여 파일을 여는 방식으로 C 프로그래밍에서 파일의 내용을 읽는 방법을 보여줍니다. 강사는 버퍼를 사용하여 한 번에 한 줄의 텍스트 문서를 보유하는 문자 배열을 포함하는 방법과 fgets 함수를 사용하여 파일에서 한 줄을 읽는 방법을 보여줍니다. 이 섹션에는 while 루프를 사용하여 파일의 모든 줄을 표시하는 방법과 파일을 읽으려고 시도하기 전에 파일이 있는지 확인하기 위해 파일 검색을 추가하는 방법도 포함되어 있습니다.

  • 03:45:00 비디오의 이 섹션에서 강사는 보드 재설정, 보드 인쇄, 여유 공간 확인, 플레이어 이동, 컴퓨터 이동, 승자 확인 기능을 포함하여 프로그램에서 사용될 기능 프로토타입을 검토합니다. , 인쇄 승자. 이러한 함수를 선언한 후 강사는 보드라는 문자의 2D 배열과 플레이어 및 컴퓨터 문자에 대한 상수를 포함하여 사용할 몇 가지 전역 변수에 대해 설명합니다. main 함수는 승자에 대한 지역 변수를 선언하고, 빈 공간으로 설정하고, 보드를 재설정하고, 인쇄하는 주요 함수에 대해 다음에 설명합니다. 비디오에는 보드 재설정 기능에 사용되는 중첩된 for 루프와 인쇄 보드에 사용되는 printf 문에 대한 세부 정보도 포함되어 있습니다.

  • 03:50:00 C 프로그래밍 전체 과정의 이 섹션에서 강사는 프린트 보드 기능을 둘러싸는 메인 기능에서 while 루프를 만드는 방법을 설명합니다. while 루프 조건은 승자가 빈 공간이고 여유 공간 확인 함수를 호출하여 반환된 값이 0이 아닌 경우 루프가 계속된다는 것입니다. 여유 공간 확인 기능은 두 개의 중첩된 for 루프를 사용하여 2D 문자 배열을 반복하고 자리가 점유된 경우 여유 공간 로컬 변수를 감소시킵니다. 플레이어 이동 기능은 사용자가 이동을 위해 행과 열 번호를 입력하라는 메시지를 표시하고 자리가 점유되었는지 여부를 확인하는 기능을 설명합니다. 승리 조건에 대해 각 행을 확인하고 승리 조건에 대해 각 열을 확인하기 위해 승자 확인 기능도 생성됩니다.

  • 03:55:00 강사가 Tic Tac Toe 게임에서 승자의 행, 열 및 대각선을 확인하는 코드를 검토합니다. 그들은 for 루프와 if 문을 사용하여 게임 보드의 요소를 반복하고 일치 항목을 확인하는 방법을 설명합니다. 승자가 있는 경우 함수는 승자 요소의 문자 값을 반환합니다. 그렇지 않으면 빈 문자가 반환됩니다. 그런 다음 강사는 컴퓨터의 이동에 대한 코드를 제공합니다. 여기에는 기호를 보드에 배치하기 위해 임의의 좌표를 생성하는 작업이 포함됩니다. 난수를 생성하기 전에 프로그램은 보드에 사용 가능한 공간이 있는지 확인합니다.

  • 04:00:00 강사는 C에서 Tic Tac Toe 게임을 계속 구축합니다. 이동을 하기 전에 생성된 지점이 빈 공간인지 확인하기 위해 검사를 추가합니다. 더 이상 사용할 수 있는 공간이 없으면 빈 공간과 함께 "승자 인쇄" 기능이 호출되며 이는 게임이 무승부임을 의미합니다. 이 함수는 승자가 플레이어이면 "You win", 승자가 컴퓨터이면 "You lose", 승자가 없으면 "It's a tie"를 출력하기 때문에 상당히 쉽다고 설명합니다. 강사는 do while 루프를 사용하여 "다시 재생" 옵션을 구현하고 각 루프의 시작 부분에서 승자와 응답 변수를 재설정합니다. 게임은 각 단계를 설명하는 강사와 함께 여러 번 실행 및 테스트됩니다. 마지막으로 사용자가 사용할 수 있도록 코드가 주석 섹션에 게시될 것이라고 언급합니다.
C Programming Full Course for free 🕹️
C Programming Full Course for free 🕹️
  • 2021.10.07
  • www.youtube.com
C tutorial for beginners full course#C #tutorial #beginners⭐️Time Stamps⭐️#1 (00:00:00) C tutorial for beginners 🕹️#2 (00:12:36) compile and run a C pro...
 

객체 지향 프로그래밍의 기본 개념


객체 지향 프로그래밍의 기본 개념

객체 지향 프로그래밍의 네 가지 기본 개념은 추상화, 캡슐화, 상속 및 다형성입니다. 그 의미를 탐구하기 전에 객체가 무엇인지 이해하는 것이 중요합니다. 객체는 자동차나 책과 같은 물리적인 것일 수도 있고 치과 예약이나 은행 계좌와 같은 비물질적인 것일 수도 있는 현실 세계의 무언가를 나타냅니다.

개체 지향 프로그래밍의 맥락에서 개체는 데이터를 저장하고 처리해야 하는 개발 중인 소프트웨어 응용 프로그램에 관심이 있는 모든 것을 의미합니다. 개체는 엔터티라고도 합니다.

추상화는 객체와 관련된 관련 데이터 및 작업에만 집중하여 현실을 단순화하는 첫 번째 기본 개념입니다. 예를 들어 사람에 대한 데이터를 처리하는 애플리케이션을 설계할 때 필요한 데이터와 작업만 고려합니다.

프로그래밍 방식으로 개체를 만들려면 클래스가 필요합니다. 클래스는 개체를 만들기 위한 템플릿 역할을 하며 프로그래머가 개체의 특성(필드 또는 속성이라고도 함) 및 작업(비헤이비어 또는 메서드라고도 함)을 정의하기 위해 작성합니다. 특성은 개체의 데이터를 설명하고 작업은 개체에서 수행할 수 있는 작업을 나타냅니다.

캡슐화는 두 번째 기본 개념이며 다른 프로그램 및 프로그래머로부터 개체 내부 작동의 복잡성을 숨기는 것과 관련됩니다. 개체 내의 데이터와 기능이 함께 묶여 있고 외부 간섭으로부터 보호되기 때문에 종종 정보 은닉이라고 합니다. 숙련된 프로그래머는 종종 주니어 프로그래머가 사용하는 클래스를 만들고 컴파일된 클래스 라이브러리는 지적 재산을 보호합니다.

상속은 클래스가 다른 클래스에서 해당 메서드와 속성을 파생할 수 있도록 하는 세 번째 기본 개념입니다. 이것은 하위 클래스가 상위 클래스에서 상속되는 클래스의 계층 구조로 이어집니다. 예를 들어 직원 클래스는 사람 클래스에서 상속되고 고객 클래스도 사람 클래스에서 상속됩니다. 이것은 하위 클래스가 해당 수퍼 클래스의 속성과 메서드를 확장하는 일종의 관계를 생성합니다.

마지막 기본 개념인 다형성은 클래스가 고유한 방식으로 상속된 메서드를 구현할 수 있도록 합니다. 동일한 슈퍼클래스의 다른 서브클래스는 상속된 메서드에 대해 다른 구현을 가질 수 있습니다. 다형성은 동일한 인터페이스를 가진 다양한 형태의 객체가 특정 하위 클래스 구현에 따라 다르게 동작하도록 허용합니다.

요약하면 추상화는 현실을 단순화하고 캡슐화는 복잡성을 숨기고 상속은 클래스 계층 구조를 설정하며 다형성은 상속된 메서드의 다양한 구현을 허용합니다. 이러한 기본 개념은 객체 지향 프로그래밍의 기초를 형성합니다.

Fundamental Concepts of Object Oriented Programming
Fundamental Concepts of Object Oriented Programming
  • 2020.11.01
  • www.youtube.com
This video reviews the fundamental concepts of Object Oriented Programming (OOP), namely: Abstraction, which means to simplify reality and focus only on the ...
 

C++ 과정의 객체 지향 프로그래밍(OOP)


C++ 과정의 객체 지향 프로그래밍(OOP)

이 비디오는 C++의 객체 지향 프로그래밍(OOP)에 대한 개요를 제공합니다. 클래스, 객체 및 메소드와 같은 OOP의 기본 개념을 설명합니다. 강사는 변수를 사용자 정의 데이터 유형으로 선언하는 것의 중요성을 강조하면서 C++ 클래스 및 해당 멤버 생성을 시연합니다. private, public 및 protected와 같은 액세스 한정자는 개체 멤버에 액세스하는 것과 관련하여 설명됩니다.

비디오는 또한 캡슐화, 추상화, 상속 및 다형성을 포함한 OOP 원칙의 구현을 다룹니다. 생성자 및 추상 클래스 만들기와 같이 이러한 원칙이 코드에 적용되는 방법에 대한 예를 보여줍니다. 강사는 소프트웨어 개발을 단순화하고 사용자에게 복잡성을 숨기는 것과 같은 OOP의 이점을 강조합니다.

또한 비디오는 파생 클래스가 기본 클래스에서 속성을 상속하는 상속의 개념을 살펴봅니다. 강사는 파생 클래스를 만드는 과정을 시연하고 상속된 속성 외에 고유한 속성을 가질 수 있는 방법을 설명합니다.

비디오는 가상 기능 및 다형성에 대한 토론으로 끝납니다. 다형성이 개체와 메서드가 여러 형식을 갖도록 허용하여 부모 클래스 참조를 자식 클래스 개체와 함께 사용할 수 있도록 하는 방법을 설명합니다. 가상 함수의 개념이 도입되어 함수의 가장 파생된 버전이 호출될 때 실행된다는 점을 강조합니다.

전반적으로 이 비디오는 필수 개념, 원칙 및 실제 구현을 다루면서 C++의 OOP에 대한 포괄적인 이해를 제공하는 것을 목표로 합니다. 강사는 시청자가 자신의 채널인 Code Beauty를 팔로우하도록 권장하고 동영상에 대한 피드백을 환영합니다.

  • 00:00:00 이 비디오는 객체 지향 프로그래밍의 기본 사항과 그것이 실제로 어떻게 작동하는지 설명합니다. 클래스는 객체 지향 프로그래밍의 핵심 개념이며 변수를 사용하려면 변수를 사용자 정의 데이터 유형으로 선언해야 합니다.

  • 00:05:00 이 비디오에서는 C++ 클래스가 생성되고 멤버가 추가됩니다. 클래스에는 이름, 회사 및 연령의 세 가지 속성이 있습니다. 클래스의 인스턴스가 생성되고 변수 번호가 할당됩니다.

  • 00:10:00 이 비디오에서 강사는 C++에서 객체의 멤버에 액세스하는 방법을 설명합니다. private, public 및 protected와 같은 액세스 한정자는 개체의 멤버에 액세스할 수 있는 방법을 결정합니다. 클래스 메서드는 개체의 동작을 설명하는 데 사용할 수 있습니다.

  • 00:15:00 이 비디오는 객체 지향 프로그래밍(OOP)이 C++에서 작동하는 방식을 설명합니다. 리턴 타입이 void인 함수가 생성되고, 도입된 함수와 동일한 구문을 사용하여 함수가 호출됩니다. 그런 다음 함수는 매번 다른 직원 이름과 회사로 다섯 번 호출됩니다. 그런 다음 직원 이름과 회사 값이 새 직원 개체에 복사되고 직원 개체의 특성이 새로 복사된 값의 값으로 설정됩니다.

  • 00:20:00 이 비디오에서 강사는 C++에서 생성자를 만들기 위한 세 가지 규칙을 안내합니다. 첫 번째 규칙은 생성자가 자신이 속한 클래스와 동일한 이름을 가져야 한다는 것, 두 번째 규칙은 생성자가 공개되어야 한다는 것, 세 번째 규칙은 생성자에 액세스할 수 있어야 한다는 것입니다. 생성자를 만들 때 이 비디오에 설명된 규칙을 염두에 두는 것이 중요합니다. 생성자가 이러한 규칙 중 하나를 따르지 않으면 오류가 생성됩니다.

  • 00:25:00 이 비디오에서 강사는 클래스, 개체 및 메서드의 개념을 포함하여 개체 지향 프로그래밍의 기본 사항을 설명합니다. 그런 다음 객체 지향 프로그래밍의 네 가지 핵심 원칙인 캡슐화, 추상화, 상속 및 다형성을 설명합니다. 마지막으로 코드 예제에서 이러한 개념을 구현하는 방법을 설명합니다.

  • 00:30:00 이 비디오는 C++의 객체 지향 프로그래밍(OOP)을 소개합니다. 클래스는 다른 클래스가 데이터에 액세스하고 수정하기 위해 호출할 수 있는 데이터 및 공용 메서드를 캡슐화하는 구조입니다. 캡슐화를 제공하기 위해 클래스 필드는 비공개이고 getter 및 setter는 공개입니다.

  • 00:35:00 이 비디오에서는 C++ 과정 강사가 객체 지향 프로그래밍(OOP)의 원칙에 대해 설명합니다. 강사는 캡슐화 및 추상화가 단순화된 인터페이스 뒤에 복잡한 데이터를 숨기는 데 어떻게 도움이 되는지 설명합니다. 또한 강사는 개인 속성의 setter 메서드에 유효성 검사 규칙을 적용하는 방법에 대해서도 설명합니다.

  • 00:40:00 이 비디오에서 발표자는 OOP(객체 지향 프로그래밍)가 사용자에게 복잡성을 숨김으로써 소프트웨어 개발을 간소화하는 방법을 설명합니다. 스마트폰의 예를 사용하여 OOP가 복잡한 프로세스를 단순하게 보이게 만드는 방법을 설명합니다. 그런 다음 사용자에게 시스템의 복잡성을 숨기면서 시스템의 한 측면을 단순하게 보이게 하는 계약을 만드는 방법을 보여줍니다.

  • 00:45:00 이 동영상은 C++의 객체 지향 프로그래밍(OOP) 개념을 설명합니다. 비디오에서는 가상 기능을 구현해야 하는 추상 클래스를 만드는 방법과 기능을 테스트하여 특정 직원이 승진할 수 있는지 확인하는 방법에 대해 설명합니다.

  • 00:50:00 이 영상에서 작성자가 승진하고 그 사람이 30세 미만이면 그 사람은 승진하지 않습니다. 이를 통해 우리는 실제로 추상 클래스인 계약을 구현할 수 있으며 해당 추상 클래스 또는 해당 계약에는 단 하나의 규칙이 있으며 해당 규칙은 프로모션 요청이라는 순수한 가상 기능입니다. 따라서 이 계약에 서명하는 클래스, 여기에서 이 클래스인 이 추상 직원으로부터 상속받은 클래스는 여기에서 이 메서드에 대한 구현을 제공해야 합니다. 우리는 그것을 테스트했고 보시다시피 저는 승진하지 않았고 John은 승진했습니다. 이것이 추상화의 아이디어입니다. 그리고 이 프로모션 요청 방법은 이 장의 시작 부분에서 스마트폰의 버튼에 대해 언급한 바로 그 버튼입니다. 제가 이야기하고 싶은 객체 지향 프로그래밍의 세 번째 원칙은 상속입니다. 상속의 개념은 다음과 같습니다. 수퍼 클래스 또는 상위 클래스라고도 하는 기본 클래스가 있고 하위 클래스 또는 하위 클래스라고도 하는 파생 클래스가 있습니다.

  • 00:55:00 이 비디오에서 C++ 과정 강사는 기존 기본 클래스에서 파생 클래스를 만들어 개체 지향 프로그래밍이 작동하는 방식을 보여줍니다. 그런 다음 기본 클래스 속성은 파생 클래스에 의해 상속되며 개발자 클래스와 관련된 자체 속성도 얻습니다.

  • 01:00:00 이 비디오에서 강사는 C++에서 개체 지향 프로그래밍이 작동하는 방식에 대해 설명합니다. 그는 개발자 클래스가 직원 클래스에서 상속되는 방법과 직원 클래스의 생성자를 사용하여 개발자 클래스의 특정 속성을 초기화하는 방법을 설명합니다. 그런 다음 강사는 속성이 올바르게 설정되었는지 테스트하기 위해 개발자 클래스에서 메서드를 만드는 방법을 보여줍니다. 마지막으로 그는 개발자 클래스를 닫는 방법을 보여줍니다.

  • 01:05:00 이 비디오에서 강사는 객체 지향 프로그래밍(OOP)의 상속 및 다형성 개념에 대해 설명합니다. 그는 코드 예제를 통해 이러한 개념을 사용하여 문제를 해결하는 방법을 보여줍니다. 마지막으로 강사는 다른 클래스에서 상속하는 클래스를 만드는 방법을 시연합니다.

  • 01:10:00 이 비디오는 C++의 객체 지향 프로그래밍(OOP)에 대한 간략한 개요를 제공합니다. 이 비디오는 직원 클래스에서 상속하고 수업 준비 기능을 구현하는 교사 클래스를 만드는 방법을 설명합니다. 비디오는 또한 OOP 클래스를 만들고 사용할 때 발생할 수 있는 몇 가지 문제와 해결 방법에 대해 설명합니다.

  • 01:15:00 이 비디오에서 강사는 C++에서 객체 지향 프로그래밍(OOP)의 개념을 설명합니다. 다형성(Polymorphism)은 개체 또는 메서드가 여러 형태를 가질 수 있는 능력을 나타냅니다. 프로그래밍에서 다형성의 일반적인 용도 중 하나는 부모 클래스 참조가 자식 클래스의 개체를 참조하는 데 사용되는 경우입니다. 이 예제는 기본 함수로 돌아가고 직원 클래스에서 상속되는 개발자 및 교사 클래스에서 새 작업 메서드를 호출하여 다형성이 작동하는 방식을 보여줍니다.

  • 01:20:00 이 비디오는 C++에서 객체 지향 프로그래밍의 기본 사항을 다룹니다. 비디오의 첫 번째 부분에서는 객체 지향 프로그래밍의 역사와 이것이 다른 프로그래밍 패러다임과 어떻게 다른지 다룹니다. 비디오의 두 번째 부분에서는 기본 클래스에 대한 포인터를 만드는 방법과 직원 클래스에서 작업 메서드를 가상으로 만드는 방법을 설명합니다. 마지막으로 비디오는 포인터가 작동하는 방식과 결과적으로 프로그램이 작동하는 방식을 보여줍니다.

  • 01:25:00 이 비디오에서 강사는 C++의 가상 함수 및 다형성 개념에 대해 설명합니다. 그는 가상 함수가 호출될 때 함수의 가장 파생된 버전이 실행된다고 설명합니다. 즉, 함수가 클래스의 파생 클래스에서 구현되지 않으면 클래스의 개발자 클래스가 대신 호출됩니다. 그는 또한 다형성을 통해 서로 다른 유형의 직원을 하나의 큰 개체인 것처럼 취급할 수 있으므로 기본 클래스 포인터로 참조할 수 있다고 설명합니다.

  • 01:30:00 이 비디오는 C++의 객체 지향 프로그래밍(OOP)을 소개합니다. OOP가 어떻게 프로그래밍을 더 체계적이고 이해하기 쉽게 만드는지 설명합니다. 발표자는 또한 시청자가 자신의 채널, 코드 뷰티를 팔로우하고 거기에서 구독하도록 권장합니다. 마지막으로 발표자는 시청자에게 동영상에 대한 피드백을 남기도록 권장합니다.
Object Oriented Programming (OOP) in C++ Course
Object Oriented Programming (OOP) in C++ Course
  • 2021.02.02
  • www.youtube.com
Object Oriented Programming (OOP) is commonly used when writing code with C++. In this crash course, you will learn what OOP is and how to implement it using...