본문 바로가기

알고리즘40

1206번 - View 문제의 저작권은 SW Expert Academy에 있습니다. (출처) 1. 문제 1-1. 문제 설명 1-2. 문제 해석 2. 코드 3. 실행시간 1. 문제 1-1. 문제 설명 1-2. 문제 해석 위 문제에서 요구하는 '조망권이 확보된 세대'란 결국 '나'를 기준으로 왼쪽 두 아파트와 오른쪽 두 아파트가 더 낮아야 한다. 그래야 조망권이 확보될 테니까. 그렇게 주변 아파트보다 현재 기준이 되는 아파트가 더 높다면 이제 고려해야 할 것은 몇 개의 세대가 조망권이 확보되었는가이다. 이는 '나'를 제외하고 가장 높은 아파트의 층수로 구할 수 있다. 예를 들어 B를 기준으로 봤을 때 B를 제외하고 B주변에서 가장 높은 아파트는 C임을 알 수 있다. B의 층수에서 C의 층수를 빼면 간단하게 조망권 세대수를 구할 수.. 2021. 8. 1.
1204번 - 최빈수 구하기 문제의 저작권은 SW Expert Academy에 있습니다. (출처) 1. 문제 1-1. 문제 설명 1-2. 문제 해석 2. 코드 3. 실행시간 1. 문제 1-1. 문제 설명 1-2. 문제 해석 쉽게 말해서 입력 값 중에 가장 많이 나온 숫자를 출력하는 문제이다. 여러 가지 방법이 있을 수 있겠지만 카운팅 정렬이 가장 빠른 결과를 얻어낼 수 있는 방법이라고 생각했다. 카운팅 정렬은 입력 값의 범위가 적을 때 유용하다는 특징이 있는데 점수가 0점에서 100점 사이니 아주 적절하다고 할 수 있다. 2. 코드 public class Day1_1204_최빈수구하기 { public static void main(String[] args) throws IOException { final int MAX = 101; .. 2021. 8. 1.
힙(Heap) 이란? 1. 힙(Heap) 1-1. 힙이란? 1-2. 힙의 종류 1-3. 힙의 활용 1-4. 예시(힙 삽입) 1. 힙(Heap) 1-1. 힙이란? 맨 처음에 힙을 들었을 때 엉덩이(hip)가 생각날 수도 있지만 힙은 heap이다. 무언가를 차곡차곡 쌓아 올린 더미라는 뜻이다. 힙(Heap)은 완전이진트리의 형태로 만들어진 자료구조이다. 돌더미, 작장더미, 쓰레기 더미...처럼 위로 갈수록 노드의 수가 줄어드는 모습을 하고 있다. 1-2. 힙의 종류 최대 힙(Max Heap): (완전 이진 트리) + (부모 노드 > 자식 노드) 최소 힙(Min Heap): (완전 이진 트리) + (부모 노드 < 자식 노드) 힙은 위처럼 두 종류로 나뉜다. 다시 풀어서 설명하자면 최대 힙은 완전 이진 트리이면서 부모 노드가 자식 .. 2021. 6. 25.
합병 정렬(=병합 정렬) 이란? 1. 합병 정렬 1-1. 합병 정렬? 병합 정렬? 1-2. 합병 정렬이란? 1-3. 움짤로 보는 예시 1-4. 글로 보는 예시 1-5. 소스코드 1-6. 합병 정렬의 시간 복잡도 1-7. 합병 정렬은 얼마나 빠를까? 1. 합병 정렬 1-1. 합병 정렬? 병합 정렬? 처음에 이름이 굉장히 헷갈렸다. (합병이 병합이고 병합이 합병 아닌가...? 🥴) 결론부터 말하자면 둘 다 맞는 말이다. 둘 다 사용해도 된다. 개인적으로 궁금해서 둘의 그 미묘한 차이를 알고 싶어 알아봤는데 합병: A와 B가 합쳐져 C가 만들어짐 병합: A가 B의 일부가 되거나 B가 A의 일부가 됨 이 블로거에 의하면 위와 같은 차이가 있다고 한다. 만약 이게 사실이라면 음,,, 나는 합병 정렬이 오늘 배울 내용과 더 적합하지 않을까..?라.. 2021. 5. 30.
퀵 정렬이란? 1. 퀵 정렬 1-1. 퀵 정렬이란? 1-2. 예시 1-3. 소스코드 1-4. 퀵 정렬의 시간 복잡도 1-5. 퀵 정렬은 얼마나 빠를까? 1. 퀵 정렬 1-1. 퀵 정렬이란? 이름값 하는 정렬 방법이다. 평균적으로 꽤나 빠른 속도를 보여준다. 여기서 평균적으로라고 한 이유는 [목차 1-4]에서 설명할 예정이다. 아무튼 이렇게 빠르게 정렬할 수 있는 이유는 분할 정복 방법을 사용했기 때문이다. 분할 정복 방법이란 큰 문제를 작은 문제로 쪼개어 문제를 해결하는 방식이다. 한 번에 먹기에 너무 큰 음식이 있으면 잘라먹듯이 한 번에 들기에 너무 무거운 짐이 있으면 나눠 들듯이 큰 문제를 해결하기 쉬운 작은 문제로 쪼개자는 것이다. 퀵 정렬은 이 개념을 도입한 방법인데 어떻게 정렬되는 건지 다음 목차에서 알아보자.. 2021. 5. 27.