본문 바로가기

반응형

Algorithm

[Algorithm/Java][백준] 2467번 용액 [BOJ] 2467번 용액 https://www.acmicpc.net/problem/2467 문제 접근 용액의 값들이 정렬이 되어있어서 left와 right를 이용해서 이분 탐색 방식으로 접근했다. 절대값을 이용해서 절대값이 낮은 경우를 저장해놓고, sum이 0일 때 break하고, sum이 0보다 작을 때는 left 인덱스를 +1 해주고, sum이 0보다 크면 right 인덱스를 -1해서 0에 가까운 값을 찾았다. Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BOJ2467 { public s.. 더보기
[Algorithm/Java][백준] 12852번 1로 만들기 2 [BOJ] 12852번 1로 만들기 2 https://www.acmicpc.net/problem/12852 접근 방법 처음에는 dfs 방법으로 재귀 함수를 이용해서 접근을 했는데 시간 초과가 나서 dp 방식으로 접근 방법을 바꾸었다. dp[i]를 우선 dp[i-1] +1로 하고, 2로 나누어질 때와, 3으로 나누어질 때 dp[i/2] + 1과 dp[i/3] + 1을 비교해서 가장 작은 값을 dp[i]로 결정하였다. i는 2부터 n까지 반복해서 dp[n]일 때 최솟값을 구하였고 만드는 절차를 출력하기 위해서 위에 했던 방식을 거꾸로 해서 출력해주었다. Code import java.util.Scanner; public class BOJ12852 { public static void main(String[].. 더보기
[Algorithm/Java][프로그래머스] 단체사진 찍기 [프로그래머스] 단체사진 찍기 https://programmers.co.kr/learn/courses/30/lessons/1835 접근 방법 처음에 어떻게 접근하는지 모르겠어서 카카오 기술 블로그에 들어가서 해설을 봤는데 모든 경우를 다 세워보고 그 중에 조건을 만족하는지를 검사하는 방법이였다. dfs를 이용해서 모든 경우의 줄을 세워보고 check 함수를 이용해서 조건을 만족하는지 검사해서 경우의 수를 셌다. Code import java.util.HashMap; class Solution { public int answer = 0; public boolean[] visited = new boolean[8]; String[] friends = {"A", "C", "F", "J", "M", "N", "R.. 더보기
[Algortihm/Java][프로그래머스] 오픈채팅방 [프로그래머스] 오픈채팅방 https://programmers.co.kr/learn/courses/30/lessons/42888 문제 접근 HashMap을 이용해서 유저아이디와 닉네임을 저장하고 list에 유저 아이디와 Enter or Leave를 저장한 후에 메세지를 출력할 때 유저 아이디와 닉네임을 매칭해서 메세지를 생성하였다. Code import java.util.HashMap; import java.util.ArrayList; class Solution { public String[] solution(String[] records) { String[] answer; HashMap users = new HashMap(); ArrayList messages = new ArrayList(); for(.. 더보기
[Algorithm/Java][백준] 2263 트리의 순회 [BOJ] 2263 트리의 순회 https://www.acmicpc.net/problem/2263 문제 접근 인오더와 포스트오더 순회가 주어졌을 때 프리오더 순회를 구하는 문제이다. 포스트오더에서는 트리와 서브트리의 루트를 구할 수 있고, 인오더에서는 포스트오더에서 구한 루트를 이용하여 왼쪽 서브트리와 오른쪽 서브트리를 구할 수 있다. 이를 이용해서 프리오더 순회를 구하였다. Code import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BOJ2263 { static int n,idx = 0; static int[] inorder, preorder, postorder; .. 더보기
[Algorithm/Java][프로그래머스] 문자열 압축 [프로그래머스] 문자열 압축 https://programmers.co.kr/learn/courses/30/lessons/60057 문제 접근 긴 문자열의 길이를 줄이기위해서 문자열을 n개 단위로 잘라서 같은 문자열 str이 n번 반복되면 nstr로 표현하여 압축하는 문제이다. compressString 함수를 만들어서 압축하려는 문자열 s와 자르려는 문자열의 길이 len을 받아서 s를 len단위로 잘라 압축한 문자열의 길이를 반환하도록 하였다. Code class Solution { public int solution(String s) { int answer = s.length(); for(int i = 1; is.length()){ cur = s.substring(i,s.length()); } else.. 더보기
[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; .. 더보기