*(백준BAEKJOOB )* 10811 바구니 뒤집기
2023. 5. 5. 15:00ㆍ언어/c, c++
728x90
문제출처:
https://www.acmicpc.net/problem/10811
10811번: 바구니 뒤집기
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2
www.acmicpc.net
문제풀이:
간단하게 코드 설명
1. N개의 바구니 배열을 만들어서 넣어줌
2. 역순범위 M의 값 반복문 만들어줌
3. 역순범위 a , b 값을 받아준다. (a부터 b까지 역순으로 적음)
4. 반복문이 (b-a+1)/2 만큼 돌려줌
쉽게설명
1. 바구니 5개로 잡겠다. 5개의 바구니에 1 2 3 4 5 각각 넣어줌
2. M을 4로잡고 1 2 3 4
3. a가 1 b가 4라면 4 3 2 1
4. 만약 a가 2 b가5일때 2와5 3과4 교환해야 되므로
코드:
#include <iostream>
using namespace std;
int main() {
int N;
int Basket[101] = { 0, };
int M;
int a, b;
int temp = 0;
cin >> N >> M;
for (int i = 1; i <= N; i++) {
Basket[i] = i;
}
for (int i = 1; i <= M; i++) {
cin >> a >> b; // 1 3 라고하면
// a부터 b까지의 수를 역순으로 바꾸는 작업
for (int j = 0; j < (b - a + 1) / 2; j++) {
temp = Basket[a + j]; //1
Basket[a + j] = Basket[b - j]; // 3자리에 1이감
Basket[b - j] = temp; //
}
}
// 결과 출력
for (int i = 1; i <= N; i++) {
cout << Basket[i] << " ";
}
return 0;
}
+ 다른코드 비교
for (int i = 1; i <= M; i++) {
cin >> a >> b;
for (int j = 0; j <= (b - a) / 2; j++)
{
swap(Basket[j + a], Basket[b - j]);
}
}
참고:
구현 문제
+역순으로 출력할때 바꾸는 기초 작업을 알게됨
+swap코드를 이용해서 더 쉽고 가독성 있게 만들수있다.
728x90
'언어 > c, c++' 카테고리의 다른 글
*(백준BAEKJOOB )* 14916 거스름돈 (0) | 2023.05.12 |
---|---|
*(백준BAEKJOOB )* 11721 열 개씩 끊어 출력하기 (0) | 2023.05.09 |
*(백준BAEKJOOB )* 13305 주유소 (0) | 2023.05.02 |
*(백준BAEKJOOB )* 16486 운동장 한 바퀴 (0) | 2023.05.02 |
(백준BAEKJOOB )- 공바꾸기, 공넣기 문제"c++" (0) | 2023.03.27 |