https://www.acmicpc.net/problem/1138
1138번: 한 줄로 서기
첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다
www.acmicpc.net
저는 구현을 통해 문제를 해결하였습니다.
앞에서부터 앞에 몇개있는지를 보고 몇번째에 있어야 하는지 판단하였습니다.
입력이 키가 작은 순서대로 주기 때문에 앞에서부터 앞에 아무도 없다면 맨앞, 한명 있다면 한칸 뒤로 .... 이렇게 진행됩니다.
그리고 해당 칸에 사람이 있다면 현재 사람보다 키가 작은 사람이기 때문에 한칸 더 뒤로 가서 서있게 됩니다.
저는 이 방법으로 문제를 해결하였습니다.
package BOJ.etc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.function.Function;
import org.w3c.dom.ls.LSOutput;
public class BOJ_1138 {
private static final int EMPTY = 0;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Function<String,Integer> stoi = Integer::parseInt;
int n = stoi.apply(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] input = new int[n];
for(int i = 0 ; i < n ; i++){
input[i] = stoi.apply(st.nextToken());
}
int[] result = new int[n];
for(int i = 0 ; i < n ; i++){
int cnt = input[i];
int index = 0;
while(cnt > 0){
if(result[index] == EMPTY){
index++;
cnt--;
continue;
}
while(result[index] != EMPTY){
index++;
}
}
while(result[index] != EMPTY){
index++;
}
result[index] = i + 1;
// System.out.println(Arrays.toString(result));
}
for(int i = 0 ; i < n ; i++){
System.out.print(result[i]+" ");
}
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 수 조작하기 (JAVA) (0) | 2023.09.22 |
---|---|
백준 1124번 언더프라임 (JAVA) (0) | 2023.09.21 |
백준 1193번 분수찾기 (JAVA) (0) | 2023.09.19 |
백준 14218번 그래프 탐색2 (JAVA) (0) | 2023.09.18 |
백준 1812번 사탕 (JAVA) (0) | 2023.09.17 |