TIL 알고리즘(2)

알고리즘

목록 보기
2/21

배열 뒤집기

def solution(num_list):
    n = len(num_list)
    list_i = []
    for j in range(n-1):
        for i in range(n-1-j):
            num_list[i], num_list[i+1] = num_list[i+1], num_list[i]
    return num_list

어제 배웠던 bubble sort가 생각나서 과정을 이렇게 정했다.
1. 돈다.
2. 순서를 바꾼다.
3. 돈다.

  1. 돈다
def solution(num_list):
    n = len(num_list) # range의 범위 설정 준비
    for i in range(n):
  1. 순서를 바꾼다.
    전에는 보고 음.. 그렇군 하고 이해했지만, 막상 적용하려고 생각하니 떠오르질 않았다.
# i, j = j, i하면 바뀐다고 함.
# (swap이라는 것도 있는데 내부알고리즘이 또 있는 것 같아서 사용하기 좀..)

# 2. 적용
def solution(num_list):
    n = len(num_list) 
    for i in range(n-1): # n 설정 시 IndexError: list index out of range
                        # list의 index를 range로 돌 때 맨 끝 인덱스 요소가 없음.
        num_list[i], num_list[i+1] = num_list[i+1], num_list[i]
    return num_list

result = solution([1,2,3,4,5])

print(result)
# [2, 3, 4, 5, 1]
  1. 돈다
# 3. 돈다
# 첫번째 원소가 마지막까지 가기는 하는데, 이걸 반복해야함.
# 여기가 문제인데
# 하다보니 됐달까...

# 일단 원하는 건 
# 0 1 2 3 4 돌고
# 0 1 2 3 돌고
# ...
# 0 도는 건데

# 너무 안 돼서
# 일단 하나만이라도 줄여서 돌려보고 싶었음.

li = [1,2,3,4,5]

n = len(li)

list_i = []
# list_j = []
for i in range(n):
    list_i.append(i)
    print(list_i)
# [0]
# [0, 1]
# [0, 1, 2]
# [0, 1, 2, 3]
# [0, 1, 2, 3, 4]
	# for j in range(i):
    #     list_j.append(j)
    #     # print(list_j)

# 위 코드를 보면 list_i의 원소가 하나씩 늘어가는데,
# 비몽사몽하면서 저 늘어가는 걸 반대로 빼버리고 싶다는 생각에  -j해봤음.

어떻게든 돌았다.
(for range에서 for range를 돌 때, 상위 for range의 요소를 하위 for range요소에서빼는 식.)

코드 리뷰

팀원과 리뷰를 하며 다른 코드를 보았다.
알고보니
slice[::-1]을 하면 됐다.
^^

0개의 댓글