10주차 구현 : 문제 2
✔ BOJ_1138
해당 문제 푸는 아이디어가 생각이 안나서ㅠㅠ 꽤나 고생했습니다. 그러던 도중 제일 키가 큰 사람부터 배치하면 보다 쉽다는 힌트를 얻게 되었고..! 이를 기준으로 풀이를 하였습니다.
// 2 1 1 0
// [0 1 2 3 ]
// 4 2 3 1
// 5 4 3 2 1 0
// [ 0 1 2 3 4 5 ]
// 6 5 4 3 2 1
// 6 1 1 1 2 0 0
// [ 0 1 2 3 4 5 6 ]
// 6 2 3 4 7 5 1
요런 로직으로, 키가 가장 큰 사람을 linkedlist에 추가해놓고 그 다음 키 큰 사람이 왼쪽에 키 큰 사람이 1이면 가장 큰 사람 바로 뒤에 넣기, 0이면 가장 큰 사람 앞에 넣기 하는 식으로 해결하면 됩니다. 코드는 다음과 같습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// N명의 사람들은 각각이 자기보다 큰 사람이 왼쪽에 몇 명이 있었는지만을 기억한다.
int n = Integer.parseInt(br.readLine());
// 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에
// 몇명이었는지 주어진다.
LinkedList<Integer> lst = new LinkedList<>();
int[] input = new int[n+1];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=1;i<n+1;i++){
input[i] = Integer.parseInt(st.nextToken());
}
// '키가 큰 사람 자리부터 고정하라는 힌트'
for(int i=n;i>=1;i--){
// if(input[i] > lst.size()) lst.add(i);
// else{lst.add(input[i], i);}
lst.add(input[i], i);
}
// 2 1 1 0
// [0 1 2 3 ]
// 4 2 3 1
// 5 4 3 2 1 0
// [ 0 1 2 3 4 5 ]
// 6 5 4 3 2 1
// 6 1 1 1 2 0 0
// [ 0 1 2 3 4 5 6 ]
// 6 2 3 4 7 5 1
for (Integer integer : lst) {
System.out.print(integer+" ");
}
}
}
Author And Source
이 문제에 관하여(10주차 구현 : 문제 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@alswn9938/10주차-구현-문제-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)