W2: 코드업 기초 100제 70번 이하 문제들 중 가장 어려웠던 5문제 write-up 작성하기 코드업 기초 (22.04.25 ~ 22.05.02) 저번주에 이어서 31~70번 문제를 풀어보았다 이번에는 비트연산자를 복습할 수 있어서 좋았던 것 같다 개인적으로 힌트가 나온 문제들은 최대한 다른 방식으로 풀어보려했다 ㅎ (if-else를 switch로 구현해본다던지,,) # 1038: [기초-산술연산] 정수 2개 입력받아 합 출력하기 1 [문제] 정수 2개를 입력받아 합을 출력하는 프로그램을 작성해보자. (단, 입력되는 정수는 -1073741824 ~ 1073741824 이다.) [입력] 2개의 정수가 공백으로 구분되어 입력된다. ** 주의: 계산의 결과가 int 범위를 넘어가는지를 잘 생각해 보아야 한..
Chapter 07. 파일 및 레코드 잠금 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 7.1 파일 잠금 1) 파일 및 레코드 잠금의 필요성 - 프로세스 사이에 데이터는 한 프로세스가 파일에 쓴 내용을 다른 프로세스가 읽음으로써 데이터를 주고받을 수 있음 - 문제점 한 프로세스가 파일 내용을 수정하는 동안에 다른 프로세스가 그 파일을 읽는 경우 두 개의 프로세스가 하나의 파일에 동시에 접근하여 데이터를 쓰는 경우 - 잠금(lock): 한 프로세스가 그 영역을 읽거나 수정할 때 다른 프로세스의 접근을 제한 잠근된 영역에 한 번에 하나의 프로세스만 접근 특히 레코드 쓰기(혹은 수정)를 할 경우 대상 레코드에 대해 잠금을 해서 다른 프로세스가 접근하지 못하게 해야 함 접근하는 프로세스 A가 대상 레코드에 ..
Chapter 06. 파일 시스템 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 6.1 파일 시스템 1) 파일 시스템 구조 - 부트 블록(Boot block) 파일 시스템 시작부 위치, 첫 번째 섹터 차지 유닉스/리눅스가 처음 시작될 때 사용되는 부트스트랩 코드가 저장되는 블록 - 슈퍼 블록(Super block) 전체 파일 시스템에 대한 정보 저장 파일 시스템 내의 총 블록 수, 사용 가능한 i-노드 개수, 사용 가능한 블록들을 나타내는 비트 맵, 블록의 크기, 사용 중인 블록 수, 사용 가능한 블록 수 - i-리스트(i-list) 각각의 파일을 나타내는 i-노드들의 리스트 한 블록은 약 40개 정도의 i-노드 포함 - 데이터 블록(Data block) 파일의 내용(데이터)을 저장하기 위한 블록 2)..
Chapter 05. 파일 입출력 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 5.1 시스템 호출 1) 컴퓨터 시스템 구조 - 하드웨어는 CPU, 메모리, 저장장치, 주변장치 등으로 구성 - 운영체제는 하드웨어를 운영 관리하는 시스템 소프트웨어이며 유닉스/리눅스의 경우 커널(kernel)이 하드웨어를 운영 관리 - 운영체제 서비스 프로세스 관리 파일 관리 메모리 관리 통신 관리 주변 장치 관리 2) 시스템 호출 - 시스템 호출(system call): 운영 체제가 제공하는 서비스에 대한 프로그래밍 인터페이스 - 시스템 호출은 커널에 서비스를 요청하기 위한 프로그래밍 인터페이스로 응용 프로그램은 시스템 호출을 통해서 커널에 서비스를 요청 가능 3) 시스템 호출 구현 주요 자원 시스템 호출 파일 open..
↓Chapter 04. 변수 및 유효 범위 프로그래밍 언어론 원리와 실제 - 창병모 교수님 4.1 변수 선언 1) 변수 선언과 유효 범위 - 사용 전 선언(declaration before use): 변수는 사용하기 전에 선언되어야 함 - 변수의 유효 범위(scope) 선언된 변수가 유효한(사용될 수 있는) 프로그램 내의 범위/영역 변수 이름뿐 아니라 함수 등 다른 이름도 생각해야 함 - 정적 유효 범위(Static scope) 선언된 이름은 선언된 블록 내에서만 유효함 대부분 언어에서 표준 규칙으로 사용됨 2) 블록과 변수 선언 - 구문법 → ... | id = ; | let in end → { id [=];} → {} → int | bool | string - 의미 변수 id는 타입 변수이며 초기화가..
Chapter 03. 언어 설계와 파서 구현 프로그래밍 언어론 원리와 실제 - 창병모 교수님 3.1 프로그래밍 언어 S 1) 언어 설계 목표 간단한 교육용 언어로 쉽게 이해하고 구현할 수 있도록 설계한다 대화형 인터프리터 방시으로도 동작할 수 있도록 설계한다 프로그래밍 언어의 주요 개념을 쉽게 이해할 수 있도록 설계한다. 수식, 실행 문장, 변수 선언, 함수 정의, 예외 처리, 타입 검사 등을 포함한다. 블록 중첩을 허용하는 블록 구조 언어를 설계한다. 전역 변수, 지역 변수, 유효범위 등의 개념을 포함 실행 전에 타입 검사를 수행하는 강한 타입 언어로 설계한다. 안전한 타입 시스템을 설계하고 이를 바탕으로 타입 검사기를 구현 주요 기능을 점차적으로 추가하면서 이 언어의 어휘분석기, 파서, AST, 타입..
Chapter 02. 구문법(Syntax) 프로그래밍 언어론 원리와 실제 - 창병모 교수님 2.1 구문 및 문법 Q. 가능한 문장 혹은 프로그램의 개수가 무한하지 않은가? 무한한 것들을 어떻게 유한하게 정의할 수 있는가? A. 점화식 혹은 재귀식(recursive relation)을 이용하여 해결할 수 있음 1) 이진수의 구문법 - 이진수를 구성하는 방법 (1) 숫자(D)는 '0' 혹은 '1'이다. (2) 이진수(N)를 구성하는 방법은 두 가지가 있는데 첫 번째 방법은 숫자(D) 하나로 구성하는 것이다. 두 번째 방법은 이진수(N) 다음에 숫자(D)를 하나 붙여서 구성하는 것이다. - 논리 규칙 형태 - 문법 형태 N → D N → ND or N → D | ND - 이진수의 의미: 보통 이진수의 의미를 ..
Chapter 01. 서론 프로그래밍 언어론 원리와 실제 - 창병모 교수님 1.1 프로그래밍 언어란 무엇인가? 1) 프로그래밍 언어란 무엇인가? - 프로그래밍 언어: 계산 과정을 기계가 읽을 수 있고 사람이 읽을 수 있도록 기술하기 위한 일종의 표기법. 즉, 기계가 해석할 수 있고 사람이 이해할 수 있어야 함 계산(Computation): 컴퓨터가 할 수 있는 연산들을 나타내며 덧셈, 뺄셈, 비교와 같은 데이터 조작, 문자 입출력과 같은 텍스트 처리, 정보 저장 및 검색 등을 의미 기계 읽기(machine readability): 효율적인 번역 혹은 실행이 가능해야 함을 뜻함 사람 읽기(human readability): 사람이 쉽게 프로그래밍할 수 있도록 편의성을 제공해야 하며 컴퓨터 연산들이 이해하기..
W1: 코드업 기초 100제 20번~30번대 문제들 중 가장 어려운 5문제 write-up 작성하기 코드업 기초100제 (22.04.18 ~ 22.04.24) 과제를 위해서 20-30번만 풀까 아니면 다 풀까 고민했는데 C는 기본중에 기본이고 거의 2년전에 배웠던 언어라서 다시 공부하고자하는 마음에 다 풀어보았다 ~.~ 개인적으로 너무 쉬워서 시간낭비라고 생각할 수도 있지만 알고리즘 말고 C언어 사용 자체에 대한 개념적인 부분들 중 까먹은 것들을 다시 상기시킬 수 있어서 괜찮았다고 생각한다 # 1020 : [기초-입출력] 주민번호 입력받아 형태 바꿔 출력하기 [문제] 주민번호는 다음과 같이 구성된다. XXXXXX-XXXXXXX 앞의 6자리는 생년월일(yymmdd)이고 뒤 7자리는 성별, 지역, 오류검출코..
Chapter 05. 병행 프로세스와 동기화 누워서 보는 운영체제 이야기 - 김주균 교수님 ▶ 병행(Concurrent) 같이 (메모리에) 존재하고 있다는 뜻 메모리에 다수의 프로세스가 같이 존재한다는 것과 같은 의미 CPU 하나가 있는 단일처리 시스템에서는 병행 프로세스 중 한 개만이 실제로 실행되지만, CPU 처리 시간을 효과적으로 나눔으로써 겉으로는 병행 프로세스들이 동시에 처리되는 것 ▶ 병렬(Parallel) 다중처리 시스템의 경우는 여러 개의 프로세스가 동시에 실행 ▶ 비동기적(Asynchronous) 프로세스들이 어떤 상태에 있는지, 어떤 자원을 가지고 있는지, 어디까지 실행됐는지 등에 대해 모른 체 실행되고 있음을 의미 # 5.1 병행 프로세스(Concurrent Proccess) ex1 ..