[프로그래머스/level 3] 코딩 테스트 공부 - 118668 (Java)

2025. 2. 12. 09:11·코딩 테스트 정복기/프로그래머스
목차
  1. 풀이
  2. 코드
반응형

[level 3] 코딩 테스트 공부 - 118668

문제 링크

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

DP를 이용해 해당 문제를 해결할 수 있다.

먼저 가능한 선택지는 3가지 이다.

 

  1. 1시간을 사용, alp 1 늘리기
  2. 1시간을 사용, cop 1 늘리기
  3. 문제를 해결하여 주어진 cost를 사용, alp_rwd, cop_rwd 만큼 늘리기

row를 alp, col을 cop으로 두고 [alp][cop]에 시간(cost)을 저장하여 DP를 수행한다.

각 [알고력, 코딩력]에 도달하기 위한 경우의 수 중 cost가 가장 적은 것을 선택한다.

현재 [alp][cop]에서 

  1. 1시간을 사용, alp 1 늘리기
    dp[alp+1][cop]와 dp[alp][cop]+1을 비교하여 작은 값을 선택한다.
  2. 1시간을 사용, cop 1 늘리기
    dp[alp][cop+1]와 dp[alp][cop]+1을 비교하여 작은 값을 선택한다.
  3. 문제를 해결하여 주어진 cost를 사용, alp_rwd, cop_rwd 만큼 늘리기
    dp[alp+alp_wrd][cop+cop_rwd]와 dp[alp][cop]+cost를 비교하여 작은 값을 선택한다.

* 최소 값을 비교하여 저장해야하므로, dp 배열의 초기 값을 큰 값으로 바꿔두자! 

해당 과정을 거친 후 주어진 문제 중 alp_req와 cop_req가 가장 클 때의 시간을 return 한다.

 

 

코드

java
닫기
import java.util.*;
class Solution {
public int solution(int alp, int cop, int[][] problems) {
int maxal = Math.max(alp, Arrays.stream(problems).mapToInt(p -> p[0]).max().orElse(0));
int maxco = Math.max(cop, Arrays.stream(problems).mapToInt(p -> p[1]).max().orElse(0));
int[][] dp = new int[maxal + 1][maxco + 1];
Arrays.stream(dp).forEach(i -> Arrays.fill(i, 3151)); //dp배열 큰 값으로 초기화
dp[alp][cop] = 0; // 시작점 초기화
for (int al = alp; al <= maxal; al++) {
for (int co = cop; co <= maxco; co++) {
// 한 시간씩 기다려서 alp 또는 cop 1 증가
if (al < maxal) dp[al + 1][co] = Math.min(dp[al + 1][co], dp[al][co] + 1);
if (co < maxco) dp[al][co + 1] = Math.min(dp[al][co + 1], dp[al][co] + 1);
// 문제 풀었을 때 경험치 증가
for (int[] p : problems) {
if (al >= p[0] && co >= p[1]) {
int a = Math.min(maxal, al + p[2]);
int c = Math.min(maxco, co + p[3]);
dp[a][c] = Math.min(dp[a][c], dp[al][co] + p[4]);
}
}
}
}
return dp[maxal][maxco];
}
}

 

728x90
반응형

'코딩 테스트 정복기 > 프로그래머스' 카테고리의 다른 글

[프로그래머스/level 3] 파괴되지 않은 건물 - 92344 (+누적합, Java)  (0) 2025.02.11
[프로그래머스/level 4] 지형 이동 - 62050 (Java)  (0) 2024.12.20
[프로그래머스/level 3] 외벽 점검 - 60062  (0) 2024.12.15
[프로그래머스/level 2] 피로도 - 87946  (0) 2024.12.10
[프로그래머스/level 2] 양궁대회 - 92342  (1) 2024.12.06
  1. 풀이
  2. 코드
'코딩 테스트 정복기/프로그래머스' 카테고리의 다른 글
  • [프로그래머스/level 3] 파괴되지 않은 건물 - 92344 (+누적합, Java)
  • [프로그래머스/level 4] 지형 이동 - 62050 (Java)
  • [프로그래머스/level 3] 외벽 점검 - 60062
  • [프로그래머스/level 2] 피로도 - 87946
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    다이나믹프로그래밍
    다익스트라
    해시
    Spring Boot
    분할정복
    DFS
    lcs
    CI/CD
    BFS
    완전탐색
    백트래킹
    ncp
    github actions
    벨만포드
    프로그래머스
    백준
    집합
    ncp202
    ncp200
    Network
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
[프로그래머스/level 3] 코딩 테스트 공부 - 118668 (Java)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.