1은 나오지 않게 했습니다. public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int input_num = scanner.nextInt(); int division_num = 2; while (true) { if(division_num>input_num) break; else { if (input_num % division_num == 0) { System.out.println(division_num); input_num = input_num / division_num; } else { division_num++; } } } }
보기에는 쉬운문제. 하지만 의외로 생각해야 할게 있었다. 일단 시작하는 날을 0부터가 아니라 1부터 인것. 그리고 낮에 올라가있는 위치와 밤에 올라가 있는 위치를 고려해야 한다. 처음 문제를 풀때는 단순하게 현재 달팽이의 위치와 나무의 높이를 비교했지만, 다르게 나왔고, 무엇이 문제 인지 고민했다. 달팽이가 올라가는 높이는 2, 떨어지는 높이는 1, 나무의 높이가 5라고 가정해보자. 1일차에는 2의 높이까지 올라와 있다. 하지만 나무의 높이가 5이므로 올라오지 못했다. 2일차에는 밤에 자는동안 1의 높이 만큼 떨어져 있다. 다시 올라가니 3의 높이 만큼 올라와 있다. 3일차에는 2의 높이에서 시작. 4만큼의 높이에 도착. 4일차에는 3의 높이에서 시작. 5만큼의 높이에 도착. 종료 이 문제의 핵심을 날짜..
알고리즘 문제를 푸는 첫 단계는 언제나 규칙성을 찾아보는 것이다. 단순 무식하게 배열을 만들어서 풀어도 되지만, 시간도 오래걸리고 비효율적이다. 따라서 규칙을 찾고 그 규칙에 따라 수학적으로 풀어보자. 설명을 보고 규칙을 찾아보면 이런 식으로 분수를 읽는것 을 알수 있다. 또한 시작하는 분수의 분모와 분자는 n번째 화살표(위에서 작은 순서부터)이면 분모 혹은 분자도 n인것을 알 수 있다. 그리고 n+1번 분수는 n번 분수보다 분자가 1작고 분모는 1이 크다.(하나의 화살표에서만 해당) 풀이 규칙 n+1번 분수는 n번 분수보다 분자가 1작고 분모는 1크다. n번쨰 화살표의 각 끝부분 분수는 분자 or 분모가 n이다. 지그재그이므로 가장 작은 화살표 를 1번이라 하고, 그 다음 화살표를 2번이라 할때 , 홀..
육각형의 벌집에서 번호를 매기고 1번 방부터 그 번호로 가는데 거쳐야 하는 방의 최소 개수를 구하는 문제. 풀이 일단 기본적으로 이동한 방의 개수는 1개부터 시작이다. 그 이유는 1번부터 시작이기에 이미 방을 1개 거쳤기 때문. 예제를 잃어보면 1번방을 지나간 방으로 친다는걸 알 수 있다. n개의 방을 이동했을때 갈 수 있는 방을 정리해보았더니 n=1. 1 1개. n=2. 2,3,4,5,6,7. 6개 n=3 8,9,10,11,12,13,14,15,16,17,18,19. 12개 n=4. 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37. 18개 n=5. 38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,..