알고리즘
-
[java] 백준 알고리즘 2439번 별찍기 - 2 풀이알고리즘/백준 알고리즘 2018. 5. 12. 16:36
간단한거라 설명은 생략. * 풀이소스 123456789101112131415161718192021222324public class Baekjoon2439 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); for(int i=n; i>=1; i--){ String star = ""; for(int j=1; jj){ star += " "; }else{ star += "*"; } } System.out.pri..
-
[java] 백준 알고리즘 1003번 피보나치 함수 풀이알고리즘/백준 알고리즘 2018. 5. 10. 17:59
이 문제를 다른 사람들은 어떻게 풀었는지 봤는데, 이 문제는 어떻게 푸느냐에 따라 정말 다양하게 풀어낼 수 있는 문제 같다. 난 너무 쉽게 생각한걸까. 문제를 잘 들여다보면 return 값에서 해당하는 n에 대해 fibonacci(n-1) + finbonacci(n-2)니까 fibonacci(n)이란 fibonacci(n-1)과 fibonacci(n-2)를 동시에 수행한다는 로직이 성립한다. 그렇다면 fibonacci(n-1)에 해당하는 0이 출력되는 횟수와 1이 출력되는 횟수가 있을 것이고, fibonacci(n-2)에 해당하는 0이 출력되는 횟수와 1이 출력되는 횟수가 있을 것이다. 그럼 이 두 가지 함수의 0 출력횟수와 1 출력횟수를 합쳐주면 fibonacci(n)에 해당하는 0 출력횟수, 1 출력..
-
[java] 백준 알고리즘 1149번 RGB거리 풀이알고리즘/백준 알고리즘 2018. 5. 10. 17:18
이중배열로 문제를 풀어야할 거라고는 생각 못했다. 이중배열로 문제를 풀어야하는 경우가 이번이 처음이어서 다른 사람의 소스를 참고하면서 만들었다. 문제를 착각하면 안되는 것이 빨강->파랑->빨강, 파랑->초록->파랑 처럼 양 옆의 이웃하고만 색이 다르면 된다. 동시에 연속된 세 집이 다른 색이어야한다는 게 아니다. (알고리즘은 문제를 제대로 이해하는게 중요한 듯 싶다.) 풀이방법: 이중배열을 통해 각 행을 '집'으로 간주하고 3열을 '페인트 색'으로 간주한다. 0행(첫번째 집) (0,0) 빨강 (0,1) 초록 (0,2) 파랑 1행(두번째 집) (1,0) 빨강 (1,1) 초록 (1,2) 파랑 2행(세번째 집) (2,0) 빨강 (2,1) 초록 (2,2) 파랑 3행(네번째 집) (3,0) 빨강 (3,1) 초록 ..
-
[java] 백준 알고리즘 2579번 계단오르기 풀이소스알고리즘/백준 알고리즘 2018. 5. 9. 10:32
문제를 푸는데 조건을 잘 이해하는게 중요하다고 느끼는데, 세세한 조건을 착각하는 경우가 많다. 이번에도 첫번째 계단을 꼭 밟을 필요가 없지만, 예시에서는 첫 번째 계단을 시작점과 동시에 밟아야한다고 혼자 착각해서 원리가 맞음에도 불구하고, 초기값으로 넣어줄 세번째 계단 때문에 계속 틀렸다고 떴다. 첫번째 계단을 건너 뛰고 바로 갈 수도 있는 경우를 넣어줘야했는데 말이다... 아래부터 문제와 풀이! 조건은 총 세가지가 있다. 조건 세가지 모두 만족하려면, 마지막 계단의 점수는 더해주고, 두번째 칸 전(-2)의 계단에서 바로 마지막 계단을 밟든지, 세번째 칸 전(-3)의 계단에서 마지막 계단의 한 칸 전(-1)의 계단을 밟고 마지막 계단을 밟으면 된다. 이렇게 밟으면 계속해서 계단의 텀이 지속해서 2칸씩은 ..
-
[java] 백준 알고리즘 1463번 1로 만들기 풀이 소스알고리즘/백준 알고리즘 2018. 4. 23. 19:24
다이나믹 프로그래밍 첫 문제. **아래 풀이소스 12345678910111213141516171819202122232425262728public class Baekjoon1463 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int X = sc.nextInt(); int[] min = new int[1000001]; // 10의 6승이 최대값이기 때문에 min[1] = 0; // 계산하기 쉬우려고 배열은 0번부터 시작하지만 인위적으로 1부터 시작하는 것처럼 만듦. for(int i=2; i
-
[java] 백준 알고리즘 2839번 설탕 배달 풀이 소스알고리즘/백준 알고리즘 2018. 4. 3. 11:08
사칙연산 종류 문제다. 고민하다가 5를 나눠보고 그 나머지 값들로 답을 찾으면 되겠다 싶었다. n을 5로 나눴을 때, 나머지가 1일 경우에는 몫에서 -1을 해주면 5+1을 만들어줄 수 있다. 즉, 6이 되기 때문에 3kg 봉지 2개에 담으면 된다. 나머지가 2일 경우에는 몫에서 -2를 해주면 10+2가 된다. 즉, 12가 되기 때문에 3kg 봉지 4개에 담을 수 있다. (단, n이 7일 경우에는 성립 안됨) 나머지가 3일 경우에는 그냥 3kg 봉지 1개 더 담아주면 된다. 나머지가 4일 경우에는 몫에서 -1을 해주면 5+4가 된다. 즉, 9가 되기 때문에 3kg 봉지 3개에 담을 수 있다.(단, n이 4일 경우에는 성립 안됨) 나머지가 0일 경우에는 5kg 봉지에 다 담아주면 된다. 그럼 4와 7 이외에..
-
[java] 백준 알고리즘 1934번 최소공배수 풀이 소스알고리즘/백준 알고리즘 2018. 4. 3. 11:03
난 문과에 비전공 출신이므로 수학을 싫어하진 않지만, 복잡한 공식을 잘 모르는 편이다. 최소공배수를 구하는 방법도 아래와 같은 방법 밖에 생각나지 않았다. 유클리드 호제법이라는 공식을 이용해 훨씬 빠른 코드를 만들어내시는 분들도 계셨지만, 내가 아는 지식으로 해답을 찾기 위해 고민해서 해결했다. 위에 올려둔 그림을 그대로 소스로 옮겨 놓으려고 애썼다. '컴퓨터가 인간처럼 대충 이 수가 들어가면 빠르겠다'같은 경우를 만들어주기 힘드니 숫자가 차례대로 올라가면서 나눠주는 방식으로 만들었다. 아래 풀이소스 * 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 public cl..
-
[java] 백준 알고리즘 1654번 랜선 자르기 풀이 소스(이분탐색)알고리즘/백준 알고리즘 2018. 4. 2. 20:57
이 문제도 역시나 생각없이 int로 선언하면 수도 없이 런타임에러를 맛 볼 수 있다. 생각해보면 long이 되는 변수가 많다. 그리고 문제를 제대로 읽지 않아서 에러를 계속 못 찾았는데, 최소값의 초기값을 0으로 선언한게 문제였다. 문제에서 랜선 길이는 자연수라고 했다. 그 말은 0이 아니라 1이 되어야 한다. 소스는 아래에~(설명은 주석 참고) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748public class Baekjoon1654 { public static void main(String[] args) throws IOException { BufferedReader br = new Buff..