-
카드를 뒤집어라!알고리즘/알고리즘 퍼즐68 2020. 6. 10. 15:21
[문제]
1 ~ 100까지의 카드가 있다. 모든 카드는 뒷면이 위를 향한 상태로 놓여있다.
2번 카드부터 1장 간격으로 카드를 뒤집는다. 3번부터 2장 간격으로 카드를 뒤집는다.
이렇게 n번째의 카드부터 n-1장 간격으로 카드를 뒤집는 작업을 뒤집을 카드가 더는 없을 때 까지 계속해
뒷면이 위를 향한 카드의 번호를 구해 보세요.
[언어]
Java(1.8)
[풀이]
1234567891011121314151617181920//카드의 정보를 담을 Map 초기화 모든 카드는 뒷면이 위를 향한 상태로 놓여있기 때문에 Object의 기본값 null이 뒷면Map<Integer, Object> map = new HashMap<Integer, Object>();//n번째 카드의 n-1장 간격으로 뒤집기 때문 n은 2 이상for(int i = 2; i <= 100; i++) {//n-1장 간격이기 때문에 n번째 카드를 뒤집는다for(int j = i; j <= 100; j+=i) {if(map.get(j) == null) {map.put(j, new Object());}else {map.put(j, null);}}}for(int i = 1; i <= 100; i++) {if(map.get(i) == null) {System.out.println(i);}}cs [답]
1, 4, 9, 16, 25, 36, 49, 64, 81, 100
'알고리즘 > 알고리즘 퍼즐68' 카테고리의 다른 글
수열의 사칙연산 (0) 2020.06.03 앞뒤가 같은 10진수 만들기 (0) 2020.05.31