![[JAVA] 프림 알고리즘 (+ 크루스칼과는 어떻게 다를까?)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FWuiws%2FbtsOL4TySQ8%2FAAAAAAAAAAAAAAAAAAAAAI-qVDUvKb-R2jPPqD-yFTA-rTuRdQz8W6LhX0gH1dmE%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DBuGbeKAoM0XQNbxK3oJ5qHLeXSc%253D)
이전 포스팅에 이어 이번에는 MST 알고리즘을 구현하는 방식 중 하나인 프림 알고리즘에 대해 알아보려 합니다.우선 MST에 대해 다시 한번 짚고 넘어가겠습니다. 📑 MSTMST를 다시한번 간단하게 설명하면 "최소 비용으로 모든 정점을 연결한 트리 구조"입니다.MST도 트리이기 때문에, 트리 구조 특성 상 사이클이 발생하면 안되는데요.이유는 트리는 정점 간 유일한 경로, 최소 연결성이라는 특성이 있기 때문입니다. 이러한 MST를 구하는 방식 중 하나인 크루스칼 알고리즘에 대해서는 아래 포스팅을 참고해주세요.[JAVA] 크루스칼 알고리즘 (Kruskal Algorythm) [JAVA] 크루스칼 알고리즘 (Kruskal Algorythm)최근 알고리즘 문제 풀이를 다시 시작하며 기억에서 희미해져버린 MST ..
![[JAVA] 크루스칼 알고리즘 (Kruskal Algorythm)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbHRcdn%2FbtsOAY05oxv%2FAAAAAAAAAAAAAAAAAAAAANlt6xc9V1SWHZROQ9IXb-FcM69K2Ia2nPtr42gt4lIq%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DH8FkKeEhkp7vW5rbPhPsnHDtxgw%253D)
최근 알고리즘 문제 풀이를 다시 시작하며 기억에서 희미해져버린 MST 알고리즘에 대해서 정리해볼까 합니다.정리하려는 주된 내용은 아래와 같습니다.❓ MST가 무엇인지, 크루스칼 알고리즘의 구현 및 동작 방식 📑 MST란?MST는 Minimum Spanning Tree의 약자로 최소 신장 트리를 찾기 위한 알고리즘입니다.또한 Spanning Tree(신장 트리)는 간단하게 설명하면 모든 정점을 포함하면서 사이클이 없는 연결 그래프를 의미합니다.더보기왜 사이클이 없어야할까❓ (25.06.21 추가)처음에는 모든 정점이 연결만 되면 된다고 생각했습니다. (이 과정에서 사이클이 생기든 말든지요.)그러나 MST 또한 트리이며, 트리 특성을 생각해보면 사이클이 없어야 합니다.트리에서 한 정점에서 다른 정점으로 가..
![[Java] 부동소수점 오차를 피하자!](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FueYkO%2FbtsMIOK0AL4%2FAAAAAAAAAAAAAAAAAAAAAA78yYGzi6I5GMvmFqZeS0QF-_Emlic3N0ph6wVTVoxK%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DbNKpz%252BqO6Qkgmhhw1a16hEy2H%252BM%253D)
백준에서 시뮬레이션 문제를 풀다가 한참을 디버깅하면서 삽질했던 과정을 기록하고자 합니다.. 결론부터 말씀드리자면, double 자료형의 부동소수점 오차로 인한 문제였습니다.추가로 짝수/홀수 구분을 (2&1)로 해야하는데 (2^1)로 하고서는 "왜맞틀"했던 저를 발견할 수 있었습니다..(반성하고 자바의 정석 다시 펼칠게요) 🔗 문제https://www.acmicpc.net/problem/20057문제는 삼성 기출로 유명한 마법사 상어 시리즈입니다. 📝 풀이간단하게 풀이를 설명하자면 달팽이 회전 로직을 구현 후 각 방향에 따른 '위치 및 비율'을 인덱싱하여 구현했습니다.2차원 격자 문제를 많이 풀어봤다면 쉽게 떠올리고 풀 수 있을거라 생각합니다. 조심해야하는 부분은 오른쪽부터 시작하는 달팽이 회전이 아니..
![[Java] String, StringBuilder, StringBuffer 비교](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fc1elsw%2FbtsMGqi4fuE%2FAAAAAAAAAAAAAAAAAAAAACR8iJVkbGU3-cRYzYzG_qZROAJOlbp0hHjkpFDK05nU%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D6GOraucImND410rs2QdnCqU2CpQ%253D)
이번 시간에는 자바에서 문자열을 다루는 클래스인 String과 StringBuilder, StringBuffer에 대해서 각각 정리하고 차이를 비교해보려 합니다. 1️⃣ StringString 객체의 주요 특징으로는 불변(immutable)이라는 점입니다.이 말은 final 키워드처럼 한번 생성되면 변경이 불가능하다는걸 말해요.public class Main { public static void main(String[] args) { String str1 = "Hello"; str1 = str1 + " Beemo"; // 기존 str1을 수정하는 것처럼 보이지만 새로운 객체가 생성됨 }}위 코드는 기존 String객체에 문자열을 추가하여 수정하는 코드입니다. ..