Skip to content

Commit 6c1bb28

Browse files
committed
[Silver V] Title: 줄세우기, Time: 16 ms, Memory: 69104 KB -BaekjoonHub
1 parent d76ad0f commit 6c1bb28

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# [Silver V] 줄세우기 - 10431
2+
3+
[문제 링크](https://www.acmicpc.net/problem/10431)
4+
5+
### 성능 요약
6+
7+
메모리: 69104 KB, 시간: 16 ms
8+
9+
### 분류
10+
11+
구현, 시뮬레이션, 정렬
12+
13+
### 제출 일자
14+
15+
2025년 1월 8일 13:40:48
16+
17+
### 문제 설명
18+
19+
<p>초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1번, 그 다음이 2번, ... , 가장 큰 아이가 20번이 된다. 강산이네 반 아이들은 항상 20명이며, 다행히도 같은 키를 가진 학생은 한 명도 없어서 시간이 조금 지나면 아이들은 자기들의 번호를 인지하고 한 줄로 세우면 제대로 된 위치에 잘 서게 된다.</p>
20+
21+
<p>하지만 매년 첫 며칠간 강산이와 강산이네 반 아이들은 자기가 키 순으로 몇 번째인지 잘 알지 못해 아주 혼란스럽다. 자기 위치를 찾지 못하는 아이들을 위해 강산이는 특별한 방법을 생각해냈다.</p>
22+
23+
<p>우선 아무나 한 명을 뽑아 줄의 맨 앞에 세운다. 그리고 그 다음부터는 학생이 한 명씩 줄의 맨 뒤에 서면서 다음 과정을 거친다.</p>
24+
25+
<ul>
26+
<li>자기 앞에 자기보다 키가 큰 학생이 없다면 그냥 그 자리에 서고 차례가 끝난다.</li>
27+
<li>자기 앞에 자기보다 키가 큰 학생이 한 명 이상 있다면 그중 가장 앞에 있는 학생(A)의 바로 앞에 선다. 이때, A부터 그 뒤의 모든 학생들은 공간을 만들기 위해 한 발씩 뒤로 물러서게 된다.</li>
28+
</ul>
29+
30+
<p>이 과정을 반복하면 결국 오름차순으로 줄을 설 수가 있다.</p>
31+
32+
<p>아이들의 키가 주어지고, 어떤 순서로 아이들이 줄서기를 할 지 주어진다. 위의 방법을 마지막 학생까지 시행하여 줄서기가 끝났을 때 학생들이 총 몇 번 뒤로 물러서게 될까?</p>
33+
34+
### 입력
35+
36+
<p>첫 줄에 테스트 케이스의 수 P (1 ≤ P ≤ 1000) 가 주어진다.</p>
37+
38+
<p>각 테스트 케이스는 테스트 케이스 번호 T와 20개의 양의 정수가 공백으로 구분되어 주어진다.</p>
39+
40+
<p>20개의 정수는 줄서기를 할 아이들의 키를 줄서기 차례의 순서대로 밀리미터 단위로 나타낸 것이다.</p>
41+
42+
<p>모든 테스트 케이스는 독립적이다.</p>
43+
44+
### 출력
45+
46+
<p>각각의 테스트 케이스에 대해 테스트 케이스의 번호와 학생들이 뒤로 물러난 걸음 수의 총합을 공백으로 구분하여 출력한다.</p>
47+
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
let n = Int(readLine()!)!
2+
var answer = ""
3+
(0..<n).forEach { _ in
4+
let ts = readLine()!.split { $0 == " " }.map { Int(String($0))! }
5+
var line: [Int] = []
6+
var stepBack = 0
7+
outer: for last in ts.suffix(from: 1) {
8+
inner: for index in line.indices {
9+
guard line[index] > last else { continue }
10+
stepBack += line.count - index
11+
line.insert(last, at: index)
12+
continue outer
13+
}
14+
line.append(last)
15+
}
16+
answer += "\(ts[0]) \(stepBack)\n"
17+
}
18+
print(answer)

0 commit comments

Comments
 (0)