1. 함수 분석
숫자로 구성된 리스트 자료형에서 앞에 배열된 수보다 작은 수는 앞의 수로 바뀌는 함수를 만듦.
1) for - in 반복문으로 각 리스트마다 비교 적용
2) if 문으로 앞의 수와 비교
3) 코드 구성
def sort(unsort_list):
loop_number = len(unsort_list)
for compare_index in range(loop_number):
compare_value = unsort_list[compare_index]
prev_position = compare_index - 1
while prev_position >= 0 and unsort_list[prev_position] >= compare_value:
unsort_list[prev_position + 1] = unsort_list[prev_position]
## if일 경우 아래 코드 없어도 원하는 결과 나옴.
prev_position = prev_position - 1
return unsort_list
test_arr = [5, 3, 1, 6, 7, 13]
sort(test_arr)
print(test_arr)
2. 문제 분석
1) 해당 코드의 역할에 대한 고민에서 문제가 시작됨
prev_position = prev_position - 1
2) if 문에서는 해당 코드 없어도 함수가 의도대로 작동함. 하지만 while 문일 경우 해당 코드가 반드시 필요함
3. for - in 경우의 수 분석
1) compare_index = 0
while prev_position >= 0 and unsort_list[prev_position] >= compare_value:
prev_position이 -1이 되므로 while문 종료
2) compare_index = 1인 경우
while prev_position >= 0 and unsort_list[prev_position] >= compare_value:
prev_position은 0
unsort_list[0] = 5 > unsort_list[1] = 3
조건 충족
unsort_list[prev_position + 1] = unsort_list[prev_position]
unsort_list[1] = 5로 변경
prev_position = prev_position - 1
prev_position = -1로 변경
다시 while 반복
while prev_position >= 0 and unsort_list[prev_position] >= compare_value:
prev_postion = -1로 변경 while문 종료
3) compare_index = 2인 경우
while prev_position >= 0 and unsort_list[prev_position] >= compare_value:
prev_position은 1
unsort_list[1] = 5 > unsort_list[2] = 1
조건 충족
unsort_list[prev_position + 1] = unsort_list[prev_position]
unsort_list[2] = 5로 변경
prev_position = prev_position - 1
prev_postion = 0으로 변경
다음 while 반복은 어차피 unsort_list의 [0], [1], [2] 값이 다 5로 바뀌었기에 그 다음 while로 반복
prev_position = prev_position - 1
prev_position = -1로 변경
while문 종료!
4. 결론
while prev_position >= 0 and unsort_list[prev_position] >= compare_value:
조건 prev_position >=0이 unsort_list[-1] 값과 unsort_list[0] 값을 비교하는 것을 방지하기 위함인 줄 알았으나..
while문을 종료하기 위한 의도로도 쓰였다는 사실을 배움.
while 문을 종료하지 않으면 무한 루프이므로 함수가 적용되지 않나보다.
'Code' 카테고리의 다른 글
| [JS] 입력된 여러 개의 숫자 계산하기 (0) | 2022.03.17 |
|---|---|
| [JS] 콘솔에 여러 문장에 걸쳐 입력 받기 (0) | 2022.03.14 |
| [python] set 자료형도 .join 함수가 가능하다. (0) | 2022.02.21 |
| [python] TypeError: list indices must be integers or slices, not str (0) | 2022.02.03 |
| [python] beautifulsoup4 crawling_html에서 속성값 출력 문제 해결 (0) | 2022.02.03 |