꾸준히 안타치기
10804.카드 역배치 본문
반응형
https://www.acmicpc.net/problem/10804
입력
총 10개의 줄에 걸쳐 한 줄에 하나씩 10개의 구간이 주어진다. i번째 줄에는 i번째 구간의 시작 위치 ai와 끝 위치 bi가 차례대로 주어진다. 이때 두 값의 범위는 1 ≤ ai ≤ bi ≤ 20이다.
출력
1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다.
예제 입력 1
5 10
9 13
1 2
3 4
5 6
1 2
3 4
5 6
1 20
1 20
예제 출력 1
1 2 3 4 10 9 8 7 13 12 11 5 6 14 15 16 17 18 19 20
a,b = b, a
1,2 = 2,1 #자리바꾸기
풀이 1
a = list(range(21)) #0-20까지 숫자를 만들어 리스트로 출력
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] #뒤집어주기
a.pop(0) #첫번째 0 뺴기 (1부터 출력해야함)
for x in a:
print(x, end=' ')
for i in range((e - s+1)// 2): #갯수나누기 (큰수-작은수)+1
풀이 2
⭐️ 배열순서 뒤집기 메소드 사용하기
arr = [x for x in range(1, 20+1)]
for _ in range(10):
l, r = map(int, input().split())
arr[l-1:r] = arr[l-1:r][::-1]
print(*arr)
#1부터 20까지 생성해 x에 담고, x를 이용해서 리스트를 만들어라.
arr = [x for x in range(1, 20+1)]
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
for _ in range(10):#조건
l, r = map(int, input().split())#입력 첫번쨰,마지막꺼 입력받기
arr[l-1:r] = ⭐️ arr[l-1:r][::-1]⭐️
#arr[l-1번째: r] = arr[l-1번째: r][::-1]배열의 순서뒤집기
#arr[처음인덱스: 마지막인덱스]
print(*arr)#리스트안의 내용만 출력
⭐️ a = [1, 2, 3, 4] 일 때 **a[ : :-1] = [4, 3, 2, 1]**이다.
■ 리스트 슬라이싱 (Slicing)
리스트에서 부분 요소들을 선택하기 위하여 슬라이스(Slice)를 사용한다.
슬라이스는 "리스트[ 처음인덱스 : 마지막인덱스]"와
같이 인덱스 표현에서 부분집합의 범위를 지정하는 것이다.
인덱스는 0 부터 시작하며, 마지막 인덱스는 원하는 "마지막 요소의 인덱스 + 1"을 의미한다.
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sisosw&logNo=221326583311
■ 리스트표현식
https://dojang.io/mod/page/view.php?id=2285
반응형
'CS > 백준' 카테고리의 다른 글
8958.OX퀴즈 (0) | 2022.08.12 |
---|---|
1546.평균 (0) | 2022.08.08 |
2577.숫자의 개수 (0) | 2022.07.30 |
10818.최소,최대 (0) | 2022.07.29 |
10952. A+B-5 / 10951. A+B-4 (0) | 2022.07.28 |
Comments