2023/09/23 3

[Programmers] 도둑질

난이도 : Level 4 문제링크 마을의 모든 집들은 동그랗게 배치되어 있다. 각 집들은 서로 인접한 집들과 방법장치가 연결되어 있음 인접한 두 집을 털면 경보가 울림 각 집에 있는 돈이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 구하시오 해설 집들이 원형으로 배치되어 있고 인접한 두 집을 털 수 없으므로 두가지 경우가 발생한다 첫번째 집을 털면 마지막 집을 털지 못하고 마지막 집을 털면 첫번째 집을 털지 못한다 두가지 경우를 비교하고, 가장 큰 값을 리턴한다 첫번째 집부터 마지막에서 이전 집까지 터는 돈의 최대값 두번째 집부터 마지막까지 터는 돈의 최대값 public int solution(int[] money) { int size = money.length; int[] d..

Algorithm/(Java) PS 2023.09.23

[Programmers] 등굣길

난이도 : Level 3 문제링크 집에서 학교까지 갈 수 있는 최단 경로의 개수의 1,000,000,007로 나눈 나머지를 리턴하라 물웅덩이가 있는 길은 지나갈 수 없음 집 좌표 : (0,0) 학교 좌표 : (m-1, n-1) 해설 동적계획법을 사용하여 도착지별 최단 경로수를 구해나간다. 도착지의 최단 경로 수는 도착지로부터 위, 왼쪽 도착지의 경로의 합입니다. 물웅덩이를 만나게 될 경우, 해당 경로의 최단경로 수는 0이 됩니다. 첫번째 열 혹은 첫번째 행일경우, 직전에 방문한 도착지의 최단경로만 더해줍니다. public int solution(int m, int n, int[][] puddles) { int[][] dp = new int[n+1][m+1]; for (int[] puddle : puddl..

Algorithm/(Java) PS 2023.09.23

[Programmers] 사칙연산

난이도 : Level 4 문제링크 문자열 배열 arr가 매개변수로 주어짐 : 숫자, 더하기 기호, 뺄셈 기호 arr의 괄호를 사용하여 연산순서가 이전과 다른 연산을 할 수 있다 괄호 사용을 포함한 모든 연산에 대한 결과 중 최댓값을 리턴하라 길이 : 3 이상 201 이하 (항상 홀수) example) 1 - 3 + 5 - 8 (((1 - 3) + 5) - 8) = -5 ((1 - (3 + 5)) - 8) = -15 (1 - ((3 + 5) - 8)) = 1 (1 - (3 + (5 - 8))) = 1 ((1 - 3) + (5 - 8)) = -5 해설 주어진 arr의 부분합들을 조합해서 가장 큰 최댓값을 리턴한다 동적계획법을 활용하여 2부터 arr의 전체길이까지 반복하면서 부분합들을 연산하고 만들어간다 0부..

Algorithm/(Java) PS 2023.09.23