목록알고리즘 (13)
발전하는 개발자가 되자
프로그래머스 알고리즘 (java) 도둑질 프로그래머스 (도둑질) 도둑이 어느 마을을 털 계획을 하고 있습니다. 이 마을의 모든 집들은 아래 그림과 같이 동그랗게 배치되어 있습니다. 각 집들은 서로 인접한 집들과 방범장치가 연결되어 있기 때문에 인접한 두 집을 털면 경보가 울립니다. 각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 return 하도록 solution 함수를 작성하세요. 코드리뷰 조건 1번째 집을 털면 마지막 집은 털지 못한다. 인접한 집은 털지 못한다. 풀이방향 인접한 집을 털지 못하니 1번집을 털 경우와 2번집을 털 경우 그리고 한 칸씩 띄워서 두개의 최대 값을 비교하면 된다 생각하고 문제를 풀었습니다. 하지만 두칸 건널 수도 있다는 경우를 생각..
프로그래머스 알고리즘 (java) 등굣길 프로그래머스 (등굣길) 가장 왼쪽 위, 즉 집이 있는 곳의 좌표는 (1, 1)로 나타내고 가장 오른쪽 아래, 즉 학교가 있는 곳의 좌표는 (m, n)으로 나타냅니다. 격자의 크기 m, n과 물이 잠긴 지역의 좌표를 담은 2차원 배열 puddles이 매개변수로 주어질 때, 학교에서 집까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지를 return 하도록 solution 함수를 작성해주세요. 코드리뷰 조건 최단거리를 가야하기 때문에 왼쪽 과 아래 밖에 못 움직인다. 웅덩이가 있는곳은 못 지나간다. 풀이방향 이차원 배열을 만들고 웅덩이를 표시하고 거기서부터는 예전 수학시간에 배운 최단거리를 구하는 방법처럼 구해봤습니다. 웅덩이는 -1 로 미리 ..
프로그래머스 알고리즘 (java) 정수 삼각형 프로그래머스 (정수 삼각형) 코드 리뷰 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 조건 맨위 부터 아래로 내려가며 숫자를 증가시킨다. 마지막 까지 내려가 가장 큰 수를 반환한다. 풀이방향 현재 위치의 값을 구할 때 이전 값이 필요합니다. 그래서 저는 배열을 만들었고 이전 배열과 현재 배열을 더하는 식으로 접근 했습니다. 그러다 보니 양쪽 끝부분은 가지수가 1개이고 사이 [j] 값 은 이전 [j], [j - 1] 값을 비교해 큰 값을 더했습..
프로그래머스 알고리즘 (java) H-index 프로그래머스 (H-index) 코드 리뷰 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주는 문제 입니다. 조건 논문수 = 배열의크기 n 인용 횟수 h 인용횟수가 h 인 논문의 수가 h 이면 통과 반복 횟수 k 풀이 방향 가정 -1 작은수로 정렬 작은수를 기준으로 h 를 선정 k = 배열의 크기 - 기준인 h 의 인덱스 k = h 일 때 까지 반복 가정 -1 문제 h가 바로 통과 함 그럼 내림차순으로 정렬하고 해보자 가정-2 큰수로 정렬 큰수를 기준으로 h 를 선정 k = 배열의 크기 - 기준인 h 의 ..
프로그래머스 알고리즘 (java) 이중 우선순위 큐 프로그래머스 (이중 우선순위 큐) 코드 리뷰 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다. 이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요. 조건 명령어 높이 I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최솟값을 삭제합니다. 풀이 방향 string 배열을 split 하였습니다. 우선순위큐를 2개 만들어 오름차순 내림차순으로 초기화 시켜 사용했습니다. split한 String의 [0] 으로 조건을 구분해 동작 시켰습니다. ..
프로그래머스 알고리즘 (java) 디스크 컨트롤러 프로그래머스 (디스크 컨트롤러) 코드 리뷰 각 작업에 대해 [작업이 요청되는 시점, 작업의 소요시간]을 담은 2차원 배열 jobs가 매개변수로 주어질 때, 작업의 요청부터 종료까지 걸린 시간의 평균을 가장 줄이는 방법으로 처리하면 평균이 얼마가 되는지 return 하도록 solution 함수를 작성해주세요. (단, 소수점 이하의 수는 버립니다) 요청이 그림과 같이 들어온다면 두가지 경우의 수가 있습니다. A → B → C A → B → C 이 때 각 작업의 요청부터 종료까지 걸린 시간의 평균은 10ms(= (3 + 11 + 16) / 3)가 됩니다. A → C → B A → C → B의 순서로 처리하면 각 작업의 요청부터 종료까지 걸린 시간의 평균은 9m..
프로그래머스 알고리즘 (java) 라면 공장 프로그래머스 (라면 공장) 코드 리뷰 현재 공장에 남아있는 밀가루 수량 stock, 밀가루 공급 일정(dates)과 해당 시점에 공급 가능한 밀가루 수량(supplies), 원래 공장으로부터 공급받을 수 있는 시점 k가 주어질 때, 밀가루가 떨어지지 않고 공장을 운영하기 위해서 최소한 몇 번 해외 공장으로부터 밀가루를 공급받아야 하는지를 return 하도록 solution 함수를 완성하세요. 조건 stock에 있는 밀가루는 오늘(0일 이후)부터 사용됩니다. stock과 k는 2 이상 100,000 이하입니다. dates의 각 원소는 1 이상 k 이하입니다. supplies의 각 원소는 1 이상 1,000 이하입니다. dates와 supplies의 길이는 1 이..
프로그래머스 알고리즘 (java) 더 맵게 프로그래머스 (더 맵게) 코드 리뷰 배열중 값(스코빌 지수)이 가장 낮은 두개의 음식을 조건( a + b*2)에 맞춰 계산해 모든 배열의 값이 k 이상이 되게 만들어 섞은 횟수를 return 하는 문제 입니다. 조건 가장 작은 값 2개를 배열에서 뽑는다. 작은것과 두번째 작은것을 조건에 맞춰 계산한다. 계산한 값을 다시 배열에 반환한다. 배열의 값이 다 k보다 클 때 까지 반복한다. 풀이 방향 저는 가장 작은 값을 두개 뽑아야 하니 우선순위 큐를 사용하면 될것이라 생각했습니다. 생각대로 구현해보니 어렵지 않게 구현할 수 있었습니다. 우선순위 큐 를 사용할 줄 알면 쉽게 풀 문제였던거 같습니다. import java.util.PriorityQueue; class ..