Algorithm
[백준] 15500 이상한 하노이 탑 - Java
[백준] 15500 이상한 하노이 탑 - Java
2022.05.01스택을 사용해서 풀 수 있는 문제이다. 기존 하노이 탑에서 조건이 많이 수정돼서 재귀를 사용할 필요가 없다. 1 2 3 세 개의 장대가 주어지고, 3번 장대에 탑을 쌓아주면 되는 상황이다. 1. 1번 장대에 걸린 요소들을 검사해 3번 장대에 들어갈 순서인지 확인하고, 맞으면 3번 아니면 2번으로 옮긴다. 2. 2번 장대에 대해서도 위와 같은 작업을 수행한다. 3. 3번 장대에 탑이 완성되면 마무리한다. import java.util.*; import java.io.*; public class Main { static StringBuilder sb; public static void main(String[] args) throws IOException{ BufferedReader br = new Buffe..
[백준] 11729 하노이 탑 이동 순서 - Java
[백준] 11729 하노이 탑 이동 순서 - Java
2022.05.01재귀를 사용해서 풀 수 있는 문제이다. 재귀함수.. 공부하고 있긴 한데 생각하고 구현하기가 참 어렵다.. 이렇게 작동하겠지? 라고 작성하는 정도는 어떻게 할 수 있을 것 같은데, 코드의 작동을 하나하나 따라가서 분석하는게 쉽지 않다.. 재귀는 dfs bfs 백트래킹 등등 여러 알고리즘에 활용되고, 중요한 테크닉이다. 꾸준히 관련된 문제 풀어보고 공부해서 익숙해져야겠다. import java.util.*; import java.io.*; public class Main { static StringBuilder sb; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new Input..
[백준] 17952 과제는 끝나지 않아! - Java
[백준] 17952 과제는 끝나지 않아! - Java
2022.05.01스택 자료구조를 사용해 하라는 대로 구현하면 풀 수 있는 문제이다. import java.util.*; import java.io.*; public class Main { static long arr_koong[] = new long[68]; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); Stack stack = new Stack(); StringTokenizer st; int ans = 0; for (int i = 0; i < N; i++)..
[백준] 9625 BABBA - Java
[백준] 9625 BABBA - Java
2022.05.01dp를 이용해 풀 수 있는 간단한 문제이다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int K = Integer.parseInt(br.readLine()); BABBA temp = new BABBA(1, 0); for(int i = 0; i
[백준] 2257 화학식량 - Java
[백준] 2257 화학식량 - Java
2022.04.25스택을 사용해 층을 나눠 계산했다. 1. H C O 이 입력되면 해당하는 숫자를 계산해 넣어준다. 2. 여는 괄호가 입력되면 0을 push해 층을 하나 늘린다. 3. 닫는 괄호가 입력되면 여는 괄호가 나온 후 ~ 닫는 괄호가 나온 시점까지의 결과를 집계해 계산한다. 4. 숫자가 나오면 바로 전 항목에 곱해준 뒤 넣어준다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(..
[백준] 2304 창고 다각형 - Java
[백준] 2304 창고 다각형 - Java
2022.04.25두 번 계산해서 풀었다. 정방향으로 계산하면서 가장 높은 높이에 대한 기둥을 얻고, 가장 높은 기둥 전까지의 넓이를 갱신한다. 그 후 역방향으로 계산하면서 가장 높은 기둥 뒷부분의 넓이를 갱신한다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ArrayList list = new ArrayList(); int N = Integer.parseInt(br.readLine()); StringTokenizer st; ..
[백준] 16165 걸그룹 마스터 준석이 - Java
[백준] 16165 걸그룹 마스터 준석이 - Java
2022.04.24String, ArrayList 타입의 해시맵으로 정보를 저장 후, 필요에 따라 꺼낸다. 멤버를 주고 팀 이름을 출력해야 하는 경우는 해시맵에서 키를 꺼내 forEach문으로 돌려준 후 탐색을 진행했다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); HashMap hm = new HashMap(); StringTokenizer st = new..
[백준] 9322 철벽 보안 알고리즘 - Java
[백준] 9322 철벽 보안 알고리즘 - Java
2022.04.24암호문을 평문으로 복원할 때는, 2키를 1키를 복원하는 규칙과 동일하다. 해시 맵을 사용해 2키를 1키로 복원하는 규칙을 저장해두고, 암호문에 대해서 적용시켜 문제를 해결할 수 있다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int T = Integer.parseInt(br.readLine()); for(int i=0; i
[백준] 3077 임진왜란 - Java
[백준] 3077 임진왜란 - Java
2022.04.24dfs로도 풀 수 있을 것 같은데.. 다음에 복습할 때는 dfs느낌으로도 풀어봐야겠다. 이 문제도 어떻게 보면 별찍기를 응용한 문제라고 볼 수 있다. 애초에 완전탐색이 별찍기와 살짝 유사하니까..? import java.util.*; import java.io.*; public class Main { static int N; static String[] arr; static boolean[] chk; static String list[]; static int right = 0; static HashMap hm = new HashMap(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedR..
[백준] 1972 놀라운 문자열 - Java
[백준] 1972 놀라운 문자열 - Java
2022.04.24완전탐색으로 문자열을 탐색하는 문제이다. 해시셋을 이용해 중복 여부를 확인해서 중복일 시 not surprising을 출력하도록 작성했다. import java.util.*; import java.io.*; public class Main { static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { String str = br.readLine(); if (str.equals("*")) { break; } surpri..
[백준] 12757 전설의 JBNU - Java
[백준] 12757 전설의 JBNU - Java
2022.04.23트리 맵과 ceiling , floor 메서드를 사용해서 푸는 문제인데.. 답은 맞았지만 잘 푼 것 같지는 않다. floorKey와 ceilingKey의 유무를 확인할 때 최댓값과 최솟값으로 미리 넣어놨으면 좀 더 효율적으로 풀 수 있었을 것 같은데.. 다음에 고쳐봐야겠다. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); TreeMap tm =..
[백준] 21944 문제 추천 시스템 Version 2 - Java
[백준] 21944 문제 추천 시스템 Version 2 - Java
2022.04.23지난번에 풀었던 버전1 문제와 비슷하지만.. 추가된 조건들이 많아 구현하는데 어려움이 있었다.. 알고리즘에 대한 분류는 전체 알고리즘의 수가 100개임을 고려해 ArrayList를 이용해 각각 추가해서 처리해줬고, 알고리즘이 추가됨에 따라 해시맵으로는 문제 번호를 통해 알고리즘 분류와 난이도를 얻을 수 있도록 설계했다. 풀다 보니 코드가 길어져서.. 중간에 실수가 있었으면 정말 슬펐을 것 같다.. import java.util.*; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamRe..