알고리즘/알고리즘 개념 및 정리
-
Visual Studio 디버깅 시, 입력 붙여넣기 안 될때!알고리즘/알고리즘 개념 및 정리 2020. 5. 22. 22:59
과거에는 보통 코딩을 리눅스에서 하며 Qt를 애용했는데 요즘 Visual Studio를 자주 사용하고 있다. 사용하면서 가장 불편했던 것은 디버깅모드에서 입력 값이 붙여넣기가 안된다는 것이다..(내가 못하는건가..?) Qt Creator는 잘만되던데.. ( Qt Creator 짱짱.. ) => 여튼 그래서 다른 방법을 사용해야 편하게 코딩을 즐길 수 있다! 여튼 이런경우에는 아래의 freopen함수 한 줄만 추가해주면 간단하게 디버깅 시에 입력을 할 수 있다. freopen("input.txt", "r", stdin); input.txt 파일의 경로는 그냥 리소스파일에 추가하면 굳이 경로 안찾아도된다. 그리고 이처럼 진행할 시에 위와 같은 보안 관련 error 메시지를 볼 수 있다. #pragma war..
-
퀵 정렬 Quick Sort알고리즘/알고리즘 개념 및 정리 2019. 3. 9. 19:30
선택, 버블, 삽입 정렬 알고리즘들은 시간복잡도가 평균 O( N^2)였으며이러한 알고리즘들은 정렬할 데이터의 수가 10만이 넘어가면 너무나 많은 연산이 요구되므로 사용하기 어렵다. 이에 반해 분할 정복 알고리즘 중 하나인 퀵 정렬알고리즘은 평균 시간복잡도가 O( N * logN )이다 퀵 정렬은 불안정 정렬에 속하며 다른 원소와 비교하는 것만으로정렬을 진행하기 때문에 비교정렬이라도고 할 수 있다. * 분할 정복의 의미* 하나의 큰 문제를 2개의 문제로 분리하여 각각 해결한 뒤다시 그 결과를 합하여 원래 문제를 해결하는 것을 의미한다. 퀵 정렬의 원리는 특정한 값을 기준으로 두 개의 비균등한 크기로 나누고나눈 부분리스트를 정렬한 뒤 다시 합하여 정렬된 리스트를 만들어내는 정렬이다.여기서 특정한 기준이 되는..
-
삽입정렬 Insert Sort알고리즘/알고리즘 개념 및 정리 2019. 3. 7. 16:03
삽입정렬 역시 기본이 되는 알고리즘 중 하나이다. * 삽입정렬 알고리즘이란? * 1회전 2회전 보통의 예시로는 숫자 카드게임할 때 카드를 순서대로 옮기는 경우를 생각하면 좋다.자신이 옮길 카드와 앞 쪽에 있는 카드들과 크기를 비교해서 사이에 쏘옥! 넣으면 되는 것과 같은 원리다.1회전을 보면 5가 좌측의 7과 비교를 한다. 5가 더 작음으로 7과 옆에는 아무것도 없는 벽 사이에 쏘옥 들어간다. 다음 2회전을 살펴보면 1이 7보다 작기 때문에 비교가 진행되고 1과 5를 비교했을 때 1이 5보다 작기 때문에 벽과 5사이로 쏘옥 들어가게 된다. 이런식으로 쭈욱~ 비교하면 정렬이 완료된다. 이렇듯 삽입정렬은 필요할 때만 삽입을 진행한다.삽입정렬의 경우 좌측에 있는 정렬은 미리 정렬된 상태를 가정하기 때문에좌측의..
-
선택정렬 Selection Sort알고리즘/알고리즘 개념 및 정리 2019. 3. 7. 15:38
가장 기본이 되는 알고리즘 중 하나인 선택정렬이다. * 선택정렬 알고리즘이란? * 쉽게말해 가장 작은 것을 선택하여 제일 앞으로 보내는 형식의 알고리즘이다. 이 알고리즘의 경우 대략 N * (N+1) / 2 번의 연산을 수행한다.하지만 컴퓨터에서 더하기나 나누기 연산의 크기가 작을 경우 N이 큰 수라는 가정하에 별 의미가 없음으로 무시하게된다. 그러므로 시간복잡도는 빅오 표현법으로 나타냈을 때 O( N * N) = O( N^2 )가 된다.데이터의 숫자가 조금만 커져도 연산숫자가 크게 늘어나기 때문에 비 효율적인 알고리즘이다.
-
AES 복호화 (Rijndael 알고리즘)알고리즘/알고리즘 개념 및 정리 2018. 1. 26. 07:07
복호화를 보시기전에 이전포스팅인 암호화를 먼저 숙지하시기 바랍니다. http://ho-story.tistory.com/27 AES복호화에 성공하였다.ㅎㅎ AES암호화를 해봤기 때문에 AES복호화는 간단하다. 암호화하는것을 거꾸로 진행해주면 된다. 하지만 주의 할점들이 몇가지 있다. 1.S-BOX 뿐만아니라 inverse S-box도 필요하다. 2.또한 Shift Rows 단계에서는 암호화와 반대로 Shift를 진행하여야 한다.암호화에서 왼쪽으로 Shift를 진행하였다면복호화에서는 오른쪽으로 Shift를 진행한다!! 3.Mix Columns 단계에서 암호화에서 쓰였던 4x4 행렬이 아닌 새로운 행렬 즉 암호화에 쓰인 행렬의 역행렬이 필요하다 이러한 모습으로 이루어져있다. 숫자가 커졌다고해서 겁먹을 필요가 ..
-
AES암호화 (Rijndael 알고리즘)알고리즘/알고리즘 개념 및 정리 2018. 1. 25. 01:47
WPA2에 AES암호화가 사용된다고 해서 공부 중에 있다. AES (Advanced Encryption Standard) AES 암호화는 Rijndael 알고리즘을 기반으로 만들어진다. 직접 구현을 해보았고 그렇게 오래 걸리진 않았으나 아직도 AES 암호화에 대해서는 완벽하게 공부가 되지 않았다. Rijndael 알고리즘의 원리를 이해하기 위해서는 몇가지 지식이 필요하다. 1. xor 연산 (계산기를 이용하면서 보면 훨씬 좋다 http://xor.pw/#)2, 4x4 행렬 연산 또한 이 알고리즘에서는 + 가 xor로 대체되어서 사용된다. 나와 상대방만 알고있는 비밀키(cipher key)라하며 우리가 암호화할 평문을 Plain Text라 한다이 예제에서는 내가 정한 Plain Text와 Cipher Ke..