목록전체 글 (745)
쌓고 쌓다
https://www.acmicpc.net/problem/2841 2841번: 외계인의 기타 연주 첫째 줄에 멜로디에 포함되어 있는 음의 수 N과 한 줄에 있는 프렛의 수 P가 주어진다. (N ≤ 500,000, 2 ≤ P ≤ 300,000) 다음 N개 줄에는 멜로디의 한 음을 나타내는 두 정수가 주어진다. 첫 번째 정수 www.acmicpc.net 전체 코드 #include #include using namespace std; int N, P; int res = 0; stack s[7]; int main(void) { cin >> N >> P; int a, b; for (int i = 0; i > a >> b; if (s[a].empty()) // 비었으면 그냥 누르기 { ..
스택의 특징 LIFO ( Last-In First-Out ) : 후입선출로 가장 늦게(최근에) 들어온 데이터가 가장 먼저 나감 프링글스 통을 스택이라고 생각하자 스택 ADT is_empty(s) : 스택이 비어있는지 검사 is_full(s) : 스택이 가득 찼는지 검사 push(s, e) : 스택의 맨 위에 요소 e를 추가 pop(s) : 스택 맨 위의 요소 삭제 스택 생성 #define MAX_SIZE 10 typedef int element; // 추후 int형 스택을 다른 자료형으로 바꿀때 이부분만 수정하면 편리함 typedef struct { element stack[MAX_SIZE]; int top; }StackType; init 함수 void init(StackType* s) { s->top ..
Vi 에디터 터미널에서 vi [filename]을 입력하면 시작된다. 만약 파일이 존재 시 그 파일을 열고, 존재하지 않는다면 새로 파일을 만든다. 종료 시 command mode로 아래의 문장을 입력한다. :q! ( 저장 없이 종료 ) :wq ( 저장하고 종료 ) Insert mode i : 현재 커서의 앞에 입력 (현재 커서 자리에 입력) a : 현재 커서의 뒤에 입력 (현재 커서 다음 자리에 입력) o : 커서 밑에 빈 행을 추가해 입력 (다음 행에 입력) I : 행의 맨 앞에 입력 A : 행 마지막 부분에 입력 O : 커서 윗 행에 빈 행을 추가해 입력 (커서가 위치한 행의 앞 행에 입력) Command mode ESC를 누르면 명령 모드로 전환 Extended command ( Ex mode )..
희소행렬을 2차원 배열을 통해 전체를(0도 포함해서) 저장해버리는 방법 장점: 행렬의 연산이 간단해진다. 단점: 대부분의 항이 0인데 메모리 낭비이다. 0이 아닌 요소들만 구조체를 이용해서 저장하자 장점: 메모리 공간 절약 단점: 행렬의 연산들의 구현이 복잡 아래의 코드는 구조체를 이용해 0이 아닌 요소들만 있는 행렬의 덧셈을 하는 코드이다. #include using namespace std; #define ROWS 3 #define COLS 3 #define MAX_TERMS 10 typedef struct Element { int row; int col; int value; }Element; typedef struct sparse_matrix { Element data[MAX_TERMS]; int ..
리터럴(literal) 프로그램에 직접 표현한 값을 말한다. 정수, 실수, 문자, 논리, 문자열 타입 모두 리터럴이 있다. 정수 리터럴의 종류 유형 설명 사례 10진수 0으로 시작하지 않는 수 15 -> 15 (10진수) 8진수 0으로 시작하는 수 015 -> 13 (=1*8+5) 16진수 0x로 시작하는 수 0x15 -> 21(=1x16+5) 2진수 0b로 시작하는 수 0b0101 -> 5 (10진수) int n = 15; // 십진수 15 int n = 015; // 015는 8진수로서 십진수 13 int n = 0x15; // 0x15는 16진수로서 십진수 21 int n = 0b0101; // 0b0101은 2진수로서 십진수 5 - 정수 리터럴은 int 타입으로 자동으로 컴파일된다. - long ..
"ls -al" 명령어로 파일들을 자세히 보면 앞부분에 권한 정보가 있다. 아래와 같은 형태이다. drwxr-xr-x 앞의 첫 한자리는 File type을 갖는다. 그후 3개씩 각 영역을 나눠 Owner, Group, Others로 나눈다. File type - : 일반파일 d : 디렉토리 l : 링크 파일 b : Block device file c : Character device file Owners : 파일 또는 디렉토리의 창조자이다. (나) Group : Owner의 그룹이다 ( 개발자들 ) Other : Owner과 Group이 아닌 모든 유저들 ( 우리 대학교 학생들 ) 각 Permission은 3개씩 나눠지는데 모두 3칸은 r w x로 이루어져 있다. 각 칸에 해당 스펠링 (r, w, x)가..
리눅스에서 디렉토리 구분은 /(슬래시), 윈도우에서는 (역슬래시) 리눅스의 디렉토리는 윈도우에서 폴더 개념이다. 리눅스의 최상위 디렉토리는 / 이다. 그 아래 다양한 디렉토리 들이 있다. /bin : 기본 명령어 /sbin : 부팅관련 명령어 /etc : 환경설정 파일 /usr : 명령어, 시스템 프로그램, 라이브러리 루틴 /kernel : 커널 이미지 /dev : 디바이스 파일 /home : 사용자 홈디렉토리 /export : NFS 마운트 /lib 라이브러리 /var : 메일, 로그 스풀링, 웹서비스 /tmp : 임시파일 /proc : 시스템 정보를 저장하는 가상 파일 시스템 /lost+found : 훼손된 파일 장소 /cdrom : cdrom /mnt : 외부 장치 마운트 Partition "sd"..
https://www.acmicpc.net/problem/15486 15486번: 퇴사 2 첫째 줄에 N (1 ≤ N ≤ 1,500,000)이 주어진다. 둘째 줄부터 N개의 줄에 Ti와 Pi가 공백으로 구분되어서 주어지며, 1일부터 N일까지 순서대로 주어진다. (1 ≤ Ti ≤ 50, 1 ≤ Pi ≤ 1,000) www.acmicpc.net #include #include using namespace std; int T[1500001]; int P[1500001]; int dp[1500051]; int N,res=0; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N; for (int i = 1; i > T[i..