꾸준히 안타치기

10804.카드 역배치 본문

CS/백준

10804.카드 역배치

글자줍기 2022. 8. 3. 18:38
반응형

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