Problem Solving/BOJ

    [백준, BOJ 9465] 스티커 (java)

    출처-https://www.acmicpc.net/problem/9465 9465번: 스티커 문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티 www.acmicpc.net 내가 푼 방식 (윗줄 왼쪽부터 1~5번, 아랫줄 왼쪽부터 6~10번) 그림의 1번에서 출발할 경우 7, 8번으로 밖에 가지 못한다. 물론 2, 6번 외의 모든 곳으로 갈 수 있지만, 7, 8번을 통해서 갈 수 있는 곳들이다. 7, 8번을 통해서 갈 수 있는 곳들은 굳이 저기로 바로 가지 않고 통해서 가는 것이 더 큰 합을 가질 수 있다. 위의 내용을 통해 아래의 결과가 나온다. arr[0][i]..

    [백준, BOJ 11054] 가장 긴 바이토닉 부분 수열 (java)

    출처-https://www.acmicpc.net/problem/11054 11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 내가 푼 방식 : 이차배열인 dp를 만들고, dp[0]에는 왼쪽에서 오른쪽으로 가는 '가장 긴 증가하는 부분 수열(11053)'을 저장해준다. dp[1]도 마찬가지로 가장 긴 증가하는 부분 수열을 저장해 주는데, 오른쪽에서 왼쪽으로 가는 부분 수열을 저장해 준다. import java.util.Scanner; public class Main { public static void main(String[] args..

    [백준, BOJ 11722] 가장 긴 감소하는 부분 수열 (java)

    출처-https://www.acmicpc.net/problem/11722 11722번: 가장 긴 감소하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 감소하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 30, 10, 20, 20, 10} 인 경우에 가장 긴 감소하는 부분 수열은 A = {10, 30, 10, 20, 20, 10} � www.acmicpc.net import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); int n=scan.nextIn..

    [백준, BOJ 11055] 가장 큰 증가 부분 수열 (java)

    출처-https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수� www.acmicpc.net 내가 푼 방식 : '11053'번과 동일한 방식으로 품. dp 배열에 순서를 저장해주지 않고 합을 저장해줌. import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Sca..

    [백준, BOJ 11053] 가장 긴 증가하는 부분 수열 (java)

    출처-https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scanner(System.in); int n=scan.nextIn..

    [백준, BOJ 2193] 이친수 (java)

    출처-https://www.acmicpc.net/problem/2193 2193번: 이친수 0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 이친수는 0으로 시작하지 않 www.acmicpc.net 내가 푼 방식 : dp[i][0]는 dp[i-1][0], dp[i-1][1] 두 경우일 때 다 올 수 있다. dp[i][1]는 dp[i-1][0]일 때만 올 수 있다. import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stu..

    [백준, BOJ 11057] 오르막 수 (java)

    출처-https://www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수� www.acmicpc.net 내가 푼 방식 : dp[i][j]는 dp[i-1][j]부터 dp[i-1][10]까지 올 수 있다. import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new Scann..

    [백준, BOJ 10844] 쉬운 계단 수 (java)

    출처-https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 내가 푼 방식 : dp[i][0]는 dp[i-1][1]일 경우에만 올 수 있다. dp[i][j=1]~dp[i][j=8]은 각각 dp[i-1][j-1]와 dp[i-1][j+1]인 경우에 올 수 있다. dp[i][9]는 dp[i-1][8]일 경우에만 올 수 있다. import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scan=new ..

    [백준, BOJ 9095] 1, 2, 3 더하기 (java)

    출처-https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 문제 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 1+1+1+1 1+1+2 1+2+1 2+1+1 2+2 1+3 3+1 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 www.acmicpc.net 내가 푼 방식 : dp[i]는 dp[i-1]에서 1을 더한 경우, dp[i-2]에서 2를 더한 경우, dp[1-3]에서 3을 더한 경우와 동일하며 서로 겹치는 경우는 없으므로 dp[i]=dp[i-1]+dp[i-2]+dp[i-3] 이다. import java.util.Scanner; public class Main { pu..

    [백준, BOJ 11727] 2xn 타일링 2 (java)

    출처-https://www.acmicpc.net/problem/11727 11727번: 2×n 타일링 2 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다. www.acmicpc.net 내가 푼 방식 : '11726' 번과 동일한 방식으로 풀었다. 다만 (1x2 타일이 위아래로 붙어있는 모양, 2x2 타일 하나) 이 두 가지가 결과적으론 2x2 모양의 타일로 보이므로 '11726' 번에서 dp[i]=dp[i-1]+dp[i-2]*2 로 구현해주었다. import java.util.Scanner; public class Main { public static void main(String[] args) { /..