>문제 > 핵심 ..배열 인덱스? 스택 >풀이과정 실버 4길래 그래도 뭔가 좀 있지 않을까 했는데 매우 쉽게 풀었다. "정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다." 그러므로, "0"이 들어오면 앞에 무엇이든지 지울 숫자가 하나 이상은 있다는 이야기이다. 일단 e 에 정수를 입력받는다. idx = 0부터 출발 만약 e가 "0" 이라면, ar[--idx] = 0 으로 0 이전에 있던 값을 0으로 바꾼다. 만약 e가 "0" 이 아니라면, ar[idx++] = e 로 현재 위치한 인덱스에 값을 넣는다. 이렇게 반복문을 한번 돌고 난 이후에 다시 반복문을 돌면서 남아있는 값을 sum 하여 출력하면 끝. 문제를 풀고나서 다른사람이 쓴 코드를 보니까 원래는 스택으로 푸는 문제인 것 같았다. ..
>문제 > 핵심 스택 >풀이과정 어제 풀었던 4949번 문제랑 거~~의 똑같다. 어제 코드 조금만 고쳐서 냈다. '(' 가 입력으로 들어오면 스택에 push ')' 가 입력으로 들어오면 스택에서 pop. 이때 pop된 값이 반드시 '(' 이어야 짝이 맞음. 짝이 안맞는 경우 chk=0 후 break. 문자열을 다 돌고 나왔을때, 스택이 비어있지 않거나, chk = 0 인 경우 -> 짝이 안맞으므로 NO. 이외는 YES. 위 과정을 N번 반복!.. 인데 이대로 끝내기 아쉬워서 다른 방법을 사용한 코드도 한번 짜봤다. chk = 1, cnt = 0에서 시작해서 '('가 입력으로 들어오면 cnt+=1; ')'가 입력으로 들어오면 cnt-=1;. 깨달은점 스택은 어려웡 >코드 · 스택을 이용한 방법 #defin..
>문제 > 핵심 문자열 입력 스택 >풀이과정 괄호 비교! 자료구조 수업에서 스택을 배워본 사람이라면 한번쯤 만들어본 코드일 것이다. 나도 그럴 줄 알고 쉽게 만들 수 있을 줄 알았는데 스택도 오랜만에 하다보니 가물가물해서 쪼끔 시간이 걸렸다. 이 문제를 통해서 문자열 입력에 대해 다시 공부할 수 있었다. >>문자열 입력 함수 · scanf("%s", ar) scanf의 %s는 개행문자(\n), 공백문자, 탭 문자 직전까지를 하나의 문자열로 인식한다. 그래서 scanf를 이용해 "Hello World"를 입력한다면, 출력할때 "Hello"까지밖에 나오지를 않는다. 그리고, 이 scanf가 개행문자 직전까지만 문자열로 입력을 받으므로, 내가 입력했던 엔터('\n')이 버퍼에 덩그러니 남게된다. 그래서!! s..
>문제 > 핵심 큐 >풀이과정 문제를 읽어보니,, 스택이나 큐를 사용해야 할 것 같다는 느낌이 왔다. 제일 위에 있는 값을 뽑아 제일 아래로 넣는 과정을 봤을때 큐가 더 적합하다는 생각에 큐로 풀었다. 선입선출! 근데 문제를 풀면서 두개의 난관이 있었다. 1. 50만칸이나 되는 배열 선언? 처음에는 main() 부분에 Queue를 만들어 사용하려 했다. 그런데 그 경우에는 다음과 같은 에러메세지가 뜬다. - 이 경고는 미리 설정된 임계값을 초과하는 스택 사용량이 함수에서 검색되었음을 나타냅니다. ~~ 문제를 해결하려면 일부 데이터를 힙 또는 다른 동적메모리로 이동할 수 있습니다. 그럼 우리는 50만칸짜리 배열을 결국 만들 수 없는것일까?? 아니다. 지역변수가 아니라 전역변수에서 배열을 선언하면 50만칸짜..
>문제 > 핵심 최빈값 출력 시간복잡도 O(n^2) 사용 X -> (이중반복문 X) 반올림 >풀이과정 쉬울줄 알았는데.. 최빈값 출력때문에 골탕먹었다. 1. 산술평균 N개의 수들의 합을 N개로 나는 값. 그냥 우리가 평소에 나누기 하는 방식이 산술평균이다. 이거 보니까 이 문제랑 관련은 없는데 고딩때 배운 산술기하 평균이 생각나서 다시 한번 찾아봤다. · 산술평균 (Arithmetic mean) -> 합의 평균, 우리가 평소에 평균내는 일상적인 방식 · 기하평균 (Geometric Mean)-> 곱의 평균, 비율평균, 각 요소를 곱한 후 n 제곱근을 씌운 값. 물가상승률이나 투자 수익률 계산에 쓰인다. 비트코인에 100만원을 투자하고 20% 수익을 낸 이후에 다른 코인에 투자했다가 20% 손실을 봤다고 ..
>문제 > 핵심 반복문 돌기. 효율적인 알고리즘을 강구해보자. >풀이과정 [소수 : 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수. ] 소수 찾기 알고리즘 기본서에 꼭 나오는 내용으로 기억한다. 물론 나는 다 까먹었지만. 소수를 찾는데는 여러 전략이 있다. 제일 쉬운건 역시 2부터 n-1까지 일일히 나머지를 해보는것. 코드는 간단하지만 만약 수가 커진다면 시간적으로 그닥 효율적이지 못하다. 나도 기억이 가물가물해서 구글링으로 찾아봤다. 1. 절반까지만 반복문 돌기 소수는 1과 자기자신만으로 나누어 떨어지는 수이므로, 약수가 1과 자기자신 밖에 없다. 24는 약수로 1, 2, 3, 4, 6, 8, 12, 24 를 갖는다. 그리고 1과 24, 2와 12, 3과 8, 4와 6은 하나의 짝을 이루어..
>문제 > 핵심 이진탐색 알고리즘! >풀이과정 어떻게 풀까 고민하다가.. 문제에서 정수의 범위를 -2^31 ~ 2^31 로 정해놓은 걸 보고 [+] 정수를 보관하는 배열이랑 [-] 정수를 보관하는 배열 두개를 만들어서 따로 저장한 다음, 반복문을 돌리면서 값을 찾으면 시간이 절반만 걸리지 않을까 싶어서 구현해봤는데 다행히 맞았다고 떴다. 근데 이런식으로 짜면 아무래도 낭비되는 공간이 많아서 좋은 알고리즘이라고 하기는 어려울 것 같다. 그래서 예전에 배웠던 이진탐색트리를 구현해 탐색하는 코드를 짜기로 했다. 예전에 수업시간때 배웠던 코드를 다 기록으로 남겨놨더니 복습하는데 정말 큰 도움이 된다. 그래서 이 블로그를 쓰는거기도 하고.. 기록을 남겨놓으면 언젠가는 도움이 되겠지. 이진탐색트리의 성능은, 최선의..
>문제 > 핵심 정렬을 잘하자 >풀이과정 오늘 정렬문제만 주구장창 푸는 것 같다. 풀다보니 비슷한 유형의 반복이라는 느낌이 든다. 역시 문제를 많이 접해봐야 어떻게 해결해야 할지에 대한 느낌도 빨리빨리 오는 것 같다. 이것도 qsort 함수를 이용해 바로 풀었다. 다른 문제와 같이 크게 어렵지 않았다. 11650번 문제랑 11651번 문제랑 조건만 살짝 달라서 그냥 한 페이지에 같이 묶었다. >깨달은점 문제를 많이 풀어봐야 유형파악도 빨리 되고 감이 잘 잡힌다. 앞으로도 열심히 풀어보자. >코드 #define _CRT_SECURE_NO_WARNINGS #include #include typedef struct { int x; int y; }coord; int compare(const void* first..