Algorithm/Simulation, Implement
[백준][BOJ 10431] - 줄세우기
Lazy_developer
2023. 10. 3. 14:10
문제
https://www.acmicpc.net/problem/10431
10431번: 줄세우기
초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1
www.acmicpc.net
문제 접근
- 삽입 정렬의 구현을 조금 변형하여 구현하는 문제였다.
- 현재 데이터 보다 큰 데이터가 앞에 있는 그 즉시 큰 데이터를 포함하여 그 뒤에 있는 모든 데이터를 한 칸씩 뒤로 옮기는 부분이 가장 핵심적인 기능이었다. 모든 데이터를 한 칸 뒤로 옮기게 되면 현재 데이터보다 큰 데이터가 있던 자리에 현재 데이터를 삽입(insert)하는 방식으로 구현하면 끝나는 문제였다.
정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int testCase = 0; testCase < T; testCase++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int testNum = Integer.parseInt(st.nextToken());
int ans = 0;
int[] length = new int[20];
for (int i = 0; i < 20; i++) {
length[i] = Integer.parseInt(st.nextToken());
}
for (int i = 1; i < 20; i++) {
for (int j = 0; j < i; j++) {
if (length[j] > length[i]) {
int temp = length[i];
for (int k = i; k > j; k--){
length[k] = length[k - 1];
ans++;
}
length[j] = temp;
break;
}
}
}
System.out.println(testNum + " " + ans);
}
}
}