
문제 링크 https://www.acmicpc.net/problem/12015 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ Ai ≤ 1,000,000) 출력 첫째 줄에 수열 A의 가장 긴 증가하는 부분 수열의 길이를 출력한다. 조건 시간 제한 : 1s 메모리 제한 : 512MB 해설 증가하는 부분 순열 문제(LDS)를 푸는 알고리즘..

Ch. 6 Project - 1 이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제)를 수행하는 글입니다. 해외에서는 nand2tetris라는 이름의 프로젝트로 알려져 있습니다! 동일한 내용으로 구성되어 있으니, nand2tetris를 공부할 때 참고바랍니다 프로젝트 수행을 위한 언어로 C#을 사용하였습니다. Chapter 6의 내용정리 글 보러가기 Chapter 6. 어셈블러 - Project Chapter 6 프로젝트의 목표는 Hack Assembly 언어로 작성된 asm 코드를 Hack Binary Code로 변환하는 Assembler를 구현하는 것이다. 구현시 참고사항 상수는 10진법으로 ..

Ch. 5 Project 이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제)를 수행하는 글입니다. 해외에서는 nand2tetris라는 이름의 프로젝트로 알려져 있습니다! 동일한 내용으로 구성되어 있으니, nand2tetris를 공부할 때 참고바랍니다. Chapter 5. 컴퓨터 아키텍처 - Project Chapter 5의 프로젝트에서는 최소한의 구성으로 만든 간단한 Computer를 HDL로 작성하여 구현한 뒤, ROM에 예제 프로그램을 올려 직접 실행까지 시켜본다. HDL을 통해 구현할 컴퓨터의 대략적인 구조는 아래와 같다. 여기에서 Instruction Memory(ROM)은 주어진 Chi..

이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 과제 수행을 위한 언어로 C#을 선택했지만, Java와 거의 유사하여 Java를 알면 쉽게 이해할만한 코드들이예요. Chapter 4. 기계어 - Project Chapter 4의 프로젝트에서는 무언가를 설계하고 만들지는 않는다. Hack 언어로 간단한 프로그램을 작성해보는 과제를 해결해보면서 컴퓨터 플랫폼과 Hack언어, 기계어에 친해지는게 목적이다. 추후에 어셈블러, 컴파일러 등을 만들 때 Hack 언어와 동작에 대한 이해가 필요하므로 과제를 잘 수행해보자. 이번 과제를 해결하기 위해서는 교재에서 주는 도구가 필요합니..

이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 과제 수행을 위한 언어로 C#을 선택했지만, Java와 거의 유사하여 Java를 알면 쉽게 이해할만한 코드들이예요. Chapter 3. Sequential Logic - Project Ch.1, 2에서는 입력 값에 따라 출력값이 변하는 Combination Chip(이하 조합 칩)을 다루었다. 그러나 이번 Chapter에서는 시간의 요소를 추가로 넣은 Sequential Chip(이하 순차 칩)을 다룰 예정이다. 조합 칩과 다르게, 순차 칩은 상태를 유지하는 기능을 갖고있다. 따라서 값을 저장하고 불러오는 기능을 순차 칩..

이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 과제 수행을 위한 언어로 C#을 선택했지만, Java와 거의 유사하여 Java를 알면 쉽게 이해할만한 코드들이예요. Chapter 2. Boolean Arithmetic - Project 이번 챕터에서는 컴퓨터가 수행하는 다양한 연산을 처리하는 Arithmetic Logic Unit을 만들어 CPU에 대해 이해하는 것이 목표였다. 이전 챕터에서 만든 간단한 게이트들을 기반으로 덧셈을 수행하는 Adder, Incrementer 등을 구현하고, 조건 Flag들에 따라 다양한 연산을 수행할 수 있는 ALU를 구현하였다. Ch...

이 글은 insight 출판사의 [밑바닥부터 만드는 컴퓨팅 시스템 / The Elements of Computing System]이라는 책에 있는 프로젝트(과제) 를 수행하는 글입니다. 이 챕터에서는 AND, OR, NOT같은 간단한 논리 연산과 이에 대응하는 게이트에 대해 공부했었다. Chapter 1의 프로젝트는 이러한 게이트를 컴퓨터 상에서 구현하는 것을 목표로 한다. 책에서는 게이트 및 컴퓨터의 구현을 위한 윈도우용 프로그램을 무료로 제공하고 있지만, 사지방의 컴퓨터가 리눅스 기반의 운영체제인 관계로 그냥 웹 ide에서 C#으로 코드를 짜서 구현하려고 한다. 작성할 게이트들은 Gates라는 namespace에 만든 BoolGate class에 담아주었다. main에서 코드를 불러와 메서드를 실행시..
Write( ), WriteLine( ) 메서드에서 format 지정해주기 printf("%d + %d = %d\n", a, b, sum); // a + b = sum 을 출력 C언어에서는 printf 라는 함수에서 출력하려는 값의 format을 지정해준 뒤 문자열 “” 밖에서 파라미터 형식으로 값을 전달해줄 수 있었다. 그래서 함수의 이름도 print+format 인 printf이었다. 사실 C#에서는 + 를 통해 문자열을 쉽게 합쳐서 출력할 수 있었다보니 이런 format 지정을 이용하지 않았다. (굉장한 낭비이긴 하지만, 단순히 백준 문제를 푸는 데 있어서는 크게 영향이 없더라고) 그런데 이 Format 지정을 써줘야하는 문제를 만났다. 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여..