내가 생각했을때 문제에서 원하는부분
첫째 줄에 조각에 쓰여 있는 수가 순서대로 주어진다.
숫자는 1보다 크거나 같고, 5보다 작거나 같으며, 중복되지 않는다. 처음 순서는 1, 2, 3, 4, 5가 아니다.
두 조각의 순서가 바뀔때 마다 조각의 순서를 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 입력을 받고, 이를 공백 기준으로 나눠 정수 배열 pieces에 저장해준다.
정렬 과정: 반복문을 통해 각 인접한 조각들을 비교하고, 필요에 따라 위치를 바꾼다.
위치가 바뀔 때마다 현재 상태를 StringBuilder에 저장해준다.
최종 출력: 모든 위치 변경이 끝난 후, StringBuilder의 내용을 한 번에 출력한다.
코드로 구현
package baekjoon.baekjoon_27;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2947번 문제
public class Main966 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// 입력 받기
String[] input = br.readLine().split(" ");
int[] pieces = new int[5];
for(int i = 0; i < 5; i++) {
pieces[i] = Integer.parseInt(input[i]);
}
boolean sorted = false;
while(!sorted) {
sorted = true;
// 비교 및 스왑
for(int i = 0; i < 4; i++) {
if(pieces[i] > pieces[i + 1]) {
// 스왑
int temp = pieces[i];
pieces[i] = pieces[i + 1];
pieces[i + 1] = temp;
// 결과 저장
sb.append(pieces[0]).append(" ")
.append(pieces[1]).append(" ")
.append(pieces[2]).append(" ")
.append(pieces[3]).append(" ")
.append(pieces[4]).append("\n");
sorted = false; // 아직 정렬되지 않음
}
}
}
// 최종 출력
System.out.print(sb.toString());
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.