![[백준/BOJ] 10811번: 바구니 뒤집기 (Python) 풀이](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlmpCM%2FbtsHOCXhZg5%2F4KfT9bN4q1A7cOXp6Qhy4K%2Fimg.png)
[백준/BOJ] 10811번: 바구니 뒤집기 (Python) 풀이Dev/PS2024. 6. 4. 23:15
Table of Contents
Baekjoon Online Judge (BOJ) 의 10811번 문제인 '바구니 뒤집기' 를 풀어보았다.
[문제 정보]
https://www.acmicpc.net/problem/10811
문제 개요:
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.
도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다.
바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
둘째 줄부터 M개의 줄에는 바구니의 순서를 역순으로 만드는 방법이 주어진다. 방법은 i j로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 역순으로 만든다는 뜻이다. (1 ≤ i ≤ j ≤ N)
도현이는 입력으로 주어진 순서대로 바구니의 순서를 바꾼다.
[ 출력 ]
모든 순서를 바꾼 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.
즉, M번의 테스트 케이스에서 각 i, j를 입력받고, i번째 바구니부터 j번째 바구니까지 순서를 역순으로 바꾸는 문제라고 보면 된다.
예시) N이 5일 경우 [1, 2, 3, 4, 5] 로 5번까지의 바구니가 주어지고, 첫 줄에서 1, 3을 입력받았다면 [3, 2, 1, 4, 5] 로 바뀌어야 한다.
알고리즘:
- N(바구니 개수), M(테스트 케이스 수)를 먼저 입력받는다.
- N개의 바구니를 담을 배열 basket을 추가해준다. (리스트 안에서 for문을 사용해 1~N 범위의 수를 N개 넣은 배열을 basket 변수에 초기화해준다.)
- M번 반복하는 반복문을 만들고, 각 케이스를 입력받을 수 있도록 반복문 내부에서 i, j를 입력받는다.
- 입력받은 i, j를 가지고 list의 slicing을 활용하여 i~j 범위의 바구니만을 역순으로 바꾼다.
(예시: 만약 i가 1, j가 3일 경우 basket[i-1:j] 는 basket[0:3] 이라고 볼 수 있고, 해당 범위만큼 슬라이싱하면 [1, 2, 3] 이 나온다. 이 범위를 [::-1]을 사용하여 역순으로 바꿔주면 [3, 2, 1] 이 될 것이고, 이 배열을 본 배열의 범위에 초기화시켜주면 역순으로 정렬된 배열이 본 배열에 해당 범위만큼 적용된다. 즉 결과는 [3, 2, 1, 4, 5] 가 된다.) - 4번 과정을 M번 반복하고, 정렬이 완료된 basket 배열은 배열 길이만큼 for문을 돌려 순서대로 값(바구니)을 출력해준다.
코드:
N, M = map(int, input().split())
basket = [i for i in range(1, N+1)]
for _ in range(0, M):
i, j = map(int, input().split())
basket[i-1:j] = basket[i-1:j][::-1]
for i in range(0, len(basket)):
print(basket[i], end=' ')
위 풀이에 대한 질문이나 틀린 정보가 있다면 댓글로 말씀해 주시면 감사하겠습니다!
728x90
'Dev > PS' 카테고리의 다른 글
[백준/BOJ] 9086번: 문자열 (Python) 풀이 (0) | 2024.06.05 |
---|---|
[백준/BOJ] 1546번: 평균 (Python) 풀이 (0) | 2024.06.04 |
[백준/BOJ] 3052번: 나머지 (Python) 풀이 (0) | 2024.06.02 |
[백준/BOJ] 5597번: 과제 안 내신 분..? (Python) 풀이 (0) | 2024.05.30 |
[백준/BOJ] 10813번: 공 바꾸기 (Python) 풀이 (0) | 2024.05.30 |
@KangJerry :: 강제리의 개발 이야기
실력있는 개발자가 되고싶은 22학번 대학생입니다. (현재는 군복무 중)
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!