희디비
[백준/S2/구현/자바] 1138 한 줄로 서기 본문
💡 문제
N명의 사람들은 매일 아침 한 줄로 선다.
이 사람들은 자리를 마음대로 서지 못하고 오민식의 지시대로 선다.
어느 날 사람들은 오민식이 사람들이 줄 서는 위치를 기록해 놓는다는 것을 알았다.
그리고 아침에 자기가 기록해 놓은 것과 사람들이 줄을 선 위치가 맞는지 확인한다.
사람들은 자기보다 큰 사람이 왼쪽에 몇 명 있었는지만을 기억한다. N명의 사람이 있고,
사람들의 키는 1부터 N까지 모두 다르다.
각 사람들이 기억하는 정보가 주어질 때, 줄을 어떻게 서야 하는지 출력하는 프로그램을 작성하시오
⌨ 입력
첫째줄 사람의 수 N이 주어진다. N <= 10
둘째줄에는 키가 1인 사람 부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명 있었는지 주어진다.
💻 출력 / 제한
첫째줄에 줄을 선 순서대로 키를 출력한다. / 시간 제한 : 2초 / 메모리 : 128MB
풀이 방법
문제 풀이에 1시간 정도 소모가 되었다. 키워드는
둘째줄에 입력되는 수들이 자신이 들어가고 싶은 index를 표시한다는 것이였다.
예제를 보면 뒤에서 부터 접근할때 4는 arr[0]에 들어가게된다.
arr = { 4 }
3은 1번째 인덱스
arr = { 4, 3 }
2는 1번째 어?.. 1번째 인덱스에 수가 있다 그렇다면 뒤쪽의 수를 한칸씩 밀고 들어가게 된다.
arr = { 4, 2, 3 }
1은 2번째 인덱스 마찬가지로 한칸씩 밀고 그 index에 들어간다.
arr = { 4, 2, 1, 3 }
문제를 풀고 다른사람의 답을 보는데
이렇게 넣고자 하는 index에 값이 있다면 한칸씩 오른쪽으로 밀어주는게 있었다.
ArrayList.add(int index, E element) 확인 해보자
실제로 값이 있다면 오른쪽으로 원소를 밀어주고 있었다.
주석을 읽어보면 내용이 있다.
목록. 현재 해당 위치에 있는 요소(있는 경우)를 이동하고
* 오른쪽의 모든 후속 요소(인덱스에 1을 추가합니다).
💥 느낀점
간혹 쓰던 메소드였는데 저런 기능이 있는지 몰랐다.
메소드를 사용할때 실제 구현 부분을 살펴 볼 필요가 있는 것 같다.
'백준' 카테고리의 다른 글
[백준/S2/DP/자바] 11053 가장 긴 증가하는 부분 수열 (0) | 2024.05.26 |
---|---|
[백준/S1/BFS/자바] 2178 미로 탐색 (0) | 2024.05.22 |
[백준/S3/DFS/자바] 2606 바이러스 (0) | 2024.05.07 |
[백준/S1/구현/자바] 2564 경비원 (0) | 2024.04.30 |
[백준/S3/구현/자바] 24060 알고리즘 수업- 병합 정렬1 (0) | 2024.04.19 |