전체 글
[BOJ/JAVA] 21758번: 꿀 따기
태그: Java 21758번: 꿀 따기 21758번: 꿀 따기 첫 번째 줄에 가능한 최대의 꿀의 양을 출력한다. www.acmicpc.net 키워드 두 마리가 모두 지나간 장소에서는 두 마리 모두 표시된 양 만큼의 꿀을 딴다. (벌통이 있는 장소에서도 같다.) 벌이 시작한 장소에서는 어떤 벌도 꿀을 딸 수 없다. 구현 꿀의 누적합을 구한다. 3가지 경우의 수가 생긴다. 꿀통이 0에 있는 경우 어처피 n-1은 못먹으므로, 하나는 무조건 한쪽 끝에 두는 것이 이득이다. 나머지는 전부 돌아가며 최댓값을 찾는다. 꿀통이 n-1에 있는 경우 어처피 0은 못먹으므로, 하나는 무조건 한 쪽 끝에 두는 것이 이득이다. 나머지는 전부 돌아가며 최댓값을 찾는다. 꿀통이 중간에 있는 경우 벌을 양 쪽 끝에 두는 것이 이득이..
[BOJ/JAVA] 2036번: 수열의 점수
태그: Java 2036번: 수열의 점수 2036번: 수열의 점수 n개의 정수로 이루어진 수열이 있다. 이 수열에서 한 정수를 제거하거나, 또는 두 정수를 제거할 수 있다. 한 정수를 제거하는 경우에는 그 정수가 점수가 되고, 두 정수를 제거하는 경우에는 두 www.acmicpc.net 키워드 한 정수를 제거하는 경우에는 그 정수가 점수가 되고 두 정수를 제거하는 경우에는 두 정수의 곱이 점수가 된다. 이를 반복하여 수열에 아무 수도 남지 않게 되었을 때, 점수의 총 합의 최대 구현 양이아닌 정수의 경우 작은 것 끼리 최대한 곱하는 것이 이득이다. 양의 정수의 경우 큰 것 끼리 최대한 곱하는 것이 이득이다. 단, 1의 경우 더하는 것이 이득이다. 코드 import java.io.BufferedReader..
[BOJ/JAVA] 1783번: 병든 나이트
태그: Java 1783번: 병든 나이트 1783번: 병든 나이트 첫째 줄에 체스판의 세로 길이 N와 가로 길이 M이 주어진다. N과 M은 2,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 키워드 병든 나이트가 N × M 크기 체스판의 가장 왼쪽아래 칸에 위치해 있다. 병든 나이트는 건강한 보통 체스의 나이트와 다르게 4가지로만 움직일 수 있다. 2칸 위로, 1칸 오른쪽 1칸 위로, 2칸 오른쪽 1칸 아래로, 2칸 오른쪽 2칸 아래로, 1칸 오른쪽 여행을 하면서 방문한 칸의 수를 최대로 하려고 한다. 병든 나이트의 이동 횟수가 4번보다 적지 않다면, 이동 방법을 모두 한 번씩 사용해야 한다. 이동 횟수가 4번보다 적은 경우(방문한 칸이 5개 미만)에는 이동 방법에 대한 제..
[BOJ/JAVA] 14613번: 너의 티어는?
14613번: 너의 티어는? 14613번: 너의 티어는? 규환이는 최근에 오버워치에 흠뻑 빠졌다. 그의 랭크 점수는 현재 2000점이며, 그는 오늘 랭크게임을 20번 할 예정이다. 규환이는 게임을 시작하기 전 자신의 그동안 승률을 통해 자신이 브론즈, www.acmicpc.net 키워드 그의 랭크 점수는 현재 2000점이며, 그는 오늘 랭크게임을 20번 할 예정이다. 게임을 이길 경우 얻는 포인트는 50 Point, 질 경우 잃는 포인트도 50 Point, 비길 경우 Point의 변화는 없다. 브론즈: 1000~1499 실버: 1500~1999 골드: 2000~2499 플래티넘: 2500~2999 다이아: 3000~3499 구현 랭크 점수는 2000이지만 배열 크기의 압축을 위해 1000점씩 깎아서 계산..
[BOJ/JAVA] 1005번: ACM Craft
1005번: ACM Craft 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 키워드 모든 경기에서 특정 건물만 짓는다면 무조건 게임에서 이길 수 있다. 매 게임시작 시 건물을 짓는 순서가 주어진다. 또한 모든 건물은 각각 건설을 시작하여 완성이 될 때까지 Delay가 존재한다. 특정건물을 가장 빨리 지을 때까지 걸리는 최소시간을 알아내는 프로그램 구현 i 건물을 짓는데 필요한 선행 건물의 인접리스트를 구현한다. 위 그림에서 4번 건물을 짓기 위해서 2, 3의 건물 인덱스를 삽입한다. 2, 3건물도 마찬..
[BOJ/JAVA] 1535번: 안녕
1535번: 안녕 1535번: 안녕 첫째 줄에 사람의 수 N(≤ 20)이 들어온다. 둘째 줄에는 각각의 사람에게 인사를 할 때, 잃는 체력이 1번 사람부터 순서대로 들어오고, 셋째 줄에는 각각의 사람에게 인사를 할 때, 얻는 기쁨이 1번 www.acmicpc.net 키워드 세준이가 i번 사람에게 인사를 하면 L[i]만큼의 체력을 잃고, J[i]만큼의 기쁨을 얻는다. **주어진 체력내**에서 **최대한의 기쁨**을 느끼는 것이다. 세준이의 **체력은 100이고, 기쁨은 0**이다. 세준이의 체력이 **0이나 음수가 되면, 죽어서 아무런 기쁨을 못 느낀 것**이 된다. 구현 index번 사람에게 인사를 할 것인지를 선택한다. 만약 인사를 할 때 현재 체력보다 깎이는 체력이 많다면 인사를 하지 않는다. 코드 ..
[BOJ/JAVA] 14501번: 퇴사
14501번: 퇴사 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 키워드 N+1일째 되는 날 퇴사를 하기 위해서, 남은 N일 동안 **최대한 많은 상담**을 하려고 한다. 상담을 적절히 했을 때, 백준이가 얻을 수 있는 최대 수익 구현 상담을 완료하는데 걸리는 기간 배열, 상담을 했을 때 받을 수 있는 금액 배열을 입력받는다. cache는 다음을 저장한다 i-1일 부터 상담을 했을 때 얻을 수 있는 최대 수익 DP의 구현 오늘 상담을 하는 경우 today+T[i-1] 날짜로 이동한다. 받을 수 있는 금액 P[i-1]을 추가한다. 오늘 상담을 하지 않는 경우 today+1 날짜로 이동한다. 코드 import java.io.BufferedReader..
[BOJ/JAVA] 7682번: 틱택토
7682번: 틱택토 7682번: 틱택토 틱택토 게임은 두 명의 사람이 번갈아가며 말을 놓는 게임이다. 게임판은 3×3 격자판이며, 처음에는 비어 있다. 두 사람은 각각 X 또는 O 말을 번갈아가며 놓는데, 반드시 첫 번째 사람이 X를 놓고 www.acmicpc.net 키워드 게임판은 3×3 격자판 반드시 첫 번째 사람이 X를 놓고 두 번째 사람이 O를 놓는다. 어느 때든지 한 사람의 말이 가로, 세로, 대각선 방향으로 3칸을 잇는 데 성공하면 게임은 즉시 끝난다. 게임판이 가득 차도 게임은 끝난다. 구현 X, O의 갯수를 세는 메소드 O, X가 이긴 횟수를 세는 메소드 위 결과를 바탕으로 유효한지 체크하는 메소드 X의 승리가 0보다 크다면 → O의 승리가 있다면 → 불가능 X의 승리가 0보다 크다면 → ..
[BOJ/JAVA] 15684번: 사다리 조작
15684번: 사다리 조작 키워드 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H 단, 두 가로선이 연속하거나 서로 접하면 안 된다. 또, 가로선은 점선 위에 있어야 한다. i번 세로선의 결과가 i번이 나와야 한다. 그렇게 하기 위해서 추가해야 하는 가로선 개수의 최솟값을 구하는 프로그램을 작성하시오. 구현 i번 세로선이 i번이 나오는지 체크하는 메소드 col마다 row를 증가시키면서 사다리가 있으면 타고 이동한다. 연결되지 않은 연속되지 않은 가로선 선택하기 board[i][j], board[i][j+1] 값이 존재하면 그 둘은 연결되었다는 것이다. board[i][j] 값이 -1이 아니고 board[i][j+1] 값이 -1이 ..
[BOJ/JAVA] 20208번: 진우의 민트초코우유
https://www.acmicpc.net/problem/20208 20208번: 진우의 민트초코우유 첫번째 줄에 민초마을의 크기인 N과 진우의 초기체력 M, 그리고 민트초코우유를 마실때 마다 증가하는 체력의 양 H가 공백을 두고 주어진다. N, M, H는 모두 10보다 작거나 같은 자연수이다. 두번째 www.acmicpc.net 키워드 민트초코우유가 배달된다는 N × N 크기의 2차원 민초마을로 이사를 하였다. 진우는 지도상에서 상, 하, 좌, 우로 1칸씩 이동 이동하면 체력이 1만큼 줄어든다. 진우가 마을을 돌아다니다가 민트초코우유를 마신다면 체력이 H 만큼 증가 진우의 체력이 초기체력 이상으로 올라갈 수 있다. 체력이 0이 되는 순간 진우는 이동할 수 없다. 진우의 집은 무조건 한 곳이 주어지며 마..