목록Algorithm (82)
촉촉한초코칩
문제 알고리즘 입문방 오픈 채팅방에서는 새로운 분들이 입장을 할 때마다 곰곰티콘을 사용해 인사를 한다. 이를 본 문자열 킬러 임스는 채팅방의 기록을 수집해 그 중 곰곰티콘이 사용된 횟수를 구해 보기로 했다. ENTER는 새로운 사람이 채팅방에 입장했음을 나타낸다. 그 외는 채팅을 입력한 유저의 닉네임을 나타낸다. 닉네임은 숫자 또는 영문 대소문자로 구성되어 있다. 새로운 사람이 입장한 이후 처음 채팅을 입력하는 사람은 반드시 곰곰티콘으로 인사를 한다. 그 외의 기록은 곰곰티콘을 쓰지 않은 평범한 채팅 기록이다. 채팅 기록 중 곰곰티콘이 사용된 횟수를 구해보자! 입력 첫 번째 줄에는 채팅방의 기록 수를 나타내는 정수 N 이 주어진다. (1≤N≤100000) 두 번째 줄부터 N 개의 줄에 걸쳐 새로운 사람의..
문제 도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다. 도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다. 바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주..
11-1 해시법 해시법 (hashing) 데이터를 저장할 위치 (인덱스)를 간단한 연산으로 구하는 것 해시값 (hash value) : 배열의 키 값(각 요소의 값)을 배열의 요소 개수로 나눈 나머지를 다시 정리한 값 > 데이터에 접근할 때 사용한다. 해시 테이블 (hash tabe) : 해시 값이 인덱스가 되도록 원래의 키 값을 저장한 배열 해시 함수 (hash function) : 키 값을 가지고 해시 값을 만드는 과정 > 나머지를 구하는 연산 또는 나머지 연산을 다시 응용한 연산 버킷 (bucket) : 해시 테이블의 각 요소 * 해시와 해시 함수 충돌을 피하기 위해 해시 함수는 해시 테이블 크기 이하의 정수를 가능한 치우치지 않도록 (중복되지 않도록) 골게 분포되도록 만들어야 한다. 해시 테이블 ..
10-1 트리 트리 (Tree) : 데이터 사이의 계층 관계를 나타내는 자료구조 트리 구성 요소 각각의 노드(node)는 가지(edge)를 통해 다른 노드와 연결된다. 루트 (root) : 가장 윗부분에 위치하는 노드 리프 (leaf) : 트리의 가장 아랫부분에 위치하는 노드 (더이상 뻗어나갈 수 없는 마지막에 노드가 위치한다.) 안쪽 노드 : 루프를 포함하여 리프를 제외한 노드 자식 (child) : 어떤 노드로부터 가지로 연결된 아래쪽 노드 (* 노드는 자식을 여러 개 가질 수 있다.) 부모 (parent) : 어떤 노드에서 가지로 연결된 위쪽 노드 (* 노드는 1개의 부모를 가진다.) 형재 (sibing) : 같은 부모를 가지는 노드 조상 (ancestor) : 어떤 노드에서 가지로 연결된 위쪽의 ..
09-1 선형 리스트 리스트 : 데이터를 순서대로 나열한 (줄지어 늘어놓은) 자료구조 선형 리스트 (linear list), 연결 리스트 (linked list) 리스트의 데이터 : 노드(node), 요소(element) 각각의 노드 : 데이터와 다음 노드를 가리키는 포인터를 가지고 있다. 첫번째 노드 : 머리 노드(head node), 마지막 노드 : 꼬리 노드(tail node) 하나의 노드에 대해 바로 앞에 있는 노드 : 앞쪽 노드 (predecessor node), 바로 뒤에 있는 다음 노드 : 다음 노드 (successor node) 배열로 선형 리스트 만들기 다음 노드 꺼내기 : 1만큼 큰 인덱스를 갖는 요소에 접근하기 노드 삽입, 삭제 과정 : 모든 요소를 하나씩 뒤로 밀거나 앞으로 당겨야 ..
08-1 문자열의 기본 문자열 (String) 문자의 나열을 나타낸 것 문자 하나만 있어도 좋고, 비어 있어도 상관없다. 빈 문자열도 문자열이다. 문자열 리터럴 (String iteral) 문자의 나열을 2개의 큰따옴표(")로 묶은 것 문자열 안의 문자는 메모리 공간에 연속으로 배치된다. 컴퓨터는 문자열 리터럴의 끝을 나타내기 위해 널 문자(null character)를 자동으로 추가한다. 널문자의 비트 값은 0이다. 문자열 리터럴 값은 바꿀 수 없다. 자유롭게 읽고 쓰는 문자열은 배열로 구현해야 한다. 문자열을 구성하는 모든 문자의 값을 16진수와 2진수로 출력하기 #include #include void str_dump (const char *s) { do { int i; printf("%c %0*X..