알고리즘/백준 알고리즘
-
[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..
-
[java] 백준 알고리즘 1546번 평균 풀이 소스알고리즘/백준 알고리즘 2018. 3. 30. 18:37
우리가 아는 평균을 구하는 것이지만, 문제에서 단순히 점수 총합/과목의 갯수가 아니라, 각각 받은 점수를 새로 계산해서 재정의하고 있다. 그리고 그 결과값의 평균을 구하는 문제이다. 아래는 소스. 123456789101112131415161718192021222324public class Baekjoon1546 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); // 과목의 개수 String[] preGradeArray = br.readLine..
-
[java] 백준 알고리즘 18071번 X보다 작은 수 풀이 소스(if문)알고리즘/백준 알고리즘 2018. 3. 30. 18:17
if문을 활용하는 쉬운 알고리즘 문제이다. 소스는 아래. 123456789101112131415161718192021222324252627public class Baekjoon10871 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] inputArray = br.readLine().split(" "); int n = Integer.parseInt(inputArray[0]); // 주어진 배열의 크기인 N int x = Integer.parseInt(inputArray[1]); // 주어진 정수 X..
-
[java] 백준 알고리즘 2805번 나무자르기 풀이 소스(이분 탐색)알고리즘/백준 알고리즘 2018. 3. 30. 17:51
여기서 minHeight와 maxHeight에 중간값이 들어갈 때 각각 +1, -1을 해주지 않으면 시간초과가 발생했다. 그리고 나무길이들의 총 합이 int 범위를 넘어갈 수도 있으므로 long을 선언해주었다.(이런 부분들 때문에 알고리즘을 풀 때마다 런타임에러를 수도 없이 보게 된다.) 설명은 주석으로 했다~ 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657public class Baekjoon2805 { public static void main(String[] args) throws IOException { BufferedReader br = new Buffer..
-
[java] 백준 알고리즘 10815번 숫자카드 풀이 소스(이분 탐색)알고리즘/백준 알고리즘 2018. 3. 30. 17:49
이분탐색의 문제이다. 문제푸는 원리는 백준 1920번과 동일해서 다른 설명을 할 필요는 없을 것 같다. (백준 1920 풀이 참고) 단지 백준 1920번 문제와 다른 점이라면 찾는 숫자가 음수가 존재하는 것이지만, 결국 특정한 수를 찾는다는 것에는 다름이 없다. 소스는 아래와 같다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960public class Baekjoon10815 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(..