문제 출저
https://www.acmicpc.net/problem/10431
10431번: 줄세우기
초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1
www.acmicpc.net
문제 풀이
20명의 학생들을 키 순서대로 줄 세우려고 합니다. 줄 세우는 방법은 한 명씩 세우는데 자기보다 큰 애가 있으면 그 앞에 서는 겁니다. 이 때 키가 큰 애들은 한 걸음씩 뒤로 갑니다. 주어진 배열대로 줄을 섰을 때 총 몇 검을 뒷걸음질 치는지 구해야 합니다. 이 문제는 테스트케이스가 독립적으루 주어지므로 각각의 케이스마다 답을 구해야 합니다.
시뮬레이션, 구현 문제입니다.
학생들을 줄 세우때 이미 줄 서 있는 학생들 중 큰 사람을 구해서 문제를 풀었습니다.
소스 코드
package baekjoon.backjoon10.day1120.day14;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
/*
줄세우기
https://www.acmicpc.net/problem/10431
*/
public class B10431 {
static int testcase;
static StringBuilder sb;
static int[] board;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
testcase = Integer.parseInt(br.readLine());
sb = new StringBuilder();
for(int test = 1; test <= testcase; test++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int caseNumber = Integer.parseInt(st.nextToken());
board = new int[20];
for(int i = 0; i < 20; i++) {
board[i] = Integer.parseInt(st.nextToken());
}
sb.append(caseNumber).append(" ");
simulation();
sb.append("\n");
}
System.out.println(sb);
}
// 나보다 큰 애가 몇 명 있는지 구하면 된다.
public static void simulation() {
List<Integer> line = new ArrayList<>();
line.add(board[0]);
int result = 0;
for(int i = 1; i < 20; i++) {
int student = board[i];
for(int data : line) {
if(student < data) {
result++;
}
}
line.add(student);
}
sb.append(result);
}
}