알고리즘(14)
-
[알고리즘] 버블정렬
다음과 같은 5개의 데이터를 버블정렬로 정렬할 때의 순서입니다. 선택정렬의 경우 (1)번지의 값을 기준으로 두고 (2)번지, (3)번지.....순으로 즉 (1)→(2) (1)→(3) (1)→(4) (1)→(5) 순으로 비교했지만 버블정렬의 경우 인접한 다음 번지의 값을 비교합니다. (1)→(2) (2)→(3) (3)→(4) (4)→(5) 를 비교해 정렬하는 형태입니다. 그렇기 때문에 1회전 시 순으로 진행되다 종료됩니다. 결국 1회전이 끝나면 마지막 번지에 제일 큰 값이 들어갑니다. 각 회전 마다 비교대상은 이렇습니다. 반복값을 표현하면 i = 1, 4, 1 j = 1, 5-i, 1 이 됩니다. 위와 같은 경우는 5개의 데이터로 한정된 경우지만 그렇지 않고 n값으로 설정됐을 때는 결국 i = 1, n-1..
2021.10.12 -
[알고리즘] 선택정렬
n개의 데이터를 정렬할 때 총 회전 수는 n-1개 (마지막 데이터는 나머지가 다 정리된 뒤 남은 값이기 때문에 정렬할 필요가 없다) 다음은 5개의 데이터를 오름차순으로 정리하는 문제입니다. 5개의 데이터를 서로 비교해서 작은 값부터 왼쪽으로 보내 정렬하는 건데요. 이때 1회전 때 (1)번지의 값을 (2), (3), (4), (5) 번지의 값들과 비교해 가장 작은 값을 찾아 (1)번지에 넣어야 합니다. 비교가 끝나면 가장 작은 값이 (1)번지에 들어가면서 1회전이 끝나게 됩니다. 4회전까지 진행하고 나면 이런 형태가 되는데요. 이때 5회전을 하지 않고 종료됩니다. 남은 값이 하나일 때는 이미 다른 값들과 비교가 끝난 상태이기 때문이죠. 이때 비교하려는 두 값을 i, j 변수에 넣고 비교한다면 이런 형태가 ..
2021.10.12 -
[알고리즘] 90도 회전
A, B 두 개의 2차원 배열이 있을 때 A배열에서 90도를 회전시킨 값이 B배열입니다. A배열은 행이 고정된 상태에서 열이 변화하는 형태이고 B배열은 열이 고정된 상태에서 행이 변화하는 형태인데요. 데이터의 위치를 보면 유사한 공통점을 찾을 수 있습니다. A(1, 1) → B(1, 5) A(1, 2) → B(2, 5) A(1, 3) → B(3, 5) A(1, 4) → B(4, 5) A(1, 5) → B(5, 5) A(2, 1) → B(1, 4) A(2, 2) → B(2, 4) A(2, 3) → B(3, 4) A(2, 4) → B(4, 4) A(2, 5) → B(5, 4) 순으로 반복되는 걸 알 수 있는데요. A배열의 열에 사용된 값이 B배열의 행으로 사용되고 6에서 A배열의 행값을 빼면 B배열의 열값이..
2021.10.08 -
[알고리즘] 다이아몬드 만들기
2차원 배열에서 다이아몬드 형태로 데이터가 들어가는 것을 말합니다. 이러한 2차원 배열은 특징이 있는데요. 센터값을 기준으로 대칭이 일어나는 규칙을 갖고 있습니다. 형태는 다이아몬드뿐만 아니라 다양할 수 있는데요. 아래의 다이아몬드 형태의 예시에서는 행이 고정된 상태에서 열이 변화하면서 데이터가 들어가는 걸 알 수 있습니다. 행마다 데이터가 들어간 자리는 이와 같습니다. 보면 일정한 규칙이 있는데요. 행이 증가하면서 열의 시작값은 -1, 끝값은 +1씩 변화하다 가운데를 기준으로 반대부터는 시작값이 +1, 끝값은 -1씩 변화하는 걸 알 수 있습니다. 이를 활용한 알고리즘 문제의 순서도를 알아보겠습니다. 5행 5열의 2차원 배열에 다음과 같은 순서로 값이 저장될 때의 순서도입니다. 행에서의 반복 1, 5, ..
2021.10.07 -
[알고리즘] ㄹ자 채우기
ㄹ자 채우기 2차원 배열에 ㄹ자 방향으로 데이터가 들어가는 방식입니다. 행이 고정된 상태에서 열이 변화하면서 데이터가 들어간 형태로 방향은 아래와 같습니다. 첫 행은 1열부터 5열까지 1씩 증가하는 형태, 다음 행은 5열 부터 1열까지 1씩 감소하는 형태가 반복됩니다. 이 때 열의 시작값, 끝값, 증가값이 바뀌기 때문에 상수 처리를 할 수 없어 변수로 처리를 해야 합니다. 변화하는 값을 확인해보니 일정한 패턴이 보이는데요. 첫 행의 시작값은 다음 행의 끝값으로, 첫 행의 끝값은 다음 행의 시작값으로, 첫 행의 증가값에서 -1을 곱한 값이 다음 행의 증가값으로 반복되는 걸 알 수 있습니다. 교환로직 일반적으로 A, B라는 두 저장공간이 있을 때 A값과 B값을 서로 바꿀 때 A값을 B값으로 옮기면 기존의 B..
2021.10.06 -
[알고리즘] 최대공약수, 최소공배수, 유클리드 호제법
최대공약수(GCD) ex) 8와 12의 최대공약수 더 이상 나누어 떨어지는 값이 없는 서로소 상태일 때 종료되고 나눈 값을 모두 곱하면 최대공약수가 나옵니다. 최소공배수(LCM) ex) 8와 12의 최소공배수 구하려는 두 수를 곱한 값에서 최대공약수를 나누면 최소공배수가 나옵니다. 유클리드 호제법 최대공약수를 구하는 방법으로 구하려는 두 수를 비교해서 큰 수에서 작은 수를 0이 나올 때까지 빼나갑니다. ex) 8과 12의 최대공약수
2021.10.04