개발 19

코드업(codeup.co.kr) 1097 : 바둑알 십자 뒤집기 해설 (C언어)

C언어로 작성된 코드입니다. 문제설명 윤마는 검정색과 흰색 바둑알을 바둑판에 꽉 채워 깔아 놓으며 놀고 있다. 윤마는 십(+)자 뒤집기가 하고 싶어 졌다. 바둑판(19 * 19)에 흰 돌(1) 또는 검정 돌(0)이 모두 꽉 채워져 놓여있을 때, n개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해라. 참고로, 가로 번호와 세로 번호를 사용할 수 있는 2차원 배열을 사용한다면 이러한 형태를 쉽게 기록하고 사용할 수 있다. 입력 처음에는 바둑알이 깔려 있는 상황이고, 19 * 19 크기의 정수값으로 입력된다. 두번 째는 십자 뒤집기 횟수(n)가 입력된다. 십자 뒤집기 좌표가 횟수(n) 만큼 입력된다. 단, n은 10이하의 자연수이다. 출력 십자 뒤집기 결과를 출력한다. 입력예시 더보기..

SQL 종류와 활용

DB 엔진의 종류와 점유 랭킹을 보고 싶으면 여기로 들아가시오 https://db-engines.com/en/ranking_trend historical trend of the popularity ranking of database management systems db-engines.com SQL 종류 SQL: Structured Query Language : 구조화된 질의 언어. CRUD DQL 데이터 질의 언어 SELECT: 데이터 검색 SELECT 를 DQL로 분류하기도 한다. DML 데이터 조작 언어 단위: Row (가로,행) DML은 COMMIT/ROLLBACK 이 가능하다. INSERT: 데이터 추가 UPDATE: 데이터 수정 DELETE: 데이터 삭제 DDL 데이터 정의 언어 단위: Col..

개발/DB 2022.02.20

UNIX 운영체제 System Call

System call. UNIX 계열 운영 체제에서는 system call 기능이 있다. userland 프로세스가 사용하여 커널 프로시저를 호출한다. 각각의 시스템 호출은 고유번호가 지정되어 있고 각각의 번호마다 짧은 매개변수가 있다. 운영 체제, 하드웨어 플랫폼 및 구성 옵션에 따라 다를 수 있다. 이 글을 kernel 카테고리에 넣을까 Assembly 카테고리에 넣을까 엄청 고민했다. 결국 환경을 리눅스 AMD64말고도 확장시켜 다양한 system call 을 구현하는 것으로 방향을 잡았다. linux kernel darwin freeBSD os별 system call 명령어 Name standard linux Darwin FreeBSD access POSIX access(2) access(2) a..

개발/Assembly 2022.02.20

Hello World! 어셈블리 분석 - AMD64 어셈블리 기초

Hello, World! 출력을 분석해보자 Hello.c #include //표준 라이브러리 int main(void){//main 함수 선언 printf("Hello world\n");//printf표준함수로 문자열 출력 return 0;//무결성 증명 } 간단한 Hello world 프로그램이지만 많은 원리가 있다. 어셈블리를 분석하려면 당연히 어셈블리어를 알아야 한다. 어셈블리 구조 어셈블리어 수행 방식 Opcode Operand INC RAX 어셈블리는 Opcode와 Operand 그리고 ;로 시작하는 주석이 있다. Opcode는 명령어 Operand는 명령이 수행될 공간 또는 데이터 ; 주석 Opcode Operand1(Destination) Operand2(Source) ADD RBX RAX ..

개발/Assembly 2022.02.09

SQL 데이터 타입 총정리 - SQL Data Type

SQL 에는 다양한 데이터 타입이 있는데 아마도 값의 범위를 이용한 해킹을 방지하거나 데이터를 잘못 다루는 실수로 인한 피해를 줄이기 위해서 그런 것 같다. 다 사용하지는 않고 대표적인 것 몇 개만 외우면 된다. 정확한 수 타입 (Exact Numeric Data Types) bigint -9,223,372,036,854,775,808 9,223,372,036,854,775,807 int -2,147,483,648 2,147,483,647 smallint -32,768 32,767 tinyint 0 255 bit 0 1 decimal -10^38 +1 10^38 -1 numeric -10^38 +1 10^38 -1 money -922,337,203,685,477.5808 +922,337,203,685,4..

개발/DB 2022.02.04

SQLite로 배우는 SQL 표준의 기초

SQL (Structured Query Language) 구조적 질의 언어, 데이터베이스(DataBase)에서 데이터의 효율적인 관리를 하기 위해 만든 언어이다. 각종 서버는 거의 대부분 SQL 기반 DB를 사용한다. 데이터를 직접 다루는 언어이다 보니 보안에 매우 신중하고, 가장 보수적인 문법 규칙을 고수한다. 신중한 입력을 요구받다 보니 자연어에 가까운 명령어를 채택하였다. 언어 특성상 탐욕적 알고리즘을 채택하여 명령어 입력에 매우 신중해야 한다. (특히 DROP) 해킹 공격을 막기 위해 발전을 거듭하여 Secure Coding 기법이 발달하게 되었다. SQL은 Oracle, MS, 등등 여러 기업에서 변조 문법을 추가한 버전(?)이 많아서 가장 먼저 SQL 표준인 ANSI 표준 문법을 배워야 한다...

개발/DB 2022.02.04

RISC vs CISC 차이 - Processor

RISC vs CISC 가 무엇일까? 기술의 발전으로 다양한 프로세서가 등장했다. 구분을 위해 연산 방식에 따라 분류할 때 주로 RISC 와 CISC 로 나눌 수 있다. 구조가 다르기 때문에 컴파일러도 다르다. RISC 에는 ARM 이 대표격이며, CISC 에서는 AMD64 가 대표적이다. 표 CISC vs RISC 요약: C(omplex)ISC 는 코드 단순/계산 복잡,단순처리 R(educed)ISC 는 코드 복잡/계산 단순,병렬처리 CISC (복잡 명령어셋 컴퓨터) RISC (단순 명령어셋 컴퓨터) 1 하드웨어에서 주로 처리(Memory-to-Memory) 소프트웨어에서 주로 처리 (Register-to-Register) 2 멀티 클럭 동작 싱글 클럭 동작만 3 코드 용량 작음 코드 용량 큼 4 주소..

개발/Assembly 2022.02.03

repl.it - 진정한 웹 IDE, 어디서나 실시간으로 코딩하자!

repl.it 광고가 아니다. git 과 github 를 사용해본 적이 있는가? github는 파일을 웹에서 바로 컴파일헤서 사용하기 힘들다. 그런 번거로움을 덜기 위해 수많은 웹 컴파일러가 나왔는데 repl.it도 그중 하나이다. repl.it은 GUI 콘솔도 지원한다. git 는 분산 버전 관리 시스템 이면서 실시간 소통을 하기는 어렵다. 도중에 리포지토리를 pull 하여 릴리스를 업데이트 해줘야하는 번거로움이 존재한다. 그래서 실시간 코딩(Live Code Editing)이 나왔다. 실시간 코딩은 VS 도 강력하지만 repl.it 은 web 에서 사용가능하고 따로 복잡한 설정이 필요없다는 것이 강점이다. github 계정에 있는 repository를 fork 하여 사용할 수 있다. 이것으로 gith..

개발/개발환경 2021.03.21

gcc 사용법 - linux용 C/C++ 컴파일러, 세계의 표준이 되다

gcc (GNU Compiler Collection) GNU 프로젝트의 오픈 소스 컴파일러 Unix 용 C 컴파일러였다. 하지만 현재는 다양한 언어를 지원하면서 거의 표준이다. gcc는 많이 쓰이기 때문에 gcc 사용법을 잘 익혀놓아야 한다. 버전 역사 열람 GNU 컴파일러 모음 위키백과, 우리 모두의 백과사전. GNU 컴파일러 모음(GNU Compiler Collection, 줄여서 GCC)는 GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러이다. 자유 소프트웨어 중에 가장 잘 알려진 것 ko.wikipedia.org gcc 사용법 $ gcc main.c #a.out라는 바이너리 파일로 생성된다. $ /a.out #실행 gcc를 리눅스에서 기본으로 실행하면 a.out 으로 생성된다. (리눅..

개발/C Series 2021.03.21