본문 바로가기

반응형

Algorithm

[Algorithm/Java][프로그래머스] 타겟 넘버 [프로그래머스] 타겟 넘버 https://programmers.co.kr/learn/courses/30/lessons/43165 문제 접근 dfs를 이용해서 numbers[0] 부터 numbers[numbers.length-1]까지 모든 숫제에대해서 +,-한 경우를 탐색해서 target이 되는 경우의 수를 구했다. Code class Solution { int answer; int[] nums; public int solution(int[] numbers, int target) { answer = 0; nums = numbers; dfs(0, 0, target); return answer; } public void dfs(int num, int cnt, int target){ if(cnt == nums... 더보기
[Algorithm/Java][프로그래머스] 다음 큰 숫자 [프로그래머스] 다음 큰 숫자 https://programmers.co.kr/learn/courses/30/lessons/12911 문제 접근 처음에 접근할 때는 Integer.toBinaryString() 함수를 이용해서 string형태의 2진수로 변환한 후 1의 개수를 세고, n+1부터 1의 개수가 같을 때까지 while문을 돌렸다. 다 풀고 다른 사람의 풀이를 보니까 Integer.countBit()를 이용하면 1의 개수를 반환해주는 함수가 있어서 더 쉽게 풀었다. Code Integer.toBinaryString()이용한 풀이 class Solution { public int solution(int n) { String binaryNum = Integer.toBinaryString(n); int .. 더보기
[Algorithm/Java][백준] 1167 트리의 지름 [BOJ] 1167 트리의 지름 https://www.acmicpc.net/problem/1167 문제 접근 이 문제는 아래 문제와 거의 똑같은 문제이다. 트리를 입력해주는 방식만 다르고 알고리즘은 똑같은 문제여서 쉽게 풀 수 있었다. 1967 트리의 지름 Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class BOJ1167 { static class Node{ int to; int dist; public Node(int to, int dist) { th.. 더보기
[Algorithm/Java][백준] 1967 트리의 지름 [BOJ] 1967 트리의 지름 https://www.acmicpc.net/problem/1967 문제 접근 dfs를 이용해서 접근하였다. 1번 노드에서 dfs를 시작해서 가장 멀리 있는 노드의 인덱스를 저장했다가, 해당 인덱스부터 다시 dfs를 시작해서 그중에 가장 멀리 있는 노드와의 거리를 구하였다. Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.StringTokenizer; public class BOJ1967 { static class Node { int end; int value; Node.. 더보기
[Algorithm/Java][백준] 11729 하노이 탑 이동 순서 [BOJ] 11729 하노이탑 이동 순서 https://www.acmicpc.net/problem/11729 문제 접근 일단 하노이 탑을 1에서 2를 거쳐서(이용해서?) 3으로 옮겨야 한다. 나의 직관적인? 접근 방식은 n이 3개일 때, 1.첫 함수 호출로 1 -> 3으로 가장 작은 것을 옮긴다. 2.그리고 다시 함수 호출로 1 -> 2로 두번째로 작은 것을 옮긴다. (이러면 가장 큰것이 1에 있다!) 3.이때는 함수 호출 하지 않고 1 -> 3으로 옮긴다. (이 때 3에 있는 가장 큰 것은 이제 없다고 생각해도 된다!) 4.이제 이 문제는 2개의 원반을 가진 하노이탑을 2 -> 3으로 옮기는 문제로 작아진다. => 함수 호출로 2->3으로 다시 작은 것을 옮긴다. 이 접근을 재귀적으로 잘 정리하면 이렇.. 더보기
[Algorithm/Java][프로그래머스] 소수 찾기 [프로그래머스] 소수 찾기 https://programmers.co.kr/learn/courses/30/lessons/42839 문제 접근 String으로 들어오는 숫자들로 가능한 모든 숫자 조합을 만들고 이 숫자중세서 소수를 찾는 문제이다. 소수를 찾기위해서 Math.sqrt(n)을 이용해서 반복문 횟수를 줄이고, dfs를 이용해서 모든 경우의 수를 탐색하였다. 그리고 같은 숫자가 두개 이상있으면 중복되는 숫자들이 나타나게 되어서 HashSet을 이용해서 중복 경우의 수를 제거하였다. Code import java.util.HashSet; class Solution { char[] nums; boolean[] visited; HashSet hs = new HashSet(); public int solu.. 더보기
[Algorithm/Java][백준] 9020 골드바흐의 추측 [BOJ] 9020 골드바흐의 추측 https://www.acmicpc.net/problem/9020 문제 접근 짝수 n을 가장 차이가 작은 두 소수의 합으로 나타내는 문제이다. 처음에는 n까지 소수를 구하고 그 수중에서 합을 수할려고 했는데, 코드가 너무 복잡해지고 내가 썼는데도 내가 못알아보는 지경이였다... 그리고 결국은 막혔다 그래서 에라토스테네스의 체를 이용해서 10000까지의 소수를 모두 구했다. 그 다음은 가장 차이가 작은 두 소수의 합을 구하기 위해서 num1은 n/2부터 1씩 감소하고 num2는 n- num1으로 해서 num1,num2 모두 소수인 첫번째 경우가 답이였다. 요약하자면 아래와 같다. 1.에라토스네스의 체로 10000까지 소수를 모두 구한다. 2.1의 결과를 바탕으로 n/2부.. 더보기
[Algorithm/Java][프로그래머스] 땅따먹기 [프로그래머스] 땅따먹기 https://programmers.co.kr/learn/courses/30/lessons/12913 문제 접근 처음에 접근할 때 dfs로 풀어야 될까? dp로 풀어야 될까? 고민이 되었는데 dfs로 코드 짜려고 하니까 그냥 바로 막혀서 dp로 생각해봤다. 일단 접근 방식은 현재 내가 밟은 땅과 같은 열을 제외하고 바로 전 행에서 최고점수를 가진 곳을 밟아야 최고 점수를 유지하면서 땅을 밟아갈수 있다. 그래서 dp배열에 그 위치에 해당하는 최고점수를 저장하고, 마지막 행중에서 최고 점수가 최종 답이 된다. Code class Solution { int solution(int[][] land) { int answer = 0; int[][] dp = new int[land.lengt.. 더보기