본문 바로가기
반응형

C20

[C] 배열 기반 스택 (array stack) 배열로 만든 스택은 연결리스트에 비해 매우 간단해서 좋다. 그래서 빠르게 코딩을 해야할 때 자주 사용한다. 하지만 C++에는 stack 헤더가 있다. 배열로 구현할 때의 장점은 연결리스트에 비해 메모리를 아낄 수 있다는 점, 그리고 구조가 간단하다..! 제한을 걸어놓은 과제나 문제를 풀 때 용이하다. 단점은 크기가 제한되어 있다는 것. 하지만 realloc이 있다면? 연결리스트로 구현했던 코드와 다른 점은 실행하고 명령어 입력 전에 스택의 크기를 먼저 입력한다. 명령어 push N -> 정수 N을 push한다 pop -> 스택을 pop하고 그 값을 출력한다. 스택이 비어있으면 Stack Empty 출력 size -> 스택의 크기를 출력한다. top -> top에 위치한 값을 출력한다. 스택이 비어있으면 .. 2018. 7. 10.
[C] 단일연결리스트 기반 스택 (single linked list stack) C로 스택을 구현할 때 가장 많이 쓰는 자료구조중 하나가 연결리스트이다. 크기에 제한없이 스택을 사용할 수 있다는 장점이 있으나 메모리 측면에서 배열을 이용했을 때보다 비효율적이다. 연결리스트에 있는 모든 노드에는 항상 자기 이외의 노드를 가리키는 포인터 변수가 1개 이상 존재하기 때문이다. 본 프로그램 코드는 단일 연결리스트 기반으로 만든 스택을 사용자가 직접 이용할 수 있게 만든 것이다. 스택에 들어갈 수 있는 값은 하나의 정수이다. 명령어 push N -> 정수 N을 push한다 pop -> 스택을 pop하고 그 값을 출력한다. 스택이 비어있으면 Stack Empty 출력 size -> 스택의 크기를 출력한다. top -> top에 위치한 값을 출력한다. 스택이 비어있으면 Stack Empty 출력.. 2018. 7. 9.
[C] scanf로 공백포함 문자열 입력받기 공백을 포함한 문자열을 받을 때, scanf("%s")로는 해결되지 않습니다. 스페이스 또한 입력의 끝으로 받기 때문입니다. 그 때마다 필연적으로 gets를 쓸 수 밖에 없는데, scanf만을 이용해 공백까지 받아낼 수 있는 방법을 알려드리고자 합니다. #include int main() { char str[100]; scanf("%[^\n]s", str); printf("%s\n", str); return 0; } 위와 같은 코드로 scanf만을 이용해 공백을 포함한 문자열을 받을 수 있습니다. %[^'문자']는 해당 문자가 나오기 전까지 모든 입력을 받는다는 뜻입니다. 그러므로 %[^\n]s는 개행(엔터)가 나오기 전까지 모든 문자열을 받겠다는 얘기죠! 공백도 포함해서요! #include int ma.. 2018. 7. 5.
[C++] 백준 1929번 소수 구하기 (에라토스테네스의 채) m과 n을 입력받고 m과 n 사이에 있는 소수를 출력하는 프로그램이다. 단, 에라토스테네스의 채를 이용해서 풀어야한다. 미리 1~1000000 까지의 수 중에서 소수인 수를 걸러내고, m부터 n까지의 값 중 소수인 것을 출력한다. #include int main() { bool num[1000001]; int m, n; int i, j; scanf("%d %d", &m, &n); for (i = 2; i 2018. 7. 4.
[C] 백준 1157번 단어 공부 방학에 돌입하고 알고리즘 공부도 할 겸 백준을 하나씩 풀어보고 있다. 다시 시작한 지 얼마 안돼서 단계별로 풀어보기부터 하고있는데, 정답률이 30%대 이하인 문제를 풀면 코드를 포스팅해서 기록해야겠다. 나름의 만족감을 느끼기 위해! 단어 공부 문제는 알파벳 대소문자로 된 단어를 입력하면 가장 많이나온 알파벳이 무엇인지 출력하는 문제이다. 단, 가장 많이나온 알파벳이 여러개면 '?'를 출력한다. 대소문자 구분 없이 알파벳을 세기 때문에 단어를 입력 받은 뒤 바로 전부 대문자로 바꿔주는 작업을 했다. 변수는 가장 많은 알파벳의 개수, 가장 많이 나온 알파벳의 빈도 수(몇 번 나왔는지), 가장 많이 나온 알파벳 이렇게 세 가지로 사용했다. 이중 for문으로 순회할 때 j의 크기가 기준인 i보다 작을 때 str.. 2018. 7. 3.
[C] 백준 1152번 단어의 개수 백준에 단계별로 풀어보기 - 1차원 배열 사용하기에 있는 1번째 문제인 단어의 개수 문제는 이상하리 만큼 정답 비율이 낮다. 나도 예전에 풀었던 흔적이 있는데, 가차없이 틀렸다.. 10번정도.. 그동안 풀었던 모든 코드에는 간과한 경우가 두 가지 있는데, 첫 번째는 처음 나오는 공백, 두 번째는 마지막에 나오는 공백이었다. 그래서 방식을 바로 전 인덱스에서 읽어낸 문자가 공백인지를 판단하는 변수를 따로둬서 연속된 공백이 포함된 문장도 처리할 수 있도록 했다. 바로 전 인덱스에서 공백이고, 현 인덱스에서 문자이면 새로운 단어가 나타난 것이다. 그 때 단어의 개수를 증가시킨다. 단, 문장의 처음은 공백이 없을 수도 있으므로 공백이었는지를 판별하는 isSpace를 1(공백이 나옴)로 초기화한다. #includ.. 2018. 7. 2.
반응형