나무 조각
본문 바로가기
알고리즘 모음집/New 알고리즘

나무 조각

by KyeongMin 2020. 10. 22.
728x90
반응형

www.acmicpc.net/problem/2947

 

2947번: 나무 조각

첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.

www.acmicpc.net

#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define NS 5// 배열의 최대 크기
int B[NS];//입력 배열
int N = 5;//숫자 입력 5개
int chkNum[] = { 1,2,3,4,5 };
void init_input(){//초기화 및 초기 입력
	//초기화
	N = 5;
	memset(B, 0, sizeof(B));
	//초기 입력
	for(int i=0;i<N;i++){
		scanf("%d", &B[i]);//숫자 입력
	}
}
bool chk() {//배열 체크하는 구간
	int cnt = 0;
	for (int i = 0; i < N; i++) {
		if (B[i] == chkNum[i])cnt++;
	}
	if (cnt == N)return false;//일치 하면 0 반환
	else return true;//불일치 하면 1 반환
}
void play() {//시뮬레이션 작동
	int flag = 0;//탈출 신호
	while (chk()) {
		for (int i = 0; i < N-1; i++) {//4번째까지만 비교하기 때문에 N-1
			//1. 첫 번째 조각의 수가 두 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
			//2. 두 번째 조각의 수가 세 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
			//3. 세 번째 조각의 수가 네 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
			//4. 네 번째 조각의 수가 다섯 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
			if (B[i] > B[i + 1]) {
				swap(B[i], B[i + 1]);
				for (int i = 0; i < N; i++) {
					cout << B[i] << " ";
				}
				cout << endl;
			}
			if (chk()==0) {
				flag = 1;
				break;
			}
		}
		if (flag)break;

	}

//만약 순서가 1, 2, 3, 4, 5 순서가 아니라면 1 단계로 다시 간다.
}
int main(void) {
	init_input();
	play();

	return 0;
}

 

시뮬레이션의 특징은 주어진 조건대로 구현할 수 있는가 입니다. 주어진 조건을 자세히 보고 구현하는 연습을  합시다.

728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

15686 치킨배달  (0) 2021.01.10
14500 테트로미노  (0) 2021.01.10
카드 1  (0) 2020.10.22
청소년 상어  (0) 2020.10.17
어른 상어  (0) 2020.10.15

댓글