본문 바로가기

반응형

java

[Algorithm/Java][백준] 1918 후위 표기식 [BOJ] 1918 후위 표기식 https://www.acmicpc.net/problem/1918 문제 접근 입력받은 String을 char 배열로 변환한후 하나씩 접근해서 연산자는 Stack을 이용해 처리하고 StringBuilder의 append를 이용해서 이어 붙여주었다. 중위표기식에서 후위표기식으로 변환할 때, Stack을 이용하는데 현재 연산자보다 stack에 top에 있는 연산자의 우선순위가 높다면 postfix에 추가해준다. '*'와 '/'를 2, '+' 와 '-'를 1, '('을 0으로 설정해서 위에 방식을 가능하도록 했다. 입력을 받아서 4가지 경우로 나누어서 처리를 하였다. 1.A~Z 사이에 피연산자일 경우 postfix에 추가한다. 2.'('인 경우 Stack에 push한다. 3.').. 더보기
[Algorithm/Java][백준] 1865 웜홀 [BOJ] 1865 웜홀 https://www.acmicpc.net/problem/1865 문제 접근 벨만 포드 알고리즘은 다음과 같다. 1.시작 노드를 설정한다. 2.최단 경로 테이블(배열)을 초기화한다. 3.(정점의 개수-1)번동안 모든 간선을 탐색하여 최단 경로 테이블을 갱신한다. 여기서 음의 순환이 발생하는지 알고싶다면 한번 더 모든 간선에 대해서 탐색을 하고 이때, 최단 경로 테이블이 갱신이 된다면 음의 순환이 발생한 것이다. 이 문제는 모든 노드를 시작 노드를 설정할 필요가 없이 음의 순환이 있는지 없는지만 체크하면 되기때문에 1번 노드에 대해서만 벨만 포드 알고리즘을 수행하고 이때, 음의 순환이 발생하는지 아닌지를 검사하였다. Code import java.io.BufferedReader; .. 더보기
[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.. 더보기