728x90
1. 문제
2947번: 나무 조각
첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다. 숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.
www.acmicpc.net
동혁이는 나무 조각을 5개 가지고 있다. 나무 조각에는 1부터 5까지 숫자 중 하나가 쓰여져 있다. 또, 모든 숫자는 다섯 조각 중 하나에만 쓰여 있다.
동혁이는 나무 조각을 다음과 같은 과정을 거쳐서 1, 2, 3, 4, 5 순서로 만들려고 한다.
1. 첫 번째 조각의 수가 두 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
2. 두 번째 조각의 수가 세 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
3. 세 번째 조각의 수가 네 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
4. 네 번째 조각의 수가 다섯 번째 수보다 크다면, 둘의 위치를 서로 바꾼다.
만약 순서가 1, 2, 3, 4, 5 순서가 아니라면 1 단계로 다시 간다.
처음 조각의 순서가 주어졌을 때, 위치를 바꿀 때 마다 조각의 순서를 출력하는 프로그램을 작성하시오.
2. 풀이
버블정렬이다. 버블 정렬은 가장 끝의 큰 수부터 맞춰지기때문에 두 번째 반복문은 j<4-i로 조건을 건다.
import java.io.*;
import java.util.*;
public class BOJ_2947_나무조각 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int[] order = new int[5];
StringTokenizer st = new StringTokenizer(in.readLine());
for(int i=0;i<5;i++) order[i] = Integer.parseInt(st.nextToken());
StringBuilder sb = new StringBuilder();
for(int i=0;i<4;i++){
for(int j=0;j<4-i;j++){
if(order[j] > order[j+1]){
int tmp = order[j];
order[j] = order[j+1];
order[j+1] = tmp;
for(int o:order){
sb.append(o).append(' ');
}
sb.append('\n');
}
}
}
System.out.print(sb);
}
}
3. 결과
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 17143 낚시왕 - JAVA (0) | 2023.05.24 |
---|---|
[BOJ] 17135 캐슬디펜스 - JAVA (0) | 2023.05.23 |
[BOJ] 2839 설탕배달 - JAVA (1) | 2023.05.21 |
[BOJ] 2206 벽 부수고 이동하기 - JAVA (0) | 2023.05.21 |
[BOJ] 2961 도영이가 만든 맛있는 음식 - JAVA (0) | 2023.05.20 |
댓글