규칙을 찾기가 어려웠던 문제. 중간에 계산을 잘못해서 푼 줄 알았는데 알고보니 틀렸었다. 뭔가 규칙이 보일듯 말듯 한데 잘 보이지 않아서 고생했다. 조건 시작할때와 목적지에 도달 전의 이동거리는 반드시 1이 되어야 한다. 이동 가능한 거리는 바로 전에 이동했던 거리(n)의 n-1, n, n+1만큼 이동할 수 있다. 이런 문제를 풀때는 반드시 어딘가에 경우의 수를 써가면서 풀자. 암산하려고 하면 더 어렵고 헷갈린다. 거리(y-x) 경로 가장 큰 이동거리 작동횟수 1 1 1 1 2 11 1 2 3 111 1 3 4 121 2 3 5 1211 2 4 6 1221 2 4 7 12211 2 5 8 12221 2 5 9 12321 3 6 위 표를보면 몇가지 규칙이 있다. 1. 거리가 제곱일때 그 가장 큰 이동거리가..
막상 보면 매우 쉬운 문제 같지만, 알고리즘을 짜려고 들어가면 생각보다 어렵다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); int sugar=scanner.nextInt(); int count=0; if(sugar%5>3){ count=sugar/5; sugar=sugar-5*count; } else if(sugar%5
간단하지만 구현을 어떻게 하느냐에 따라 시간차이가 많이 나는 문제 유형이다. 제한이 14로 되어있어서 배열에 각 호수마다의 인원수를 넣었지만, 만약 제한이 100이 되었다면, 구현을 달리 해야한다. 일단은 배열에 각 호수마다의 인원을 넣어서 풀었다. 내일 알고리즘을 손 봐서 제한이 100일때도 구현해 봐야겠다. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[][] apart = new int[15][15]; for(int i = 0; i < 15; i++) { apart[i][1] = 1; apart[0][i] = ..
이 문제에서 주의할 점은 하나다. 꼭대기 층일때의 방 번호다. 일반적인 방 번호를 구하는 식은 손님의 번째 수 /층를 이용해 앞번호는 나머지, 뒷벗호는 몫+1 이지만 꼭대기 층일경우 몫은 1이 되서 2가 되버리고 나머지는 0이 되서 앞번호가 0이 되어버리기 때문이다. 이것만 주의하면 조금만 생각해도 풀 수 있는 문제. import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class bae10250 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); List floor=new ArrayList(); List room..
시간 복잡도를 신경 안썼더니 점점더 시간이 오래걸린다. 10000을 입력하고 시간을 재보니 2초정도 나왔다. 너무 오래걸린다. public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List arr=new ArrayList(); int input; int min,max; int count=0; while(true){ input=scanner.nextInt(); if(input==0) break; else arr.add(input); } for(int i=0;i
아직은 시간복잡도를 생각하지 않고 생각 하는대로 구현중이다. 감좀 다시 익히고 나면 시간복잡도도 다시 신경써야겠다. public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int min=0,max=0; min=scanner.nextInt(); max=scanner.nextInt(); for(int i=min;i