1. card_list에 1부터 20까지 값을 넣는다 (이 때, 조건을 만족하기 위해 index가 0이 아니라 1부터 시작하도록 한다) 2. range_list 빈 배열을 선언한다. range_list 자리에는 내가 입력하는 10개의 범위 case가 튜플로 들어간다. 3. current_interval을 선언한다. currnet_interval은, range_list에서 각각의 room에 위치한 현재 튜플을 나타낸다. 4. 임시 변수 tmp를 선언한다.
5. 10번 for문을 돈다. map함수를 이용하여, 띄어쓰기로 입력 받은 값을 int형으로 변환한다. 두 값을 띄어쓰기로 입력받고, 각각을 start와 end에 매핑시켜서 저장한다. 6.start와 end에 들어온 값을 튜플화하여 interval 변수에 저장한다. 7. 튜플 값(범위)을 저장하기 위해 2에서 선언했던 range_list리스트에 append한다
8. 리스트의 길이만큼 for문을 돈다. 9. current_interval변수에 현재의 range_list에 들어있는 튜플값을 넣는다. 10. 튜플의 0번째원소(왼쪽)을 start_value에 넣고, 튜플의 1번째원소(오른쪽)을 end_value에 넣는다. 11. 나와 대칭되는 위치의 카드를 바꾸기 위해, for문을 몇번 돌아야 될지 생각한 알고리즘을 num 변수로 표현하였다. 범위가 짝수인 경우와, 홀수인 경우를 나누어서 구현했지만, //2연산자에서는 몫만 얻어지므로, 구분하는 것이 무의미하다는 것을 깨달았다.
12. for문을 돌면서, 대칭되는 위치의 카드 값을 바꾸었다. 이 때 tmp라는 임시변수를 활용하였다. 13. 바꾸는 작업이 끝나면, 대칭점을 기준으로 왼쪽의 경우(start_value) 1을 증가시켰고, 대칭점을 기준으로 오른쪽의 경우(end_value) 1을 감소시켰다. 14. 출력
코드
card_list = [None] + list(range(1,21))
range_list = []
current_interval = 0
tmp = 0
for i in range(10):
start,end = map(int,input().split())
interval = (start,end) #튜플에 저장
range_list.append(interval) #이제, range_list 안에는, 범위(구간)을 나타내는 10개의 튜플이 들어있다. (0번 방~9번 방)
for i in range(len(range_list)): #10번 돌겠지..? 튜플이 10개 있으니까
currnet_interval = range_list[i] #튜플을 하나씩 꺼내서, currnet_interval에 대입 #(3,5)
start_value = currnet_interval[0] #3
end_value = currnet_interval[1] #5
num = ((end_value - start_value) + 1)//2
for x in range(num): #구간 내 갯수만큼 순회
tmp = card_list[start_value]
card_list[start_value] = card_list[end_value]
card_list[end_value] = tmp
start_value +=1
end_value -=1
for i in range(1, 21):
print(card_list[i], end=' ')
3. 강의 풀이
for문을 돌면서 구간을 하나씩 돌면서 구간의 값 뒤집어준다
# 언더바(_) : 변수가 없음을 의미 #i라고 하면, i=0,1,2..가 대입되지만, 변수에 값을 대입하는 시간도 줄이고 싶을 때, 언더바 사용
# ((end - start) + 1 )//2 바퀴를 돌면 됨! (몫만큼 돌게 하기 때문에, 구간의 갯수가 짝수건 홀수건 차이 없다.)
a=list(range(21)) #0부터 20까지의 숫자가 자동으로 리스트화 #인덱스 번호도 0부터
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] #swap
a.pop
for x in a:
print(x, end=' ')
4. 아 맞다
파이썬에서의 swap은 아래와 같이 다이렉트로 할 수 있다.
C++에서 값을 바꾸는 swap을 생각해서, 임시변수 tmp를 도입했는데, 파이썬에서는 그렇게 할 필요가 없었다는거..
리스트에서, 원소만 띄어쓰기해서 출력하고 싶을 때 -> for문으로 리스트 원소 탐색한 후, ' '기준으로 변수 출력
for x in a: print(x, end=' ')
5. 새롭게 알게된 점
index가 1부터 시작하는 배열
card_list = [None] + list(range(1,21))
언더바(_) : 변수가 없음을 의미 #i라고 하면, i=0,1,2..가 대입되지만, 변수에 값을 대입하는 시간도 줄이고 싶을 때, 언더바 사용