백준온라인
[백준온라인] 1138번 한 줄로 서기
cbkpar
2019. 12. 18. 22:21
문제 : https://www.acmicpc.net/problem/1138
1138번: 한 줄로 서기
첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다.
www.acmicpc.net
문제 요약 : 줄을 선 순서대로 키 출력
입력 | 출력 |
1 ≤ N(사람 수) ≤ 10 N개의 왼쪽에 있는 인원 수 차례로 주어짐 |
줄을 선 순서대로 키를 출력 |
JAVA
채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
16513401 | cbkpar | 1138 | 맞았습니다!! | 12988KB | 76ms | Java | 740B |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
ArrayList<Integer> ans = new ArrayList<Integer>(); // List 자료구조를 사용함
int n = Integer.parseInt(br.readLine());
StringBuffer sbu = new StringBuffer(br.readLine()); //거꾸로 자르기 위해 사용
StringTokenizer st = new StringTokenizer(sbu.reverse().toString());//뒤 부터 불러옴
//키가 큰 순서부터 채우며 들어갈때 키가제일 작은상태로 들어가므로 자기보다 큰사람의 수만큼
//오른쪽으로 리스트를 채워나감
for(int i=n-1;i>=0;i--) ans.add(Integer.parseInt(st.nextToken()),i+1);
for(int i:ans) sb.append(i+" ");
System.out.println(sb.toString());
br.close();
}
}
배열을 사용해 풀 수 있었지만 하나씩 추가할때마다 옆으로 밀어내는 과정이 번거롭기 때문에 List자료 구조를 사용하였다.
또한 이때 ArrayList를 출력할경우 [1, 2, 3, 4]의 형태로 출력이 되는데 replaceAll을 이용해 제거 할 수 있지만
간단히 for문에 넣어 출력하면 된다 이때 배열의 개수를 모를 경우 for(int i:배열이름)을 사용하면 배열의 사이즈를 구하지 않고도 배열의 크기만큼 배열의 값이 i로 변경되며 돌아간다.