메일도 보내는데
게시물은 "to 훈민상미"로 통일했어.
하루 정도 지나면 구글에서 "to 훈민상미"로 손쉽게 검색 할 수 있을거야.
알고리즘의 가장 기본은 소팅이라고 할 수 있는데
우선 간단히 예제를 하나 만들어 보면(자바 기준)
public static void SimpleSort(int[] array)
{
int i, j;
for(i=0;i
for (j=0;j
if(array[j] < array[i])
swap(array, i, j);
}
위와 같아.
소스는 짧은데 일지에게서 변수, 배열, 제어문, 함수 파라미터, static, 포인터 의 속성 등등을 다 배우워야 이해 할 수 있는 코드라고 할 수 있지.
swap은 한번 짜보면 좋겠네. 그냥 i랑 j 값을 바꾸면 되거든.
temp값을 하나 둬서 i 값을 잠시 보관하고 i, j를 바꿔도 되고.
그런데 i, j 가 지역 변수 이면 지역 변수값만 바뀌니까 포인터를 알아야 하는거지.
(사실 자바도 모두 포인터거든)
모르면 일지 좀 졸라서 가르쳐 달라고 하고~
간단히 설명하면
i, j가 0으로 각각 주어지고
배열의 크기가 v라고 하면 v*v 만큼 돌아가면서 배열 값을 바꾸는 거야
2 1 3 6 3 2 5
가 있다고 하면
일단
i[0], j[0]값이 똑같이 2 잖아.
그래서 아무런 변화 없지
그 다음은
i[0], j[1]이고
값은
2하고 1 이니까
j가 i보다 작으니 교환
그럼
1 2 3 6 3 2 5
거든.
그 다음은
1이랑 3이랑 비교
1일아 6이랑 비교... 뭐 이렇게 되는거지.
결국 가장 작은 값을 찾아서 첫번째 자리에 놓고 난 다음에 두번째 자리 값을 비교 하게 되는 거야.
그럼, 문제점은 뭘까?
j다 다 돌고 나면 i가 1이 되면서 i[1]이랑 j[0]이랑 비교하게 되는데 각각 2하고 1이잖아
그러니 다시 자리가 바뀌게 되니까 제대로 소팅이 안되지.
결국
for (j=0;j
가
for (j=i;j
로 바뀌면 되겠지?
알고리즘에서 틀린 부분 찾으라고 하면 저정도가 될 것 같아.
결국 시경과니까 생각하면 쉬운 문제인데(OR같은 애들이 아니니까) 프로그래밍을
보르면 풀기가 애매하겠지. 그래서 그 동안 기초만 다져놓으면 될 것 같아. 문제를 많이 보고.
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.