본문 바로가기

Algorithm

(10)
[c++] 16진수를 10진수로 16진수를 10진수로 바꾸는 방법을 알아보자. 이상하게 저번에는 함수가 없다고 알고 있어, 직접 함수를 만들어줬는데 다시 찾아보니까 함수가 있다.. 직접 만들어야 하는 경우가 있다면 항상 변수의 타입을 주의하자.. 큰수로 가면 계산이 달라져 결과값이 달라진다. 공식적으로는 함수가 존재하니 그냥 이 방법을 쓰는 것이 현명! #include using namespace std; int main() { cout
[c++] vector 중복값 없애기 swea 문제를 풀다가 알게된 vector의 원소 중 중복값 없애기! 정말 간단하게 가능하다. #include #include #include using namespace std; int main(){ vector v; v.push_back(2); v.push_back(4); v.push_back(5); v.push_back(2); v.push_back(7); v.push_back(4); //2,4,5,2,7,4 순서대로 저장됨. sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); /* algorithm 라이브러리에 있는 sorting 함수로 원소들을 정렬. algorithm 라이브러리에 있는 unique 함수: 중복된 값을 맨..
[c++] 정렬/솔팅 알고리즘 정리(삽입정렬, 선택정렬, 버블솔트, 퀵솔트, 병합정렬) 정렬 알고리즘 Sorting algorithm에는 흔히 5가지를 사용한다. 1. 삽입정렬(Insertion sort) :O(n^2) 2. 선택 정렬(Selection sort) : O(n^2) 3. 버블솔트(Bubble sort) : O(n^2) 4. 퀵솔트(Quick sort) : O(nlgn) 5. 머지솔트(Merge sort) : O(nlgn) 자, 이제 이 중에 원하는 알고리즘을 사용해보자. ʘ‿ʘ 참고로, 이번 포스팅에는 알고리즘 방법과 시간복잡도 그리고 슈도 코드만 써놓을 것이다. 소스코드를 복붙하여 가져다 쓰는 방법보다, 방법만 숙지하고 직접 적용해가며 배우는 것이 자신에게 훨씬 좋다. 사실 본인이 복붙해서 매번 쓸까봐도 있지만... 삽입 정렬(Insertion sort) 삽입 정렬은 2번..
[c++]최소 공배수와 최대 공약수 구하기 최소 공배수와 최대 공약수 최소 공배수와 최대 공약수를 구하라고 하면 중학생들이 아마 가장 잘 할 것이다. ಠ◡ಠ (인정?) 옛날에 학창시절에 배웠던 기억을 떠올리면 일단 두 수의 약수들을 구할 것이다. 예시를 보자. [3, 12] 3의 약수: 1,3 12의 약수: 1, 2, 3, 4, 6, 12 최소 공배수: 3 최대 공약수: 12 물론, 고등학교 때 유클리드 호제법이라는 것을 배워 조금 더 수훨하게 구했을 것이다. 우리는 유클리드 호제법을 이용하여 코딩을 하는게 가장 합리적인 방법이겠징. 유클리드 호제법 https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95 유클리드 호제법 - 위키백과,..
[Stack] 백준 2493번: 탑 이번 문제는 정말 너무너무 고생해서 푼 문제이다. 시간복잡도 때문에!!! (`ー´) 스택으로 푸는 문제 2493번 탑에 대해서 알아보자. 이 말들을 간단히 추려보면, 각자 다른 높이의 탑이 있는데 왼쪽으로 레이저를 쏘면 누가 맞겠는가! 그 인덱스를 출력하라는 문제이다. 조금만 자세히 읽어보면 간단히 이해할 수 있다. 여기서 나는 이 문제를 스택으로 풀기 마음 먹었으니 스택으로 푸는데... 정말 많이 고민하고 많이 시도해봤다는걸 느낄 수 있겠는가... 흑... 아무튼 빨리 본론으로 넘어가자. 문제 풀기 전에 주의 할 점 일단, 문제를 풀기전에 주의할 점이 있다. 1. 첫째 줄에 탑의 수를 나타내는 정수 N이 주어진다. N은 1 이상 500,000 이하이다. 둘째 줄에는 N개의 탑들의 높이가 직선상에 놓인 ..
[Stack] 백준 1918번: 후위 표기식 이번에는 백준 스택 문제를 풀면서 꽤 중요하다고 생각한 1918번 후위표기식에 대해 알아보자! (ت) 후위 표기식이란? 문제에 나와있지만, 한번 더 설명을 하자면 우리는 a+b나 a*b+(c-d)와 같은 중위 표기식이 익숙하다. 수식은 일반적으로 중위표기식을 포함해 3가지 표기법으로 표현할 수 있다. 1. 중위 표기식 우리들이 일반적으로 알고 있는 표기식 Ex) a+b, a*b-c, A+B*(C-D) 2. 전위 표기식(Prefix notation) 연산자가 피연산자 앞에 위치하는 표기식 Ex) +ab, -*abc, +A*B-CD 3. 후위 표기식(Postfix notation) 연산자가 피연산자 뒤에 위치하는 표기식 Ex) ab+, ab*c-, ABCD-*+ 이 위 세가지 방법 중 이 문제에서 다룰 표기..
[Stack] 백준 3986번: 좋은 단어 이 문제는 문제만 이해하면 금방 풀 문제이다. stack을 이용해서 다음 문자와 stack에 있는 top 문자와 같으면 두 문자를 pop해주면 되는 문제! 자세한 내용은 코드를 직접 보면서 참고하자. 여기서 한번더 집고 가야 할 문제는 cin과 string::getline() 함수를 같이 쓰면 헷깔리게 되는 점에 대해 이야기 하려고 한다. getline에 대한 포스팅은 다음 포스팅에 더 자세히 나와있다. > https://summer-story.tistory.com/7 [기초다지기] 백준 문제집으로 시작하기 #1 어떻게 시작하면 좋을까, 알고리즘? 코딩은 좀 해봤는데 뭔가 기초가 부족한 것 같기도 하고, 기초를 다지고는 싶은데 어떻게 시작해야될지는 모르겠고.. 나름 알고리즘을 공부한다고 백준 알고리즘을 ..
[자료구조] 백준 Stack 자료구조: 스택 Stack 친구들과 스터디를 하면서 첫번째 주제로 잡은 자료구조. 자료구조란 무엇이가. 우리들의 친구 위키는 이렇게 말한다. 자료구조(資料構造, 영어: data structure)는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다.[1][2][3] 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령를 의미한다.[4] 신중히 선택한 자료구조는 보다 효율적인 알고리즘을 사용할 수 있게 한다. 여기서 효율적인 접근 및 수정을 가능케하는 자료의 관리, 저장을 위해 우리는 stack, queue, heap 등과 같은 구조를 사용한다. 여기서 스택에 대해 가장 먼저 살펴볼 예정이다! 역시나 ..