목록분류 전체보기 (183)
on my way
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/B3HdP/btrhetr7Dad/b4aWlkfg41fZmnb3qkzyu0/img.png)
* 생각한 아이디어 및 문제 풀이 문제 자체가 merge 정렬의 과정이라고 생각했다. merge 정렬을 하는 과정에서 마지막으로 합치는 과정을 생략하고 출력하면 되겠다고 생각했다. * 코드 #include using namespace std; #define MAX_SIZE 1048576 int sorted[MAX_SIZE]; int n, person; void merge(int list[], int left, int mid, int right){ if( (right-left) > (n/person) ) return; int i, j, k; i = left; j = mid+1; k = 0; /* 분할 정렬된 list의 합병 */ while(i
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bvAM3K/btrhdVPX9CB/zIkdYKkm30p0SI4JcuHjt0/img.png)
* 생각한 아이디어 및 문제 풀이 입력받은 수에 0이 없으면 -1을 출력한다. 수를 정수로 입력받으면 각 값을 받고 벡터를 넣을 때 나머지나 몫을 구해야할 것 같아서 그냥 문자열로 받아야 된다고 생각했다. 출력값은 내림차순으로 정렬한다. 그러나 도저히 아이디어가 떠오르지 않아서 찾아보니, 30의 배수가 되는 조건은 반드시 끝자리가 0이고, 모든 자리의 수를 더하면 3배수라는 것을 알게 되었다. * 코드 #include #include #include #include using namespace std; int main(int argc, char const *argv[]){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); string N; long..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/lfNZ8/btrhddwOriR/smKtIdiPS4Ep3ahS53ydJk/img.png)
* 생각한 아이디어 및 문제 풀이 메모리가 관건이라고 생각을 했다. 단순히 크게 배열을 선언하는 것 보다 벡터를 선언해서 들어오는 수마다 push를 하는게 효율적이라고 생각했다. 그리고 algorithm의 sort로 내림차순을 지정하면 될 것 같다고 생각했다. * 코드 #include #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, input; vector v; cin >> N; for(int i=0; i> input; v.push_back(input); } sort(v.begin(), v.end(), greater()); for(auto& i..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c2LqRc/btrgMtymW8D/ztfyWIQfzggKdUKqLYtuK0/img.png)
Sorting Algorithm 정렬 알고리즘 Big O는 알고리즘의 퍼포먼스를 이해하기 쉽고 효율적으로 작성하는 방법이다. 그러나 Big O가 모든 알고리즘을 완벽하게 설명하는 것은 아니다. 알고리즘이 같은 Big O지만 각 퍼포먼스가 다르기 때문이다. 정렬이란 무엇을 정리하는 것이다. 이진 검색에서 빠른 알고리즘을 사용하려면 배열 정렬을 해야한다. 1. Bubble Sorting 버블 정렬 버블은 그렇게 좋은 알고리즘은 아니다. 그러나 이해하기 쉬운 알고리즘이다. 정렬의 입문으로 좋은 토픽이다. 배열의 2개의 아이템을 선택하고, 비교한다. 왼쪽이 오른쪽보다 크면 swap하며 바꾸는 방식이다. 비교하고 swap하며 반복하고, 값이 큰 아이템이 끝까지 bubble로 이동하는 것이다. # include #..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bAXJaQ/btrgBKhcWBA/MlS7EZ27gs5YNzlF5t8J0k/img.png)
시간복잡도란 알고리즘 스피드의 표현법이다. 같은 알고리즘이더라도, 컴퓨터마다 속도가 다르다. 왜냐하면 컴퓨터라는 하드웨어가 결정하기 때문이다. 따라서 알고리즘은 완료까지 걸리는 절차의 수로 표현이 된다. Linear Search(선형 검색) 선형 검색이란 한개씩, 한개씩 검색을 하는 것이다. 따라서 데이터가 10개라면, 10개의 스텝이 필요한 것이다. 인풋 사이즈가 N이라면, 선형 검색 알고리즘은 N번이 필요하다. 선형 검색의 시간 복잡도는 O(N)이다. 따라서 선형검색은 y=x 그래프 모양이다. 빠르고, 이해가 쉬운 형태이다. 이런 표현법을 시간복잡도 표기법을 Big O라고 표현한다. 이런 방법으로 나의 코드의 성능을 확인할 수 있다. 만약 배열에서 다음과 같이 요소 하나만을 읽는 코드라면 print(..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/zy7Nz/btrhh7QskqH/VNTSeFCqjx2047n3U9PNbk/img.png)
* 문제를 풀기 위해 생각한 아이디어 크기가 3인 배열을 선언하고, 차례대로 컵번호 {1,2,3}으로 선언한다. swap함수로 해당 위치의 컵 바꾸기를 진행하고 최종적으로 1번컵이 위치한 배열의 순서를 출력한다. * 코드 #include #include using namespace std; int main(int argc, char const *argv[]){ ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int A, B, M; int arr[3]={1, 2, 3}; cin >> M; for(int i=0; i> A >> B; swap(arr[A-1], arr[B-1]); } for(int i=0; i