테스트


1.  List의 요소 섞기

  • 조건 / 단서
    • 인덱스가 0~9인 임의의 수 2개 생성
    • 인덱스에 해당하는 list 요소의 위치를 교환
    • 교환을 10회 반복
import random

for i in range(1, 10+1):
    pick1 = random.randrange(10)
    temp = numbers[pick1]
    pick2 = random.randrange(10)
    if pick1 == pick2:
        i -= 1
        continue
    numbers[pick1] = numbers[pick2]
    numbers[pick2] = temp    
    print(f"{i}회: {numbers}")
    print(f"\t[{pick1}]번과 [{pick2}]번이 교환되었습니다\n")
print(f"\n수행결과: {numbers}")

>>
1: [6, 7, 4, 3, 8, 2, 0, 5, 9, 1]
	[0]번과 [4]번이 교환되었습니다

2: [7, 6, 4, 3, 8, 2, 0, 5, 9, 1]
	[0]번과 [1]번이 교환되었습니다

4: [7, 6, 4, 0, 8, 2, 3, 5, 9, 1]
	[6]번과 [3]번이 교환되었습니다

5: [7, 5, 4, 0, 8, 2, 3, 6, 9, 1]
	[7]번과 [1]번이 교환되었습니다

6: [7, 5, 4, 0, 8, 6, 3, 2, 9, 1]
	[5]번과 [7]번이 교환되었습니다

8: [7, 5, 4, 0, 8, 2, 3, 6, 9, 1]
	[5]번과 [7]번이 교환되었습니다

9: [7, 1, 4, 0, 8, 2, 3, 6, 9, 5]
	[9]번과 [1]번이 교환되었습니다

10: [7, 1, 4, 0, 8, 9, 3, 6, 2, 5]
	[8]번과 [5]번이 교환되었습니다


수행결과: [7, 1, 4, 0, 8, 9, 3, 6, 2, 5]
  • 풀이
    • random 모듈을 사용하여 난수를 생성한다
    • 생성된 난수를 인덱스로 삼는다
    • 두 개의 인덱스는 두 개의 값을 가리킨다
    • 두 값을 교환하는 교환 로직을 사용한다
    • 반복문을 사용하여 로직을 반복한다

2.  List의 요소 정렬

  • 조건 / 단서
    • 기준 요소와 나머지 요소를 한 번씩 모두 비교
    • 첫 요소가 다른 요소보다 작으면 그대로 조건 검사
    • 그렇지 않다면 교환
    • 마지막 인덱스는 자연히 고정되므로 그 전의 인덱스 요소까지 검사
for i in range(len(numbers)-1):
    for j in range(i+1, len(numbers)):
    	# 내림차순은 아래의 부등호 방향을 반대로
        if numbers[i]<numbers[j]:
            continue
        temp = numbers[i]
        numbers[i] = numbers[j]
        numbers[j] = temp
print(numbers)

>>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 풀이
    • 왼쪽부터 하나의 값을 기준 값으로 고정한다
    • 그 다음 값부터 마지막 값까지를 비교 값으로 한다
    • 두 개의 값을 순서대로 꺼내야하므로 반목문을 사용한다
    • 중첩된 for문을 사용
    • 기준 값과 비교 값을 비교하여 교환이 필요하다면 교환 로직을 통해 교환한다

조언

  • 편리한 built-in 함수가 많지만 어디까지나 Python 한정

  • 베이스가 되는 알고리즘을 스스로 짤 수 있어야 한다

  • 이를 이해하지 못한다면 결국 객체를 조립하는 것도 한계가 있다

  • 필수 알고리즘은 반드시 이해할 것

0개의 댓글