https://www.acmicpc.net/problem/2947
2947번: 나무 조각
첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.
www.acmicpc.net
📌 개인문제 (백준 2947번 : 나무 조각)
📍 문제
동혁이는 나무 조각을 5개 가지고 있다. 나무 조각에는 1부터 5까지 숫자 중 하나가 쓰여져 있다. 또, 모든 숫자는 다섯 조각 중 하나에만 쓰여 있다.
동혁이는 나무 조각을 다음과 같은 과정을 거쳐서 1, 2, 3, 4, 5 순서로 만들려고 한다.
- 첫 번째 조각의 수가 두 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
- 두 번째 조각의 수가 세 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
- 세 번째 조각의 수가 네 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
- 네 번째 조각의 수가 다섯 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
- 만약 순서가 1, 2, 3, 4, 5 순서가 아니라면 1 단계로 다시 간다.
처음 조각의 순서가 주어졌을 때, 위치를 바꿀 때 마다 조각의 순서를 출력하는 프로그램을 작성하시오.
📍 풀이과정
- 핵심: 배열의 다음 값이 배열의 바로 그 전 값보다 작으면 switch 시켜준다
- num[n+1]={0}; 을 통해 배열 초기화를 시켜준다
- 배열 값을 넣고 만약 ‘num[1] != 1 || num[2] != 2 || num[3] != 3|| num[4] != 4|| num[5] != 5’의 조건에 해당하면 while문을 반복시켜준다
- 의문점 1) 그럼 while문 끝나고도 한번 cout을 해줘야 하지 않나요?? → 어짜피 while문 안에서 한 번 cout을 하도록 하였기에 그거는 상관없다
- 의문점 2) 그럼 int num[n];이나 int num[n]={0}해도 되지 않음? → 이거는 오류가 난다,,,왜 오류가 날까? 그르게,, 이거는 꼭 다시 알아보기⭐️⭐️
#include <iostream>
using namespace std;
const int n=5;
int num[n+1]={0};
int tmp;
int main(){
//배열 값 넣기
for(int i=1;i<=n;i++){
scanf("%d",&num[i]);
}
while(num[1] != 1 || num[2] != 2 || num[3] != 3|| num[4] != 4|| num[5] != 5){
for(int i=1;i<n;i++){
if(num[i]>num[i+1]){
tmp=num[i];
num[i]=num[i+1];
num[i+1]=tmp;
for(int j=1;j<=n;j++){
cout<<num[j]<<" ";
}
cout<<endl;
}
}
}
return 0;
}
'[C++] 백준' 카테고리의 다른 글
| [백준 1302번]베스트셀러 (0) | 2023.08.02 |
|---|---|
| [백준 2776번] 암기왕 (0) | 2023.08.02 |
| [백준 1966번] 프린터 큐 (0) | 2023.07.26 |
| [백준 1551번] 수열의 변화 (0) | 2023.07.25 |
| [백준 16507번] 어두운 것은 무서워 (0) | 2023.07.25 |
댓글