Java/Algorithm Problems

<백준> 24.07.09에 푼 문제들

re트 2024. 7. 9. 11:19
728x90

1. 퇴사 (Silver 3)

[백준]

https://www.acmicpc.net/problem/14501

[깃허브]

 

ForCodeKata/baekjoon 문제집/14501 퇴사 at main · heesoo-park/ForCodeKata

알고리즘 문제 코드 저장소. Contribute to heesoo-park/ForCodeKata development by creating an account on GitHub.

github.com

제출 결과


배열의 시작을 1부터 시작하도록 하다보니 범위에서 계속 어긋나다가 맞췄다.

현재 위치를 기준으로 다음 위치의 dp 값을 계산한다.

dp[i + 1]의 값이 dp값을 누적하며 유지할 수 있도록 하기 위해서 계산한다.

 

작성한 코드는 다음과 같다.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        
        int n = Integer.parseInt(br.readLine());
        int[][] schedule = new int[n + 1][2];
        int[] dp = new int[n + 2];
        
        for (int i = 1; i <= n; i++) {
            st = new StringTokenizer(br.readLine());
            schedule[i][0] = Integer.parseInt(st.nextToken());
            schedule[i][1] = Integer.parseInt(st.nextToken());
        }
        
        for (int i = 1; i <= n; i++) {
            int nextDay = i + schedule[i][0];
            
            if (nextDay <= n + 1) {
                dp[nextDay] = Math.max(dp[nextDay], dp[i] + schedule[i][1]);
            }
            
            dp[i + 1] = Math.max(dp[i + 1], dp[i]);
        }
        
        System.out.print(dp[n + 1]);
    }
}

 

2. 01타일 (Silver 3)

[백준]

https://www.acmicpc.net/problem/1904

[깃허브]

 

ForCodeKata/baekjoon 문제집/1904 01타일 at main · heesoo-park/ForCodeKata

알고리즘 문제 코드 저장소. Contribute to heesoo-park/ForCodeKata development by creating an account on GitHub.

github.com

제출 결과


앞서 풀었던 문제들 중에 비슷한 유형을 많이 풀어서 금방 해결했다.

그려보면 금방 패턴이 보이니 좋다...

 

작성한 코드는 다음과 같다.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int[] dp = new int[1000001];
        int n = Integer.parseInt(br.readLine());
        
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            dp[i] = (dp[i - 1] + dp[i - 2]) % 15746;
        }
        
        System.out.print(dp[n]);
    }
}
반응형

'Java > Algorithm Problems' 카테고리의 다른 글

<백준> 24.07.11에 푼 문제들  (0) 2024.07.11
<백준> 24.07.10에 푼 문제들  (1) 2024.07.10
<백준> 24.07.08에 푼 문제들  (0) 2024.07.08
<백준> 24.07.04에 푼 문제들  (0) 2024.07.04
<백준> 24.07.03에 푼 문제들  (1) 2024.07.03