백준 14725 개미굴 풀이 (feat. JAVA)
·
Study/Algorithm
전에 나에게 쓰린 맛을 보여줬던 Trie...그 때 당시 사전식 입출력 문제였고, Trie를 몰라도 TreeMap으로 풀 순 있었다다만 테케 최적화를 실패해 히든 테케에서 시험에서 떨어졌었던 ㅠ 그래서 Trie 보자마자 득달같이 달려들어서 도전했는데 어렵다...이걸 그냥 '아 이론이 이런거구나' 말고 진짜 내가 구현하려니까 뭐 걍 손발 다 꼬임...정리해두고 한번에 소화할 수 있는 문제는 아닌 것 같으니 꾸준히 봐보자 ㅠpackage Record_2025;/*[백준]14725, 개미굴[문제파악]- 우리의 천재 공학자 윤수는 이 개미들이 왜 행복한지 궁금해졌다.- 행복의 비결이 개미가 사는 개미굴에 있다고 생각한 윤수는 개미굴의 구조를 알아보기 위해 로봇 개미를 만들었다.- 로봇 개미는 센서가 있어 개미굴..
백준 15681 트리와 쿼리 풀이 (feat. JAVA)
·
Study/Algorithm
트리구조 배우기에 좋았던 문제와 못 풀겠어!!는 아닌데, 트리 구조에 미숙하다보니 여러 힌트를 참고할 수 밖에 없었다현재는 하나의 노드를 기준으로 DFS (재귀)를 활용하여 서브 트리의 규모를 계속해서 새롭게 count 하고 있다 (메모리 초과)그렇기 때문에 DP를 적용하면 더욱 최적화할 수 있다 package Record_2025;/*[백준]15681, 트리와 쿼리[문제파악]- 간선에 가중치와 방향성이 없는 임의의 루트 있는 트리가 주어졌을 때, 아래의 쿼리에 답해보도록 하자.- 정점 U를 루트로 하는 서브트리에 속한 정점의 수를 출력한다.- 만약 이 문제를 해결하는 데에 어려움이 있다면, 하단의 힌트에 첨부한 문서를 참고하자.[입력]- 트리의 정점의 수 N과 루트의 번호 R, 쿼리의 수 Q가 주어진다..
백준 2108 통계학 풀이 (feat. JAVA)
·
Study/Algorithm
기초가 정말 중요했던 문제안다고 생각했던 것들도 기억 안나고 헷갈리는 것들 투성이었다 ㅠ자료 구조 공부도 더 해야할듯하다 이번에 다시금 깨우친 것들을 정리해보자면(1) 기본적으로 Map을 For문 돌리는 방법(2) TreeSet은 무적이 아니라는 것 (정렬은 해주지만 삽입과 탐색시 배열보다 더 오래걸린다는 단점)(3) Collections.max 라는 함수가 있다는 것...(4) Map.Entry에서 Entry가 정확히 무엇인지    - Map.Entry에서 Entry는 항목 또는 항목의 쌍을 의미    - 즉, Map.Entry는 Map의 하나의 key-value 쌍을 나타내는 객체이다빠르게 푼 사람들은 그냥 문제조건에 따라 배열을 -4000 ~ 4000으로 해결했더라...배워도 배워도 끝이 없군..!..
백준 9935 문자열 폭발 풀이 (feat. JAVA)
·
Study/Algorithm
반복문을 어떻게 써야만 효율적으로 처리할 수 있을까 고민했던 문제나중에 알고보니 stack을 써서 뒤에서부터 처리하면 무려 세가지 이점이나 챙겨갈 수 있었다굉장히 쉽게누락되지 않고한번의 반복문으로 다른 풀이법들 공부해보니까 그냥 내가 초기에 생각하던대로 반복문으로 진행하는 것이 꽤 많더라다만 내가 생각했던 것과는 다르게 폭탄의 끝 문자열을 비교하면서 이동하다가 일치하는 순간에 역순으로 탐지해가는 식 예를들어문자열 `aaaaC4aa`가 있고 폭발 문자열이 `C4`이면, 비교 문자열은 항상 `4`이다문자열은 순차적으로 탐색하다가, 문자열의 `4`와 폭발 문자열의 `4`가 일치하는 순간, 폭발 문자열을 역순으로 탐지해가며 문자열의 `4`이전 문자열과 비교하는 식이렇게하면 여러 개여도 확실하고 정확하게 삭제할 ..
백준 5582 공통 부분 문자열 풀이 (feat. JAVA)
·
Study/Algorithm
알고보니 DP 문제 였다DP는 으레 그렇듯, 구현하는 방법을 구상하기까지가 너무 어려운 것 같다근데 나중에 코드를 보면 정말 허탈할만큼 쉬움... (이해 못할정도는 아니었던..)이번 문제 역시 그런 식이었다package UnRecord;/*[백준]5582, 공통 부분 문자열[문제파악]- 두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오.- 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다.- 예를 들어, 문자열 ABRACADABRA의 부분 문자열은 ABRA, RAC, D, ACADABRA, ABRACADABRA, 빈 문자열 등이다.- 하지만, ABRC, RAA, BA, K는 부분 문자열이 아니다.- 두 문자열 ABRAC..
백준 2458 키 순서 풀이 (feat. JAVA)
·
Study/Algorithm
DFS를 양방향으로 해야하나? 라고 생각했던 문제근데 그냥 플루이드 워셜을 쓰면 된다플루이드 워셜이 전혀 몰랐던 경로 탐색 응애인 나는... 신세계를 발견해버리고 만다이런게 있다고...? ㅋㅋㅋ 진짜 사람들은 천재인가보다;;원리는 이해했고, 이론은 (비교적) 쉬운 편이라고 생각하는데 내가 또 구현해보라고 하면 그건 또 다른 얘기라당분간은 최단 경로, 플루이드 워셜, 다익스트라 쪽을 공부해야할 것 같다 package Record;/*[백준]2458, 키 순서[문제파악]- 1번부터 N번까지 번호가 붙여져 있는 학생들에 대하여 두 학생끼리 키를 비교한 결과의 일부가 주어져 있다.- 단, N명의 학생들의 키는 모두 다르다고 가정한다.- 예를 들어, 6명의 학생들에 대하여 6번만 키를 비교하였고, 그 결과가 다음..
백준 1987 알파벳 풀이 (feat. JAVA)
·
Study/Algorithm
1년만에 재도전한 문제당시엔 못 풀었는데 이번에 풀어버렸다.. 넘 뿌듯..더군다나? 포기 않고 코드 리팩토링까지!! 풀고나서 다른 풀이 코드들 살펴봤는데 비트마스킹을 써야만 시간을 대폭 줄일 수 있더라 꾸준히 하니까 성장을 하긴 했구나 뿌듯하다이번 알고리즘 문제에서 배운 것은 아래 코드 주석의 [보완점]에 자세히 기술해 두었다 package UnRecord;/*[백준]1987, 알파벳[문제파악]- 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다.- 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다.- 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳..
백준 19236 청소년 상어 풀이 (feat. JAVA)
·
Study/Algorithm
아기 상어 풀고나서 도전해봤는데 얘도 어렵네...유의점은 백트래킹을 써야한다는 것인데 내가 백트래킹이란 것을 너무 어렵게 생각했단 것이다백트래킹은 그저 가치치기하는 것 역시도 백트래킹 중 하나다...(여기서 말하는 가지치기란, 조건에 부합하지 않는 경우의 수는 끝까지 진행하지 않고 중간에 끊는 것을 의미한다) 모든 코드에 대한 설명은 주석으로 진행하였음!package UnRecord;/*[백준]19236, 청소년 상어[문제파악]- 아기 상어가 성장해 청소년 상어가 되었다.- 4×4크기의 공간이 있고, 크기가 1×1인 정사각형 칸으로 나누어져 있다.- 공간의 각 칸은 (x, y)와 같이 표현하며, x는 행의 번호, y는 열의 번호이다.- 한 칸에는 물고기가 한 마리 존재한다.- 각 물고기는 번호와 방향을 ..
백준 16236 아기상어 풀이 (feat. JAVA)
·
Study/Algorithm
개인적으로 너무 어려웠던 문제나중에 다시 풀고자 기록해두고자 포스팅 해둔다모든 코드에 대한 설명은 주석으로 진행하였음! package UnRecord;/*[백준]16236, 아기상어[문제파악]- N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다.- 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다.- 한 칸에는 물고기가 최대 1마리 존재한다.- 아기 상어와 물고기는 모두 크기를 가지고 있고, 이 크기는 자연수이다.- 가장 처음에 아기 상어의 크기는 2이고, 아기 상어는 1초에 상하좌우로 인접한 한 칸씩 이동한다.- 아기 상어는 자신의 크기보다 큰 물고기가 있는 칸은 지나갈 수 없고, 나머지 칸은 모두 지나갈 수 있다.- 아기 상어는 자신의 크기보다 작은 물고기만 먹을 수 있다.- 따라서, ..