반응형 전체 글84 [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] 백준 1094번 막대기 막대기. 언뜻 간단하게 보이는 문제였지만 어떻게 풀지 고민은 한 10분 한 것 같다. 어떻게 풀지보다는 어떻게 예쁘게 코딩하지? 이런 생각만 했다. 어쩌면 나는 수학에 더 약한 걸지도 모른다. 이 문제를 배열로 접근해 풀려고했으니. 수학공부좀 해야겠다 #include int main() { int X; int stick; int i; int sum = 0; scanf("%d", &X); stick = 0; for (i = 64; i > 0; i /= 2) { if (i > X) { continue; } else if (i == X) { stick = 1; break; } if (sum + i 2018. 7. 9. [C] 백준 2839번 설탕 배달 때론 무식하게 접근하는 것이 싸게 먹힐때도 있는 것 같다. 효율적인 코드를 짜려다가 다 실패하고 무식하게 2중 for문을 이용해 맞췄다. #include int main() { int n; scanf("%d", &n); for (int i = 0; i 2018. 7. 8. [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] 백준 2941번 크로아티아 알파벳 정답률이 30%대 이하는 아니지만, 특이한 케이스로 헤맨 문제여서 올렸다. 방식은 우선 크로아티아 알파벳을 문자열 내에서 다 찾아내 지워준다. 단, 지운다음에 다음 순회에서 지우고 합쳐진 문자열에서 크로아티아 알파벳으로 오인될 수 있는 경우가 있기 때문에 중간에 0을 넣어준다. ex 1) nljj 에서 lj를 찾고 알파벳 개수를 증가 시킨 뒤, lj를 지우면 nj가 된다. 문자열 nj가 크로아티아 알파벳으로 오인되어 2개로 카운트하게 된다. ex 2) nljj 에서 lj를 찾고 알파벳 개수를 증가 시킨 뒤, lj를 지운다. strstr을 이용해 찾아낸 lj가 처음 나타난 인덱스에 '0'을 집어넣고, 그 다음인덱스부터 붙여 넣는다. 그럼 문자열은 n0j가 되고, 알파벳을 잘못 셀 경우가 사라진다. 그 다음.. 2018. 7. 5. 이전 1 ··· 10 11 12 13 14 다음 반응형