문제
N명의 사람들은 매일 아침 한 줄로 선다. 이 사람들은 자리를 마음대로 서지 못하고 오민식의 지시대로 선다.
어느 날 사람들은 오민식이 사람들이 줄 서는 위치를 기록해 놓는다는 것을 알았다. 그리고 아침에 자기가 기록해 놓은 것과 사람들이 줄을 선 위치가 맞는지 확인한다.
사람들은 자기보다 큰 사람이 왼쪽에 몇 명 있었는지만을 기억한다. N명의 사람이 있고, 사람들의 키는 1부터 N까지 모두 다르다.
각 사람들이 기억하는 정보가 주어질 때, 줄을 어떻게 서야 하는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 크거나 같고, N-i보다 작거나 같다. i는 0부터 시작한다.
출력
첫째 줄에 줄을 선 순서대로 키를 출력한다.
예제 입출력
풀이
자기보다 큰 사람이 몇 명인지의 정보를 저장한 arr 배열
List에 답을 넣어줄 때, arr배열의 인덱스를 몇 번째 사람인지의 값으로, arr배열의 값을 인덱스 정보로 사용한다.
이때, 역방향으로 접근하지 않으면 원하는 값이 나오지 않으니 주의 !!
고쳐봐야 할 코드 (쩡민이랑 같은 로직) -> int n 입력 부분 수정
줄 세운 결과를 저장할 line 배열을 사람 개수만큼 0으로 초기화 해두고, 자기보다 큰 사람 수만큼 0을 찾아 건너뛰고, 그 다음 0 칸에 넣어준다.
"N은 10보다 작거나 같은 수"인데 왜 한 자리 숫자만 받았을까 바보!!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
//int n = Character.getNumericValue(br.readLine().charAt(0));
int n = Integer.parseInt(br.readLine()); //수정
int[] countLeft = new int[n+1];
int[] line = new int[n+1];
st = new StringTokenizer(br.readLine());
// 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 정보
for (int i = 1; i <= n; i++) {
countLeft[i] = Integer.parseInt(st.nextToken());
}
for (int i = 1; i <= n; i++) {
lineUp(line, countLeft[i], i);
}
for (int i = 1; i <= n; i++) {
System.out.print(line[i] + " ");
}
}
static void lineUp(int[] line, int countZero, int value) {
// countZero 개수만큼 0을 찾아 건너뛰고, 다음 자리에 value를 넣음
// countZero=2라면, 0을 두 개 찾고 다음 0의 위치에 value를 넣어야 함.
int count = 0;
for (int i = 1; i < line.length; i++) {
if(line[i]==0) count++; //0 만나면 세어주고
if(count == countZero+1) { //현재 세고있는 count가 들어가야 할 위치에 도달하면
line[i]=value; //줄 세워주기
break;
}
}
}
}
'Algorithm > 백준' 카테고리의 다른 글
[백준/JAVA] 🥈 1193번 분수찾기 (1) | 2024.01.04 |
---|---|
[백준/JAVA] 🥇 16234번 인구 이동 (1) | 2023.12.31 |
[백준/JAVA] 🥈 1063번 킹 (1) | 2023.12.30 |
[백준/JAVA] 🥈 1051번 숫자 정사각형 (0) | 2023.12.29 |
[백준/JAVA] 🥈 1966번 프린터 큐 (1) | 2023.12.26 |