100세까지 코딩
[백준] 10811번 바구니 뒤집기 (파이썬) 본문
문제

나의 생각
- 투 포인터를 쓴다.
- 시작값인 i는 오른쪽으로 전진. 즉 i+=1
- 끝값인 j는 왼쪽으로 전진. 즉 j-=1
- 시작값이 끝값과 같거나 커지면 종료. 즉 끝값이 시작값보다 큰 경우까지만 반복. while j > i
나의 풀이
N, M = map(int, input().split())
number_list = [i for i in range(1, N + 1)]
for _ in range(M):
i, j = map(int, input().split())
while j > i:
number_list[i - 1], number_list[j - 1] = number_list[j - 1], number_list[i - 1]
i += 1
j -= 1
print(*number_list)
새롭게 배운 풀이
N, M = map(int, input().split())
number_list = [i for i in range(1, N + 1)]
for _ in range(M):
i, j = map(int, input().split())
temp_list = number_list[i - 1:j]
temp_list.reverse()
number_list[i - 1:j] = temp_list
print(*number_list)
참고
1. 슬라이싱을 통해 list를 분리해 복사할 수 있다. (깊은 복사 : 원본의 list에 영향 안줌)
2. list의 내장함수 reverse()를 사용하면 list를 역순으로 바꿔준다.
3. 슬라이싱을 통해 기존 list에 temp_list를 복사할 수 있다.
4. 단, 슬라이싱한 개수와 대입할 list개수가 다르면 슬라이싱 자리에 temp_list를 넣은 후 남은 값 그대로 복사
ex) number_list = [1,2,3,4,5]
temp_list= [3,2,4]
number_list[0:1] = temp_list
print(number_list) 결과 : [3, 2, 4, 2, 3, 4, 5]
'코딩테스트 > 파이썬' 카테고리의 다른 글
[백준] 10809번 알파벳 찾기 (파이썬) (0) | 2024.01.09 |
---|---|
[백준] 1546번 평균 (파이썬) (0) | 2024.01.09 |
[백준] 3052번 나머지 (파이썬) + set 내장 함수 정리 (0) | 2024.01.08 |
[백준] 10813번 공 바꾸기 (파이썬) + swap 구현 (0) | 2024.01.08 |
[백준] 2562번 최댓값 (파이썬) (0) | 2024.01.08 |