자바 97

[백준 2343번] 기타 - java

문제 설명 1. 강의의 수 N, 블루레이 녹화 개수 M이 주어진다. 2. N에 맞추어 강의가 하나씩 주어진다. 3. N개의 강의를 M개로 나누어 저장할 수 있는 가장 최소의 분단위를 구하면 된다. 풀이 과정 1. 이분 탐색 문제이다. 실버1 난이도인데 나는 왜이리 이분탐색이 어려운지 모르겠다... 2. 중요한 값들에 대해 이야기하자면 A. N개의 강의를 M개로 나누어 담는다는것 -> 한 개의 블루레이의 크기를 늘리고 줄이며 담을 수 있는 강의를 만들어가면 될것. B. 블루레이는 모두 같은 크기를 갖고, 최소의 크기로 만들어야 한다는것 -> 이분탐색을 M개의 값을 갖자마자 나가지 말고 그 최소를 구할것 이다. 3. 먼저 M은 N보다 작거나 같으므로 최소 블루레이 크기는 최대 길이 강의로부터 시작할 것이다...

알고리즘 공부 2022.03.26

[백준 2302번] 극장좌석 - java

문제 설명 1. 좌석의 개수가 주어진다. 2. 각 좌석은 자신의 양옆으로 이동 가능하며, VIP는 이동이 불가능하다. 3. VIP의 위치가 주어질 때 가능한 좌석의 전체 방법 수를 구하여라 풀이 과정 1. DP를 통해서 풀 수 있다. 2. 좌석을 한 칸씩 늘려가며 방법을 구해주면 점화식을 세울 수 있다. 먼저 VIP석이 아예 없는 경우를 예를 들어 1칸 -> 1개 2칸 -> (1 2) (2 1) 2개 3칸 -> (1 2 3) (1 3 2) (2 1 3) 3개 4칸 -> (1 2 3 4) (1 3 2 4) (2 1 3 4) / (1 2 4 3) (2 1 4 3) 5개 .... 이렇게 된다. 4번째 칸을 기준으로 구할 때에는 -> 3칸을 구하는 방법 뒤에 4번째 위치 / 3으로 끝나는 좌석을 4와 위치를 바..

알고리즘 공부 2022.03.03

[백준 1309번] 동물원 - java

문제 설명 1. 2xn크기의 우리를 갖는 동물원이 있다. 2. 사자를 넣는데, 사자의 양옆위아래에는 다른 사자가 있으면 안된다. 3. 모든 사자를 배열하는 방법을 찾는다. 사자의 수는 제한이 없고 아무도 없는 경우도 방법으로 친다. 풀이 과정 1. DP를 통해서 풀 수 있다. 2. 나는 DP의 경우 한번 n이 3이나 4가 될 때 까지는 무작정 경우의 수를 구하는 것이 쉽게 풀 수 있는 방법이라 생각한다. 그래서 그냥 방법을 구해 보았다. 우리 집에 있는 무서운 사자를 우리에 넣어보도록 하겠다. 먼저 2x1의 크기 우리에 사자가 배열되는 경우는 다음 세 가지에 해당한다. 그럼 다음으로 2x2의 우리에 사자를 넣는 경우는 어떻게 될까? 먼저 가장 왼쪽 ox의 경우(o는 사자, x는 빈칸) 이렇게 다음 우리가..

알고리즘 공부 2022.02.26

JAVA에서 ArrayList와 LinkedList에 관해, 그리고 vector

JAVA에서 ArrayList와 LinkedList에 관해, 그리고 vector ArrayList클래스 java의 Collection중 하나이다. ArrayList는 기존 자바 List와 달리 동적으로 크기가 할당된다. ArrayList는 java 메모리의 주소를 사용하여 데이터를 저장시킨다. 실질 ArrayList의 내부는 배열의 형태를 갖고 있기 때문이다. 그렇기 때문에 데이터를 검색할 때에도 바로 검색할 수 있다. 알아보기 쉽게 표현하자면 다음과 같다. 이런 식으로 각각의 data들이 하나씩 존재한다. 그럼 여기서 값을 추가하려면 어떻게 될까? 이런 식으로 새로운 값을 넣어주려면, 저 노란 색의 데이터가 들어가기 위해 뒤의 값들을 하나하나 옮겨주어야 할 것이다. 해당 위치를 찾아가서 값을 넣어준 뒤..

이론 정리/java 2022.02.26

[백준 2212번] 센서 - java

문제 설명 1. 센서의 개수 N, 집중국의 개수 K가 주어진다. 2. N개의 센서에 대해 집중국을 세워야 한다. 3. 문제가 이해가지 않아 한참을 해맸다... 문제에서 구해야 하는 내용에 대해 말하자면 - 직선 상에 센서들이 좌표를 갖고 주어진다. [2, 8, 10, 12, 13, 4] 요렇게 센서들이 주어지고, 만약 3개의 집중국을 세워야 한다고 해 보자 센서를 정렬하면 이렇게 될 것이고, 이 중 3개의 집중국이 커버 하도록 한다면 이런 식으로 나타낼 수 있다. -> [2, 2, 1]의 범위를 커버한다. 풀이 과정 1. 위의 내용을 기준으로 한번 생각을 해보면 센서들을 정렬한 후, 그 거리의 차를 구해주면 각각 센서들의 거리의 차를 구할 수 있다. 2. 그렇다면 집중국이 커버해야 하는 최소의 거리를 구..

알고리즘 공부 2022.02.21

[백준 7662번] 이중 우선순위 큐 - java

문제 설명 1. 테스트 케이스가 T번 주어진다. 해당 테스트 케이스들에 우선 순위 큐에 시도학 연산 N번이 주어진다. 2. I는 입력, D는 삭제이고 D에서 -1이면 최소값, 1은 최대값을 삭제한다. D시도 시 큐가 비어있으면 연산하지 않는다. 3. 각 테스트 케이스마다 최대값과 최소값을 구하면 된다. 참고로 큐가 비어있으면 EMPTY를 출력한다. 풀이 과정 1. 문제가 우선순위 큐이기 때문에 가장 간단히 구현할 수 있는 우선순위 큐를 사용하면 시간 초과가 난다....??? 2. 문제의 난이도 자체는 별로 어려울 것이 없다. 분기를 여러 번 하면 된다. D일때 -> 비어있으면 continue, 아니면 1과 -1에 따라 삭제하기 I면 그냥 add하기 3. 그렇지만 우선순위 큐로는 구하려 하면 에러가 나기 ..

알고리즘 공부 2022.02.11

[백준 11000번] 강의실 배정 - java

문제 설명 1. N개의 강의가 주어진다. 2. 강의의 시작시간/끝시간이 주어진다. 3. 강의는 서로 겹치면 안되고, 모든 강의를 성공적으로 할 수 있는 최소 강의실 수를 return하면 된다. 풀이 과정 1. 우선순위 큐, 그리디와 관련된 문제이다. 2. 가장 빨리 끝나는 강의의 끝시간보다 그 다음에 가장 빨리 끝나는 과목의 시작 시간이 더 이르면 강의실을 하나씩 늘려주면 된다. 3. 딱히 설명할 내용이 없다.... 주석으로 적어둠 코드

알고리즘 공부 2022.02.04

[백준 2636번] 치즈 - java

문제 설명 1. NxN크기의 땅이 있다. 2. 인구 이동은 인접 국가와의 인구 차이가 최소보다 많아야 하고, 최대보다 적어야 한다. 3. 인구 이동은 인접 국가들의 인구의 평균으로 된다. 풀이 과정 1. BFS를 사용하여 해결 가능하다. 2. 총 3가지 process를 구현해주면 된다. (1) 맨 위 테두리(0, 0) 바꾸면서 그 변경할 수를 세준다. (3) 전체 판을 탐색하며 더이상 녹을 치즈가 있을지 확인해주기. 3. 이걸 처음부터 실시하면 테두리의 치즈를 체크한다 -> 체크된 치즈가 녹는다(녹은 치즈수 세기) -> 확인후 더 치즈가 있으면 다시 처음부터 -> 더 녹을 치즈가 없으면 녹은 치즈 수를 return하기 위의 process를 할 때마다 날짜를 더해주면 최대날짜 구하기 가능. 코드

알고리즘 공부 2022.01.29

[백준 16234번] 인구 이동- java

문제 설명 1. NxN크기의 땅이 있다. 2. 인구 이동은 인접 국가와의 인구 차이가 최소보다 많아야 하고, 최대보다 적어야 한다. 3. 인구 이동은 인접 국가들의 인구의 평균으로 된다. 풀이 과정 1. BFS와 몇 가지 구현을 통해 해결 가능하다. 2. 먼저 모든 국가의 인원에 대해 검색을 진행해 준다. 3. 현재 국가에 대해 인접 국가가 있으면, 그 국가들을 통해 BFS를 진행한다. 추가로, 현재 국가와 인접한 국가들 모두의 정보를 새로운 Queue united에 저장해 준다. 4. BFS가 완료되면 이 BFS를 시행한 나라 기준으로 모든 인접 국가들이 united에 저장되었을 것이다. 그렇다면 이 united에 연합국이 존재하는 경우 그 국가들에 평균값을 저장시켜 준다. 예를 들어 크기가 4, 최대..

알고리즘 공부 2022.01.29

[백준 1107번] 리모컨 - java

문제 설명 1. 현재 채널은 100에 있다. 2. 도착하고 싶은 채널과, 고장난 숫자들이 주어진다. 3. 위, 아래, 고장나지 않은 숫자들을 이용해 현재 위치에서 원하는 채널로 갈 때에 필요한 클릭 수를 구하면 된다. 풀이 과정 1. 완전탐색을 통해 해결 가능하다. 2. 현재 고장난 버튼들을 모두 기억한다. 3. 도착하고 싶은 채널의 최대숫자는 500000이기 때문에, 0~1000000까지의 모든 채널로부터 해당 채널에 도착하는 경우를 구한다. 4. 그리고 그 0~1000000의 채널에 대해 그 채널로 이동할 수 있는 경우(고장난 숫자가 없음)는 이동 후 +나 -를 통해 이동하면 된다.(차이의 절대값) 예를 들어 도착하고 싶은 채널이 1517, 고장난 숫자가 1, 4, 6로 주어진 경우 0번 채널 -> ..

알고리즘 공부 2022.01.22