Home G8981. 입력숫자
Post
Cancel

G8981. 입력숫자

문제

image


제출 코드

image


문제에서 주어진 코드를 읽고, 출력된 배열의 로직을 이해한 후 거꾸로 시행하여 다시 출력하는 문제이다. 다소 복잡해 보이나, 이해하고 나면 간단하다.

원 코드의 로직은 다음과 같다.

  1. 인덱스 0에서부터 시작
  2. 이미 출력한 수라면, 출력하지 않은 수를 만날때까지 인덱스++
  3. 이미 출력한 수가 아니라면, 출력 후 해당 값만큼 인덱스 이동
  4. 모든 수를 출력할 때까지 2~3 반복

위의 코드로 출력된 배열은, 바로 옆의 수는 현재 인덱스에서 현재값을 더한값을 인덱스로 가진다는 특징이 있다.


위 특징을 고려한 이번 코드 로직은 다음과 같다.

  1. 인덱스 0에서부터 시작, 빈 배열 생성
  2. 입력값 처음부터 순서대로 빈 배열에 넣을것이다.
  3. 인덱스에 해당하는 자리가 비어있다면, 바로 넣기
  4. 비어있지 않다면, 비어있는 자리가 나올때까지 인덱스++
  5. 모든 입력값을 넣을때까지 3~4 반복


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package gold;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class G8981_inputNumber {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		String[] str = br.readLine().split(" ");

		int[] result = new int[N];
		int idx = 0;
		for(int i=0; i<N; i++) {
			while(result[idx]!=0) idx = (idx+1)%N;
			result[idx] = Integer.parseInt(str[i]);
			idx = (idx+result[idx])%N;
		}

		System.out.println(Arrays.toString(result).replace("[", "").replace(",", "").replace("]", ""));
	}

}
This post is licensed under CC BY 4.0 by the author.