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]로 돌아오지 못합니다.");
}
}
}
결과
'코딩 문제 > 매일프로그래밍' 카테고리의 다른 글
매일프로그래밍 - 원소 이동 (0) | 2021.02.01 |
---|---|
매일프로그래밍 - 배열 안 해당문자 여부 확인 (0) | 2021.02.01 |
매일프로그래밍 - 정수 배열 정렬 알고리즘 구현 (0) | 2021.02.01 |
매일프로그래밍 - 입력받은 배열 소용돌이 모양 출력 (0) | 2021.01.27 |
매일프로그래밍 - 랜덤 정수 배열 - 중복 값 찾기 (0) | 2021.01.26 |