[백준] 하루5문제(25.01.29)

HAHAHELLO·2025년 1월 29일

파이썬

목록 보기
12/50

1차원 배열

공 바꾸기 : 10813

문제

예제

나의 풀이

임시 변수에 바꿀 값을 저장하고 다시 반환하는 식으로 코드를 짰는데 효율면에서 좋지 않은 것 같다. 튜플 스왑을 활용한 효율적인 풀이법을 활용하는게 더 좋을 것 같다.

n, m = map(int, input().split())
basket = []
for i in range(1,n+1):
    basket.append(i)
temp = 0
    
for _ in range(m):
    i, j = map(int, input().split())
    temp = basket[i-1]
    basket[i-1] = basket[j-1]
    basket[j-1] = temp
    
print(' '.join(map(str,basket)))

다른 풀이

n, m = map(int, input().split())
basket = []
for i in range(1,n+1):
    basket.append(i)
    
for _ in range(m):
    i, j = map(int, input().split())
    basket[i-1],basket[j-1] = basket[j-1],basket[i-1]
    
print(' '.join(map(str,basket)))

바구니 뒤집기 : 10811

문제

예제

나의 풀이

간단하게 리스트의 슬라이싱을 사용하여 풀이하였는데 reverse()를 사용해서 풀이하면 메모리를 절약할 수 있고, 성능 최적화 필요시에는 deque를 활용하는 것이 좋다고 한다.

n, m = map(int, input().split())
basket = [i for i in range(1,n+1)]
for _ in range(m):
    i, j = map(int, input().split())
    basket[i-1:j] = basket[i-1:j][::-1]
    
print(' '.join(map(str, basket)))

다른 풀이

  • reverse() 사용
    reversed()iterator를 반환하기 때문에 list()를 사용하여 리스트로 반환해줘야 한다.
n, m = mpa(int, input().split())
basket = [i for i in range(1, n+1)]
for _ in range(m):
	i, j = map(int, input().split())
    basket[i-1:j] = list(reversed(basket[i-1:j]))

print(' '.join(map(str, basket)))
  • deque 사용
    리스트의 특정 구간을 조작하는 경우, deque는 양쪽에서의 빠른 삽입/삭제가 가능하기 때문에 이를 활용하면 성능을 더 높일 수 있다.
from collections import deque

n, m = map(int, input().split())
basket = deque(range(1, n+1))  # deque 사용

for _ in range(m):
    i, j = map(int, input().split())
    temp = list(basket)[i-1:j]  # 부분 리스트 추출 후
    temp.reverse()  # 뒤집기
    basket[i-1:j] = temp  # 원래 리스트에 적용

print(' '.join(map(str, basket)))  # 리스트 출력

끄적끄적

튜플 스왑

튜플 스왑은 Python에서 두 변수의 값을 쉽게 교환하는 방법이다. 튜플 스왑은 스택 연산에서 자주 사용된다.

# 기본적인 튜플 스왑
a = 5
b = 10
a, b = b, a
print(a, b) # 10, 5

# 리스트 요소 간의 값 교환
arr = [1, 2, 3, 4]
arr[0], arr[1] = arr[1], arr[0]
print(arr) # [2, 1, 3, 4]

# 반복문을 이용한 다중 스왑
stack = [1, 2, 3, 4, 5]
stack[-1], stack[-2] = stack[-2], stack[-1] 
print(stack)  # [1, 2, 3, 5, 4]

remove()

remove()list.remove(value)의 형식으로 사용되며 리스트 안에 항목을 제거한다. 이때 항목을 값으로 삭제하며, 인덱스 번호로는 삭제하지 않는다. 또한, 삭제할 값이 리스트 안에 여러 개 존재한다면 첫번재 발생한 경우만 삭제한다.

set()

set 정리는 여기로 -> 집합 set()

reverse()와 reversed()

역순함수 정리는 여기로 -> 역순 reverse(), reversed()

profile
데이터 엔지니어가 되어 봅시다 🌈

0개의 댓글