CS/알고리즘2025. 2. 7. 18:46[알고리즘] 특정 수열에서 양 옆 최대값을 O(1)로 구해보자!

✏️ 알고리즘 개요알고리즘 문제를 풀다보면 특정 수열에서 i번째 원소를 기준으로 왼쪽 혹은 오른쪽 원소들에 대해 최대값을 구해야하는 경우가 종종 있다. 아래와 같이 단순하게 왼쪽, 오른쪽 원소들에 대해 반복문을 통해 최대값을 구하는 것을 생각해볼 수 있다.int[] arr = new int[]{5,9,6,2,1,4,5,6,8,10,4};for(int i=0; i=0; j--) { leftMaxValue = Math.max(leftMaxValue, arr[j]); } //오른쪽 최대값 int rightMaxValue = 0; for(int j=i+1; j 그러나 수열의 길이가 매우 길어지고, 찾아야하는 원소의 개수가 많아질수록 위와 같은 반복문은 매우 긴 시간복잡도를 가지..

[PS] 백준1655: 가운데를 말해요 (Java)
CS/알고리즘2025. 2. 4. 21:46[PS] 백준1655: 가운데를 말해요 (Java)

🔗 문제https://www.acmicpc.net/problem/1655📝 풀이자료 구조 + 우선순위 큐접근법입력으로 들어오는 정수들에 대해 기록하고, 중간값을 N번 찾는 문제입력값 N은 최대 100,000으로 대략적인 시간복잡도는 O(NlogN)으로 잡고 풀어야 한다. 단순하게 생각했을 때, 입력을 받으면서 정렬을 계속 수행한 후 현재 개수/2의 인덱스를 구하면 되지만정렬의 시간복잡도는 O(NlonN)으로 입력값 N에 대해 최대 100,000번 수행한다고 하면 O(N^2)을 넘어서게 된다.그렇다면 어떻게 풀이를 해야할까? 매번 정렬을 수행할 수 없으니 정렬을 유지한 채 값을 기록하고, O(1)로 중간 값을 찾을 수 있어야 한다.자료구조 중 이러한 특성을 가지고 있는 자료구조가 있다.기본적인 정렬을 ..

[회고] 25년 상반기 인턴 회고
회고록2025. 2. 4. 19:10[회고] 25년 상반기 인턴 회고

취업준비를 하던 중 인턴 기회를 얻어 값진 경험을 했고, 첫 회사인만큼 가서 느꼈던 것들, 배운 점들이 많았습니다. 이번에는 이에 대한 회고를 해보려합니다. 🎊 인턴 합격24년 SSAFY를 수료하고 개인 학습과 취업 준비를 병행하던 중, 두 곳의 면접 기회를 얻었고 열심히 노력한 결과 25년을 맞아 3주 간의 인턴 경험을 얻을 수 있었다.‘시스템 개발’ 직무로 개발 현업을 직접 느낄 수 있고, SSAFY에서 해왔던 개발과 비교해서 어떤 새로운 환경이 기다리고 있을까라는 기대감과 함께 입사했다. 😳 첫 인사 드립니다.1월 6일 도착한 교육장에서 인턴 생활에 대한 가벼운 OT 진행 후 각 팀의 팀장님들이 인턴 사원들을 픽업하러 오셨다. (마치 프로듀스101…)나의 경우에는 TO가 혼자였고, 팀장님과 단 ..

BFS? Dijkstra?
CS/알고리즘2025. 1. 31. 23:39BFS? Dijkstra?

여느 날처럼 에줍사 스터디를 진행하다가 그래프 탐색 문제에 대해 논의를 하던 중 나머지 스터디원들은 BFS로 접근을 했지만, 혼자 다익스트라로 접근을 했던 적이 있습니다. "왜 다익스트라를 떠올렸을까?"라는 생각을 한 결과, 다음과 같은 잘못된 기저가 깔려있다는 것을 알 수 있었습니다.시간복잡도 : Dijkstra BFS 또한 완전탐색으로 최단 거리를 찾는데 시간이 오래 걸릴 것이라 생각함알고리즘 특성 차이이번 회고를 통해 아래와 같이 잘못된 정보들을 바로잡으려합니다.추상적인 시간복잡도두 알고리즘의 동작 방식조건에 따른 수행 방식 BFS와 Dijkstra에 대한 정리는 이전에 정리해 두었던 글이 있으니 참조용으로 링크만 올려두겠습니다.https://infinitecode.tistory.com/13 [알고..

[PS] 백준3584: 가장 가까운 공통 조상 (Java)
CS/알고리즘2025. 1. 12. 19:02[PS] 백준3584: 가장 가까운 공통 조상 (Java)

문제https://www.acmicpc.net/problem/3584 풀이해시 + 그래프 탐색접근법“공통 조상” 이라는 키워드만 보고서는 유니온 파인드를 생각했습니다.그러나 “가장 가까운 공통 조상(Nearest Common Ancestor)”을 구하는 문제로써 Union-Find로 구할 시 루트노드가 나오기에 다른 방식으로 접근했습니다. 두 정점의 부모 노드만 탐색하면 되었기에 일반적인 그래프 탐색을 통해서 접근했습니다. (시간복잡도↓)트리 자료구조로는 인접리스트를 활용했고, 자식 노드가 아닌 부모 노드를 탐색해야 했기에 부모를 기준으로 자식노드를 담는게 아닌 자식 노드를 기준으로 부모 노드를 담았습니다.list.get(부모).add(자식) → list.get(자식).add(부모)a와 b 노드의 공통되..

25년 아홉수의 목표
회고록2025. 1. 5. 17:3125년 아홉수의 목표

Intro매년 12월이 되면 남들처럼 "새해엔 이렇게 해야지!"라고 목표를 세우곤 합니다.올해도 물론 새해를 맞아 24년에 대한 회고와 25년에 임하는 마음가짐을 새해목표라는 형태로 정리해보았습니다. 과거 편입을 준비할때 "목표를 세웠다면 최대한 주변에 공유해서 나의 목표를 알려라. 돌이킬수 없게" 라는 글을 본적이 있어요.실제로 많은 사람에게 말했고, 제 목표가 언급될 때마다 다시금 마음을 다잡을 수 있게 도와주었어요.이번에도 목표를 공유함으로써 "나라는 사람은 이렇게 성장해 갈거다."라고 넌지시 던지며 주변사람들에게 예측가능성을 주고 싶었다랄까요. 또한 작년까진 하지 않았던 지난 한 해의 회고와 잘한 점, 못한 점에 대해서도 작성을 해보았는데 가볍게 공유해볼게요.24년은 어땠어크게 어떤것들을 경험했고..

[회고] 내게 스터디란 (With 스터디 방식)
회고록2024. 12. 24. 18:46[회고] 내게 스터디란 (With 스터디 방식)

알고리즘 스터디는 작년부터 시작해서 다양한 스터디에 참여하고, 주도하면서 꾸준하게 진행하고 있는 것중에 하나입니다.첫 스터디부터 어떤 방식으로 하는게 좋을지, 인원은 어느정도가 적당한지, 수준은 어떻게 고려해야할지 많은 고민을 했고, 시행착오를 거쳐왔었습니다. 최근에 진행하고있는 알고리즘 스터디 '에러줍는 4인방'에서 스터디를 진행하면서 방식이 되게 좋고, 많이 성장하고 있다는 걸 느껴 알고리즘 스터디에 대한 하나의 가이드라인 느낌으로 정리해보려합니다.처음 시작SSAFY 수료 이후 코딩테스트 대비를 위한 스터디로 시작했었습니다.알고리즘을 좋아하고 꾸준히 할 수 있는 사람들을 모으다보니 4명 구성으로 시작하게 됐어요.함께 모여서 어떻게 진행할지 얘기를 하다보니 다음과 같은 공통점이 보이더라구요.1. 시간을..

[알고리즘] Union-Find (부제 : 좌표 압축은 왜?)
CS/알고리즘2024. 12. 3. 05:16[알고리즘] Union-Find (부제 : 좌표 압축은 왜?)

Union-Find?분리 집합이라고도 불리는 유니온 파인드는 그래프 형태의 자료구조에서 정점들의 연결 정보를 알고 싶을 때 사용하는 알고리즘입니다.분리 집합이라고 불리는 이유는 서로 연결된 정점들을 각각의 집합으로 만들기 때문입니다. DFS(BFS) VS Union Find그래프 형태의 자료에서 연결 정보를 알고 싶을 때 DFS, BFS 탐색을 통해서도 알 수 있습니다.그러나 서로 다른 모든 정점의 연결정보를 구하려면 시간이 오래 걸릴 수 밖에 없습니다.10만개의 정점이 있고, 모든 정점이 서로 연결되있을수도 있다면 두 정점의 연결관계를 탐색하는데 최대 10만번의 탐색이 이루어질 수 있기 때문입니다.또한 이러한 연결관계 탐색이 N번 필요하다면 O(N^2)의 시간이 필요합니다. Union Find를 사용하..

image