[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming)][Java] 도둑질
·
알고리즘 & 자료구조/문제 풀이
https://school.programmers.co.kr/learn/courses/30/lessons/42897 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr이 문제에서 가장 중요한 것은 원형이기 때문에첫 번째 집을 선택했냐 안 했냐입니다.첫 번째 집을 선택하면 마지막 집을 선택하지 못합니다. 그렇기 첫번째 집을 선택했다는 "상태"를 마지막까지 기억해야 합니다.그래서 dp 배열을 2개로 분리하여 선택한 dp, 선택하지 않은 dp를 분리하여 진행합니다.그러면 각 dp도 이전에 선택했는지 안 했는지 알아야 하기 때문에 [i][0], [i][1] 이런 식으로 i번째 선택, i번째 선택 x로 다음 집을 선택할 수 있..
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming)][Java] 사칙연산
·
알고리즘 & 자료구조/문제 풀이
https://school.programmers.co.kr/learn/courses/30/lessons/1843 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 1. 틀린코드작은 영역부터 잘라서 왼쪽의 최대 최소, 오른쪽 최대 최소를 이용해 특정 영역의 최댓값을 구한다.간격이 가장 작은 2부터 0~0 최대 최소 0~2 최대 최소 2~4 ...를 찾아가고간격이 커지면서 0~4 4~8 .. 이렇게 범위를 늘려간다.그렇게 되면 N^3의 시간복잡도가 나오는데 시간초과가 떴다.복잡도를 줄이는 건 도저히 모르겠어서 의심되는 곳을 바꿔보기로 했다.class Solution { public int solution(St..
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] N으로 표현
·
알고리즘 & 자료구조/문제 풀이
https://school.programmers.co.kr/learn/courses/30/lessons/42895 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 처음보는 형태의 dp 문제였다.점화식으로 이전 값을 활용하는 것이 아니라나올 수 있는 결과들을 다음 결과들을 만드는 데 사용한다.여기서 출력 조건이 8개보다 크면 -1을 출력을 하라고 했는데이건 다 풀고 나서야 힌트라는 것을 알게 되었다.8개까지만 구하고 그 이후는 계산할 필요가 없다는 생각으로사용갯수가 1개인 것부터 하나씩 나올 수 있는 결과들을 만들어서 넘어가는 식으로 풀 수 있다.연산의 결과가 중복이 많았기 때문에 Set으로 관리했다.N을 1개..
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] 정수 삼각형
·
알고리즘 & 자료구조/문제 풀이
https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr위에서부터 내려온다고 가정하면 바로 아래 왼쪽 값이 더 크다고 해서 그 경로가 최대로 가는 경로가 아닐 수 있음그래서 생각하기 어려움밑에서부터 올라간다고 생각하면특정 노드를 기준으로 최대가 되려면 밑에 2개의 값 중 큰 것만 고르면됨그렇게 맨 밑에서 부터 큰 값들을 골라서 위로 올라가면 최종엔 최대 합만 남음class Solution { public int solution(int[][] triangle) { int N = triangle..
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] 등굣길
·
알고리즘 & 자료구조/문제 풀이
https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr현재 서 있는 곳으로 올 수 있는 방법은1. 왼쪽에서 오른쪽으로 한칸(numOfShortestPath[x-1][y])2. 위쪽에서 아래쪽으로 한칸(numOfShortestPath[x][y-1])2개의 합이 현재 서 있는 곳으로 올 수 있는 경우의 수중간 block 된 곳은 continue이 방법을 시작 점 부터 하나씩 채워나간다.class Solution { final int MOD = 1_000_000_007; public in..