본문 바로가기

알고리즘60

[백준 Gold 4] 1744 수 묶기 -Java 문제링크 : https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 접근 과정 : 음수인 경우, 0과 1, 1보다 큰 수로 나누어서 접근했다. 음수 : 가장 작은 음수부터 2개씩 묶어서 곱함 음수의 개수가 홀수이고 0이 존재하면 해당 음수는 없어짐 / 만약에 0이 없으면 해당 음수를 더함 1 : 1의 개수만큼 더함 1보다 큰수 : 가장 큰 수부터 2개씩 묶어서 곱하고, 홀수면 남은 숫자는 더함 소스 코드 및 결과 : package BOJ; impor.. 2021. 12. 23.
[백준 Silver 5] 10610 30 - Java 문제링크 : https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 접근 과정 : 우선 입력 숫자의 길이가 크기때문에, 문자열로 받아서 처리해야 한다. 처음에는, 만들 수 있는 숫자의 조합을 모두 구하고, 큰 수부터 3의 배수인지 확인하려고 했다. 문득!! 3의 배수는 각 자릿수의 합이 3으로 나누어떨어져야 한다는 것이 생각나더라!!! 그래서 입력 숫자가 0을 포함하고 있고, 각 자릿수의 합이 3의 배수인지 확인했다. 위의 조건이 만족하지 않으면 -1을.. 2021. 12. 23.
[백준 Gold 3] 1937 욕심쟁이 판다 - Java 문제링크 : https://www.acmicpc.net/problem/1937 1937번: 욕심쟁이 판다 n × n의 크기의 대나무 숲이 있다. 욕심쟁이 판다는 어떤 지역에서 대나무를 먹기 시작한다. 그리고 그 곳의 대나무를 다 먹어 치우면 상, 하, 좌, 우 중 한 곳으로 이동을 한다. 그리고 또 그곳에 www.acmicpc.net 접근 과정 : DFS를 통해서, forest[i][j] 에서 판다가 출발하는 경우를 모두 조사. 다만 이미 한번 조사했던 칸은 dp[i][j]에 저장된 값을 사용하여 재탐색 비용을 줄임 즉, DFS+메모리제이션으로 문제를 접근 (배열 이름만 dp....) 방문체크가 필요없는 이유 : 판다는 현재칸보다 더 큰 값의 칸으로만 이동하기 때문에 다시 같은 칸을 방문하지 않는다!! .. 2021. 12. 23.
[백준 Silver 1] 1309 동물원 - Java 문제링크 : https://www.acmicpc.net/problem/1309 1309번: 동물원 첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다. www.acmicpc.net 접근 과정 : 2차원 배열(zoo[][])을 선언하고, 2칸 모두 사자가 없는 경우 / 왼쪽칸에 사자가 있는 경우 / 오른쪽칸에 사자가 있는 경우로 경우의 수를 더했다 즉, Bottom-Up 방식으로 DP를 구현하였다. 소스 코드 및 결과 : package BOJ; /* 동물원 */ import java.io.*; public class BOJ1309 { public static void main(String[] args) throws NumberFormatException, IOException { BufferedR.. 2021. 12. 23.