본문 바로가기

ALGORITHM

백준 10431 줄세우기 (Java)

1. 문제 링크

 

10431번: 줄세우기

초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

20명을 차례대로 줄 세우는 문제이다.

list(height)를 만들어서 학생 한 명씩 넣는 과정에서 list에서 지금 입력값보다 큰 값이 나오는 순간의 인덱스를 구한다.

그렇게 하면 뒤로 한 걸음씩 물러서야 하는 학생의 수를 전체 list의 크기 - 현재 인덱스 -1이 된다.

그 과정을 반복하면 답이 나온다.

 

4. 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int T = Integer.parseInt(br.readLine());
		for(int t=1;t<T+1;t++) {
			sb.append(t+" ");
			List<Integer> height = new ArrayList<>();
			String[] split = br.readLine().split(" ");
			
			int where, cnt = 0;
			height.add(Integer.parseInt(split[1]));
			
			for(int i=2;i<21;i++) {
				int now = Integer.parseInt(split[i]);
				
				where = -1;
				for(int j=0;j<i-1;j++) {
					if(height.get(j)>now) {
						where = j;
						break;
					}
				}
				if(where == -1) { //다 작았을 때
					height.add(now);
				}
				else {
					height.add(where, now);
					cnt += height.size()-where-1;
				}
			}
			sb.append(cnt).append("\n");
		}
		System.out.println(sb);
	}	
}

 

'ALGORITHM' 카테고리의 다른 글

백준 2096 내려가기 (Java)  (0) 2023.03.09
백준 11057 오르막 수 (Java)  (0) 2023.03.09
백준 11866 요세푸스 문제 0 (Java)  (0) 2023.03.07
백준 21921 블로그 (Java)  (0) 2023.03.06
백준 1003 피보나치 함수 (Java)  (0) 2023.03.05