[Inflearn](python) 카드 역배치(정올 기출) _ 탐색 & 시뮬레이션

berry ·2022년 5월 26일
0

Algorithm

목록 보기
69/77
post-thumbnail

🧩 문제 설명


🧩 문제 해석

양쪽을 계산한다는 점에서 퀵정렬과 약간 비슷..?한 방법

1 2 3 4 5 가 있다고 하면
1과 5의 위치를 바꾸고, 다음으로 2와 4의 위치를 바꾸면
5 4 3 2 1 로 숫자가 역배치 되었다.

  • 파이썬의 sort()함수를 사용해서 풀 수 없다.
    sort(reverse = True)를 한다고 해서, 순서가 재배치 되는 것이 아닌 숫자의 크기를 역배치해주기 때문이다.

🏁 내 풀이

# Inflearn _ Section 3 카드 역배치(정올 기준)

# 내 풀이

card_lst = [i for i in range(1,20+1)]

for i in range(10):
   area = list(map(int, input().split()))
   area_lst = [] # 역배치 할 리스트
   tmp_lst = [] # 뒤에 붙는 리스트
   area_lst = card_lst[area[0]-1:area[1]] # 역배치할 리스트 담음
   tmp_lst = card_lst[area[1]:]
   card_lst = card_lst[:area[0]-1]
   for _ in range(len(area_lst)):
       card_lst.append(area_lst.pop()) # pop하면서 카드 리스트에 더하기
   for k in tmp_lst:
       card_lst.append(k) # 뒤에 남은 리스트 붙이기

for i in card_lst:
   print(i, end = ' ')
  • 양 끝 숫자의 위치를 바꿀 생각을 못함
  • 중간에 역배치할 구간을 따로 변수로 만들어 메모리를 차지함
    🥲

# 인프런 풀이

a = [i for i in range(1,20+1)]
for _ in range(10)`
    s, e = map(int, input().split())
    for i in range((e-s+1)//2):
        a[s+i], a[e-i] = a[e-i], a[s+i] # 제일 처음 수와 끝 수의 자리를 바꿔줌

더 효율적인 방법을 잘 생각해보기!

profile
Engineer

0개의 댓글