Python/online judge

백준 [10811.바구니뒤집기] | Python

구름솜:D 2023. 11. 30. 19:49
728x90

✏️ 문제

https://www.acmicpc.net/problem/10811

 

10811번: 바구니 뒤집기

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2

www.acmicpc.net

 

 

✏️ 풀이방법

1. 역순으로 만드는 m번의 방법을 리스트(seq)에 담는다.

2. 바구니의 번호 1부터n까지를 리스트(basket)에 담는다.

3. i번째부터 j번째까지의 특정범위만 인덱스를 거꾸로 해서 리스트(basket)를 바꾼다. 

4. 3번의 과정을 반복수행한다.

 

 

📌 코드

n,m = map(int,input().split())
seq = []  #역순으로 만드는 방법 담는 리스트
for _ in range(m):
    seq.append(list(map(int,input().split())))

basket = [i+1 for i in range(n)] #1부터n까지의 바구니의 번호를 담는 리스트

for x in range(len(seq)):
    i = seq[x][0]
    j = seq[x][1]
    basket[i-1:j] = reversed(basket[i-1:j]) #특정범위만 역순으로 해서 basket리스트에 다시 담기

print(' '.join([str(_) for _ in basket])) #리스트의 요소만 출력

 

 

📌 결과

5 4
1 2
3 4
1 4
2 2

3 4 1 2 5

 

 

🤔 시행착오.1

n,m = map(int,input().split())
seq = []
for _ in range(m):
    seq.append(list(map(int,input().split())))

basket = [i+1 for i in range(n)]

for x in range(len(seq)):
    i = seq[x][0]
    j = seq[x][1]
    basket[i-1:j] = reversed(basket[i-1:j])

print(basket)
5 4
1 2
3 4
1 4
2 2

[3, 4, 1, 2, 5]

- 출력형식이 리스트형식이라 제출형식에 맞지 않음

 

 

🤔 시행착오.2

n,m = map(int,input().split())
seq = []
for _ in range(m):
    seq.append(list(map(int,input().split())))

basket = [i+1 for i in range(n)]

for x in range(len(seq)):
    i = seq[x][0]
    j = seq[x][1]
    basket[i-1:j] = basket[j:i-1:-1]

print(basket)
5 4
1 2
3 4
1 4
2 2

[5, 5, 5, 2, 5]

- basket[j:i-1:-1]슬라이싱으로 역순으로 출력하려고 -1을 사용했으나 마지막 원소를 선택해서 basket에 대입

 

 

🔎 다른풀이

n,m = map(int, input().split())
basket = [i for i in range(1,n+1)]
temp = 0
for x in range(m):
  i,j = map(int, input().split())
  temp = basket[i-1:j]
  temp.reverse()
  basket[i-1:j] = temp

for x in range(n):
  print(basket[x],end=" ")

-  리스트로 입력 안받지 않고,  i,j에  각각 입력받아서 i,j로 연산 가능

-  temp를 활용해서  reverse함수 연산 가능

 

 

📒 다시보기

 

[Python] 13. reverse()메소드와 reversed()함수

reverse() 메소드 reverse()는 메소드로 특정 자료(리스트)에 대해 요소를 역순으로 뒤집어 주는 기능을 수행 메소드는 반환값이 없기 때문에 기존 객체(리스트)의 요소를 역순으로 뒤집어 저장 ex_list

somin0416.tistory.com

 

[Python] 17. 리스트 원소를 한 줄로 출력하기

보통 for문으로 원소를 출력하면 다음과 같다. 아래와 같이 하나씩 출력된 후 개행문자가 포함되는 것이 아닌 가로로 한 줄에 출력하고자 한다. ex_list = [1,2,3,4,5] for i in ex_list: print(i) #출력 1 2 3 4 5

somin0416.tistory.com