본문 바로가기

알고리즘135

[Java] 백준 20440번 : 🎵니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마🎵 - 1 https://www.acmicpc.net/problem/20440 20440번: 🎵니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마🎵 - 1 첫째 줄에 지동이의 방에 출입한 모기의 마릿수 N(1 ≤ N ≤ 1,000,000)가 주어진다. 다음 N개의 줄에 모기의 입장 시각 TE과 퇴장 시각 TX이 주어진다. (0 ≤ TE max) { max = mosquitoes[i]; startIndex = i; endIndex = i; } if (mosquitoes[i] == max && i - 1 == endIndex) { endIndex = i; } } System.out.println(max); System.out.println(compressed.get(startIndex) + " " + compre.. 2023. 6. 15.
[Java] 백준 17265번 : 나의 인생에는 수학과 함께 https://www.acmicpc.net/problem/17265 17265번: 나의 인생에는 수학과 함께 세현이의 인생의 목표는 1분 1초 모든 순간 수학과 함께 살아가는 것이다. 그렇기 때문에 매일 수학을 생각하면서 살아가고 있다. 세현이는 밥을 먹을 때도 쌀알의 수를 계산하여 칼로리를 바로 www.acmicpc.net 💡 문제 풀이 그래프 탐색 문제이다. 범위가 작아서 백트래킹으로 구현했다. 전역적으로 연산자에 대해서 관리했다. 따라서, 연산자일 때 새롭게 연산자를 초기화해 주고, 연산자가 아니라면 기존의 연산자로 돌려주는 것이 핵심이다. ✔️ 느낀 점 자바로 푸니까 확실히 어렵지만 할만한 문제였다. 사실 int 형으로 변환할 때 parseInt를 쓰고 싶지 않아서 char형으로 갔는데 타입은 편.. 2023. 5. 17.
[알고리즘] 재귀 & 그리디 알고리즘 🎯 목표 재귀 알고리즘의 구조를 이해한다. 그리디 알고리즘을 이해하고 자주 나오는 유형을 익힌다. 🔄️ 재귀 알고리즘 자기 자신을 다시 호출하는 구조를 가진 알고리즘이다. 보통 더 작은 구조를 다시 호출해서 해결한다. 이는 분할-정보 알고리즘과 유사하다. public void recursion(int n) { if (n == MIN_SIZE) { // 가장 작은 단위의 일을 한다. } // 가장 작은 단위가 될 때까지 쪼갠다. return recursion(n - 1); } ✌ 특징 코드가 이뻐보일 순 있다. 하지만 스택 오버플로우가 발생할 수 있고 정확한 호출 회수를 예측하기 어렵다. 따라서, 재귀로 풀 수 있는 문제는 다른 방법으로 먼저 접근해본다. 그래도 재귀로 풀겠다면, 가장 작은 단위의 일에 대.. 2023. 5. 3.
[Java] 백준 1374번 : 강의실 https://www.acmicpc.net/problem/1374 1374번: 강의실 첫째 줄에 강의의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 줄마다 세 개의 정수가 주어지는데, 순서대로 강의 번호, 강의 시작 시간, 강의 종료 시간을 의미한다. 강의 www.acmicpc.net 💡 문제 풀이 강의실 배정 문제이다. 이 문제는 최선의 강의실 개수를 구하는 문제이다. 가장 빨리 끝나는 강의 혹은 가장 빨리 시작하는 강의를 기준으로 탐색해서 해결할 수 있다. 이번 문제에선 가장 빨리 시작하는 강의를 기준으로 해결했다. 대기 중인 강의가 우선순위 큐에 저장되고 강의의 개수만큼 탐색한다. 지금 하는 강의가 끝나고 대기 중인 다음 강의가 진행될 수 있다면 다음 강의를.. 2023. 5. 3.
[Java] 백준 24460번 : 특별상이라도 받고 싶어 https://www.acmicpc.net/problem/24460 24460번: 특별상이라도 받고 싶어 첫 번째 줄에는 정수 $N$이 주어진다. (단, $N = 2^m$, $0 \le m \le 10$, $m$은 정수) 두 번째 줄부터 $N$개 줄의 $i$번째 줄에는 $i$번째 줄에 있는 의자에 적힌 추첨번호가 주어진다. 각 줄에는 $N$개의 추첨 www.acmicpc.net 💡 문제 풀이 분할 정복과 재귀가 합쳐진 문제이다. 주어진 영역을 4개의 구역으로 나눠서 가장 작은 구역이 되었을 때 그 값을 리턴하도록 한다. ✔️ 느낀 점 재귀의 핵심은 역시 가장 작은 단위가 되었을 때 어떤 값을 리턴하도록 하는 것인가? 인 것 같다. 어렵지는 않았지만 자바 코드로 작성하는 게 매우 어색한 문제였다. 💻 코드.. 2023. 5. 2.
[Java] 백준 1477번 : 휴게소 세우기 https://www.acmicpc.net/problem/1477 1477번: 휴게소 세우기 첫째 줄에 현재 휴게소의 개수 N, 더 지으려고 하는 휴게소의 개수 M, 고속도로의 길이 L이 주어진다. 둘째 줄에 현재 휴게소의 위치가 공백을 사이에 두고 주어진다. www.acmicpc.net 💡 문제 풀이 이분 탐색 문제이다. 세워야 할 휴게소만큼 각 구간 별로 확인해서 모두 세울 수 있는지 확인하면 된다. 검색할 값은 휴게소간의 거리이고, 확인 값은 주어진 거리로 휴게소를 세울 때 조건만큼 세울 수 있는지이다. 시작 범위(0부터)와 마지막 범위(고속도로 끝까지)도 따져야 하므로 0과 l을 리스트에 추가해 준다. ✔️ 느낀 점 이분 탐색에 부족함을 느끼고 풀었던 문제인데, 생각보다 금방 풀었다. 💻 코드 i.. 2023. 4. 28.