일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- VPS
- 시작
- blender
- 다이나믹프로그래밍
- 잴다의 전설 티어스 오브 더 킹덤
- 스택
- 큐
- 2025 대한민국 채용박람회
- 닌텐도 스위치 2
- 빅오 표기법
- 코딩테스트
- 카니발대학교 공대강국
- 브루트포스 알고리즘
- 마인크래프트
- 우선순위 큐
- windows 12
- 라자냐
- c#
- 그리디 알고리즘
- 배열 리스트
- T자형 인재
- 자료구조
- 영어
- VRoid Studio
- 택시 기하학
- unity engine
- vrm posing desktop
- i자형 인재
- 그래픽 디자인
- 이진 탐색
- Today
- Total
WalkerJei's Lifelog
백준알고리즘 10811번 바구니 뒤집기 C# 본문
세부 정보
- 사이트: 백준알고리즘
- 번호: 10811
- 문제명: 바구니 뒤집기
- 언어: C#
- 분류: 구현, 시뮬레이션
- 비고:
문제
도현이는 바구니를 총 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)
도현이는 입력으로 주어진 순서대로 바구니의 순서를 바꾼다.
출력
모든 순서를 바꾼 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.
풀이
범위 이동은 왼쪽 바구니 값이 오른쪽 바구니 값보다 작은 상태에서만 계속된다.
StreamReader sr = new StreamReader(Console.OpenStandardInput());
StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
// 바구니의 개수와 바구니 순서를 바꾸는 방법의 횟수 입력
int[] nm = sr.ReadLine().Split().Select(int.Parse).ToArray();
// 바구니
int[] basket = new int[nm[0]];
// 바구니 순서를 바꾸는 방법
int[] swap = new int[2];
// 바구니 할당
for (int i = 0; i < nm[0]; i++)
basket[i] = i + 1;
// 바구니 위치 바꾸기
for (int i = 0; i < nm[1]; i++)
{
// 바구니 위치를 바꿔 줄 방법 입력
swap = sr.ReadLine().Split().Select(int.Parse).ToArray();
// 입력한 수에서 1을 빼서 0번째 바구니에 접근할 수 있게 해 준다.
// 이를 생략하면 순서가 엉망이 될 수 있다.
swap[0]--;
swap[1]--;
while (swap[0] < swap[1])
{
// 왼쪽 바구니를 임시 변수에 저장
int temp = basket[swap[0]];
// 오른쪽 바구니를 왼쪽으로 이동
basket[swap[0]++] = basket[swap[1]];
// 빈 왼쪽 자리에 임시 변수에 있던 바구니 배치
basket[swap[1]--] = temp;
}
}
// 바구니 위치 출력
for (int i = 0; i < basket.Length; i++)
sw.Write(basket[i] + " ");
sr.Close();
sw.Close();
후기
피드백 끝에 1차원 배열 단계의 10문제를 모두 풀었다. 이 문제의 While(swap[0] < swap[1])의 중괄호 안의 내용을 이해해서 가지고 가야 한다. 현재까지 주로 잘 풀어낸 문제들의 분류를 보면 수학, 구현, 자료 구조다. 이 3가지 뿐만 아니라 나머지도 해야 한다.
'소프트웨어 개발 > 코딩테스트(기성 문제)' 카테고리의 다른 글
백준알고리즘 11047번 동전 0 C# (0) | 2025.04.26 |
---|---|
백준알고리즘 1920번 수 찾기 C# (0) | 2025.04.25 |
백준알고리즘 11279번 최대 힙 C# (0) | 2025.04.23 |
백준알고리즘 3053번 택시 기하학 C# (0) | 2025.04.23 |
백준알고리즘 2745번 진법 변환 C# (0) | 2025.04.21 |