바깥쪽 반복문 i:
배열의 전체 패스를 관리한다. 한 패스에서 배열에서 가장 큰 값을 끝으로 보내고, 그 다음 패스에선 다음으로 큰 값을 뒤로 보내고 나머지 부분을 정렬한다.
array_len - 1번 반복하는 이유는 마지막 남은 요소는 정렬이 필요 없기 때문이다.
안쪽 반복문 j:
배열 내의 인접한 요소를 반복적으로 비교하여 인접한 두 요소를 교환할지 여부를 결정한다.
array_len - i - 1까지 반복하는 이유는 이미 정렬된 마지막 부분은 건너뛰어도 되기때문이다.
i가 커질수록 마지막 부분은 이미 정렬된 상태가 되므로 굳이 비교하지 않는다.
인접한 두 요소 비교 (array[j] > array[j + 1]):
배열의 array[j]와 array[j + 1] 두 요소를 비교하여, 앞쪽 값이 더 크다면 교환한다. 이렇게 하면 큰 값이 점점 뒤쪽으로 밀려난다.
값을 교환하는 과정:
두 인접한 요소를 교환하기 위해 temp 변수를 사용하여 한쪽 값을 임시로 저장한다.
- temp = arr[j]; 배열의 array[j] 값을 임시 저장소인 temp에 보관한다.
- arr[j] = arr[j + 1]; array[j]에 array[j + 1]의 값을 대입한다.
- arr[j + 1] = temp; array[j + 1]에 원래의 array[j] (temp에 보관해 두었던) 값을 넣어준다.
이렇게 하면 arr[j]와 arr[j + 1]의 자리가 바뀌게 된다.
마지막으로 array[array_len/2]로 배열의 중앙값을 리턴한다. 문제에서 array_len은 홀수다.
array의 첫번째 요소는 array[0]이고, array_len가 5라면 중앙값은 array[2]이므로 /2만 하면 된다.
처음엔 바보처럼 array[0]을 생각 못하고 (array_len / 2) + 1 을 해버렸다 ㅋㅋ
다른 풀이를 보니 함수와 포인터를 활용하면 훨씬 편하게 풀 수 있는 것 같다. 이제 슬슬 포인터를 공부해야겠다..
'웃음기 있는 글들 > C' 카테고리의 다른 글
프로그래머스 모음 제거(문자열의 끝에는 '\0'을 넣자) (0) | 2024.10.22 |
---|---|
strlen, strcpy, strcat (1) | 2024.10.22 |
Printf 출력 키워드와 형식 (0) | 2024.10.21 |