본문 바로가기

코딩 문제/매일프로그래밍

매일프로그래밍 - 입력받은 배열 원소 순환 확인

728x90

Q. 정수 배열 arr이 있습니다. arr 안의 각 원소의 값은 다음 원소의 인덱스입니다.
이렇게 서로 이어지는 원소들의 배열이 있을 때 arr[0]부터 시작하여 
모든 원소를 들린 다음 다시 arr[0]로 도착할 수 있는지 찾으시오.

EX.

input : [ 1, 2, 4, 0, 3 ]

output : True
// 1 -> 2 -> 4 -> 3 -> 0 -> 1

 

input : [ 1, 4, 5, 0, 3, 2 ]
output : False
// 1 -> 4 -> 3 -> 0 -> 1
// arr[2], arr[5]를 들리지 않았습니다.

input : [ 1, 2, 2, 0 ]
output : 1 -> 2 -> 2 -> 2 -> ...
// arr[0]로 돌아오지 못합니다.

 

 

풀이

 

import java.util.Scanner;

 

public class javatest {

 

      public static void main(String[] args) {

 

            String[] arr = null; // 입력받은 값 구분자로 나눈 배열

            int success = 0; // arr[0]으로 돌아오는지 확인하는 변수

            int count = 0; // 모든 원소 들렸는지 확인하는 변수

            int check = 0; // 첫 번째 나오는 0 체크하는 변수

            // 정수 배열 입력받기

            System.out.println("정수 배열을 ,를 구분자로 입력해주세요.");

            Scanner scan = new Scanner(System.in);

            arr = scan.nextLine().split(","); // 입력받은 값 배열에 넣기

            int[] result = new int[arr.length+1];

            // 변수 할당

            int num = Integer.parseInt(arr[0]);

            int finish = Integer.parseInt(arr[0]);

            result[0] = num; // 경로에 arr[0] 값 넣어줌

 

            // 검증

            for(int i=0; i<arr.length; i++) {

                  num = Integer.parseInt(arr[num]);

                  result[i+1] = num;

                  if(finish == num) { // arr[0]으로 돌아왔을 때 for문 종료

                        success++;

                        i = arr.length-1;

                  }

                  count++;

            }

 

            // 결과

            if(success == 1) { // arr[0]으로 돌아갈 때

                  if(count == arr.length) { // 모든 원소를 들렸을 때

                        System.out.println("True");

                  }else { // 모든 원소를 들리지 못했을 때

                        System.out.println("False");

                  }

                  // 경로 출력

                  for(int i=0; i<result.length; i++) {

                        if(result[i] == 0) {

                              if(check == 0) {

                                    check = 1;

                                    System.out.print(result[i] + " -> ");

                              }

                        }else {

                              System.out.print(result[i]);

                              if((result[i] != result[0]) || (i == 0)) {

                                    System.out.print(" -> ");

                              }

                        }

                  }

            }else { // arr[0]으로 돌아가지 않을 때

                  System.out.println("arr[0]로 돌아오지 못합니다.");

            }

      }

}

 

 

결과