본문 바로가기
알고리즘/수학 퍼즐

[수학퍼즐 / java] 03.카드를 뒤집어라!

by drCode 2021. 3. 23.
728x90
반응형

 

안녕하세요.

이번 포스팅은 프로그래머의 뇌를 단련하는 수학퍼즐 3번문제인 카드를 뒤집어라! 를 풀어보겠습니다

 

 

1~100의 번호가 쓰인 100장의 카드가 순서대로 나열되어 있다.

모든 카드는 뒷면이 위를 향한 상태로 놓여 있다.

한 사람이 2번 카드부터 1장 간격으로 카드를 뒤집어 나간다.

그러면 2, 4, 6, ... , 100번 카드의 앞면이 나타나게 된다.

그 다음으로, 다른 사람이 3번 카드부터 2장 간격으로 카드를 뒤집어 나간다( 뒷면이 위를 향한 카드는 앞면이 보이게 되고 앞면이 위를 향한 카드는 뒷면이 보이게 된다.)

다시 다른 사람이 4번 카드부터 3장 간격으로 카드를 뒤집어 나간다.

이렇게 n번째의 카드부터 n-1장 간격으로 카드를 뒤집는 작업을 뒤집을 카드가 더는 없을 때까지 계속한다고 가정한다.

문제

뒤집을 카드가 더는 없게 되었을 때 뒷면이 위를 향한 카드의 번호를 모두 구해보아라.

 

package cardReverse;

public class CardReverse {
	public static void main(String[] args) {
		int[] arr = new int[100];
		for (int i = 0; i < arr.length; i++) arr[i] = 0;

		for (int i = 1; i < arr.length; i++) {
			for (int j = i; j < arr.length;) {
				if (arr[j] == 0) arr[j] = j + 1; 
				else arr[j] = 0;
				
				j += i + 1;
			}
		}

		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == 0) System.out.println("카드가 뒤집어 진 곳 : " + (i + 1));
		}
	}
}

 

정답 :

카드가 뒤집어 진 곳 : 1

카드가 뒤집어 진 곳 : 4

카드가 뒤집어 진 곳 : 9

카드가 뒤집어 진 곳 : 16

카드가 뒤집어 진 곳 : 25

카드가 뒤집어 진 곳 : 36

카드가 뒤집어 진 곳 : 49

카드가 뒤집어 진 곳 : 64

카드가 뒤집어 진 곳 : 81

카드가 뒤집어 진 곳 : 100

728x90
반응형

댓글