본문 바로가기

자바127

[백준 3190] 뱀 / 자바 / 구현 문제         레벨: G5알고리즘: 구현 + 큐 풀이시간: 1:30힌트 참조 유무: 무https://www.acmicpc.net/problem/31901 번째 시도: 성공   [예제 그림]초에 해당하는 뱀의 머리 위치를 그림으로 그려봤다.x는 사과의 위치다.[알고리즘 설명]이 문제는 구현 문제이다.while 문 안에 있는 조건들을 어떻게 잘 구현했는지, 자료구조를 적절히 잘 사용했는지가 관건이다. 설명은 주석을 참조바란다. 뱀의 몸통을 담기 위해 snake큐명령을 담기 위한 moves큐  문제를 다 풀고 나서 한가지 생각해본 점은 명령을 담기 위한 자료구조를 큐 말고 HashMap을 썼다면 ntdir,ntsec를 안썼어도 됐다는 거다. 변수가 줄어들수록 코드의 유지보수가 쉽다고 생각하기 때문에 다음.. 2024. 7. 3.
[백준 13460] 구슬 탈출2 / 자바 / BFS 문제         레벨: G1알고리즘: BFS풀이시간: 1시간힌트 참조 유무: 유https://www.acmicpc.net/problem/134601 번째 시도: 성공   [알고리즘 설명]처음엔 변수를 여러개 만들어 정답을 관리하려고 했다. 예를 들면, blue가 움직인 횟수, red가 움직인 횟수, blue의 움직인 경로, red의 움직인 경로 등등.  왜 이렇게 하려고 했냐면 BFS함수를 재사용하기 위해서이다. BFS(A), BFS(B) 이와 같이 말이다. 각각 함수를 돌려 리턴받은 값으로 비교하려고 했으나 복잡해져 다른 방법을 사용했다.그냥 지엽적으로 bfs 한코드에 다 넣었다. 신경써야 하는 변수들도 줄어드니 의식의 흐름대로 코드를 작성할 수 있어 수월했다. 자세한 설명은 주석으로 하겠다.imp.. 2024. 7. 3.
[백준 2263] 트리의 순회 / 자바 /분할정복 문제         레벨:  G1알고리즘: 분할정복 풀이시간: 11:23힌트 참조 유무: https://www.acmicpc.net/problem/2263 1 번째 시도   이 문제는 트리가 어떻게 생겼는지 주지 않았다. 그래서 포인트는 중위식에서 무엇을 알 수 있고 후위식에서 무엇을 얻을지 캐치하고 트리를 그려보는 것이다.트리가 이렇게 있다고 한다면,중위 : 4 2 5     1   6 3 7  후위: 4 5 2    6 7 3   1 이렇게 순회할 것이다.   이로서 우린 후위식에서 루트가 어떤 건지 알 수 있고 중위 식에서 루트를 기준으로 왼쪽 노드와 오른쪽 노드가 무엇인지 알 수 있다. +) 위 트리의 전위 : 1 2 4 5 3 6 7import java.io.BufferedReader;impor.. 2024. 7. 2.
[프로그래머스 LV3] 스킬 체크 / 자바 / 다익스트라 알고리즘 문제         레벨: Lv3알고리즘: 다익스트라 알고리즘 풀이시간: 1시간힌트 참조 유무: 유1 번째 시도   [알고리즘 설명]다익스트라 알고리즘으로 S를 기준으로, A를 기준으로, B를 기준으로 각각의 노드의 최소거리르 구해야 한다.그리하여출발점 -> A,B가 찢어지는 노드 -> 찢어지고 A가 가는 거리, 찢어지고 B가 가는 거리출발점 -> A가 가는 거리 + 출발점 -> B가 가는 거리 두 가지 경우를 다 고려할 수 있다.  import java.util.*;class Solution { public int solution(int n, int s, int a, int b, int[][] fares) { List> graph = new ArrayList(); for .. 2024. 7. 2.
[프로그래머스 LV3] 스킬 체크 테스트 / 자바 / DP 문제         레벨: 프로그래머스 -> 스킬체크 -> 중급자 알고리즘: DP풀이시간: 1시간힌트 참조 유무: 유1 번째 시도: 실패   [알고리즘 설명]규칙을 찾았다. 단계를 거듭하여 만들어낼 때 a x b x c가 가장 작은 배열 두개를 선택해야 한다는 것이다.그래서 아래와 같이 로직을 작성하였다. 그러나 예외를 빠드렸다. 기준을 잘못 잡은 것이었다.배열중 앞에 있는 배열을 [a,b]로 잡고 뒤에 오는 배열을 [b,c]로 잡았다. 문제는 뒤에오는 배열이 [b,c]가 앞에 있는 경우를 생각 안 한 것이었다. 예를 들어 [1,2] [3,1] 이렇게 되어있는 경우는 배열이 곱을 못하지만,  거꾸로 되어있을 때 [3,1] [1,2]는 사실 배열 곱이 가능한 경우의 수인 것이다.  import java.u.. 2024. 7. 2.
[백준 2630] 색종이 만들기/ 자바 문제         레벨: S2알고리즘: 구현 + 분할정복풀이시간: 40분힌트 참조 유무: 무https://www.acmicpc.net/problem/2630 1 번째 시도   [알고리즘 설명]이 문제는 분할정복 + 구현의 대표적인 문제이다.직관적으로 나타나 있듯 4개로 나누어 탐색하여야 하고답을 체킹하는 방식 + 4개로 나누는 방식을 잘 구현해야 한다. 필자는 처음 구현할 때 다 나눈 후 답을 체킹하는 방식으로  구현하려고 했다.그러나 구현에 어려움을 겪어 , 답을 체킹하고 아니면 분할하는 방식으로 구현하였다. 나처럼 구현에 어려움을 겪는 분들은 이런 식으로 하면 좋을 것 같다.import java.io.BufferedReader;import java.io.InputStreamReader;import .. 2024. 7. 2.
[백준 12904] A와 B / 자바 / 그리드 문제         레벨: G4알고리즘: 그리드 풀이시간: 30분힌트 참조 유무: 무https://www.acmicpc.net/problem/129041 번째 시도   [로직 설명]T에 룰을 거꾸로 적용해서 하나씩 빼주고 마지막에 비교한다.[배운점]String 함수 되짚기import org.w3c.dom.Node;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Arrays;public class Main { public static void main(String[] args) throws IOException .. 2024. 6. 23.
[백준 1744] 수 묶기 / 자바 / 그리디 문제         레벨: G4알고리즘: 그리디 풀이시간: 1시간힌트 참조 유무: 유https://www.acmicpc.net/problem/17441 번째 시도   [아이디어]정렬된 마이너스 배열정렬된 플러스 배열마이너스 x 마이너스 후 정답에 더하기플러스 x 플러스 후 정답에 더하기+ 예외생각) 1x1보다는 +1+1이 더 높으니 현재 숫자가 1일때는 다음 숫자가 1인지 검사하기import java.io.*;import java.util.*;public class Main { static int N; //양수 관련 값 저장, 내림차순 정렬 static PriorityQueue plus = new PriorityQueue(Comparator.reverseOrder()); //음수 관.. 2024. 6. 22.
[백준 17928] 오큰수 / 자바 / 스택 문제         레벨: G4알고리즘: 스택 풀이시간: 3:41힌트 참조 유무:https://www.acmicpc.net/problem/172981 번째 시도   이 문제는 이중 for문으로 하면 쉽게 풀 수 있지만 1,000,000 x  1,000,000이니 반드시 시간초과가 난다. 스택이 비어있지 않으면서 현재 원소가 스택의 맨 위 원소가 가리키는 원소보다 큰 경우  해당 조건을 만족할 때 까지 stack의 원소를 pop하면서  해당 인덱스의 값을 현재 원소로 바꿔준다.  배열을 다 순회했다면  스택의 모든 원소를 pop하면서 해당 인덱스의 value를   -1로 초기화한다.  import java.io.BufferedReader;import java.io.InputStreamReader;impor.. 2024. 6. 21.