Problem Solving

Problem Solving

    [백준, BOJ 11718] 그대로 출력하기 (java)

    출처-https://www.acmicpc.net/problem/11718 11718번: 그대로 출력하기 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시� 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); String str; while(scan.hasNext()) { str=scan.nextL..

    [백준, BOJ 11022] A+B - 8 (java)

    출처-https://www.acmicpc.net/problem/11022 11022번: A+B - 8 각 테스트 케이스마다 "Case #x: A + B = C" 형식으로 출력한다. x는 테스트 케이스 번호이고 1부터 시작하며, C는 A+B이다. www.acmicpc.net import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int totalNum = scan.nextInt(); int num1; int num2; for (int i=0;i

    [백준, BOJ 11021] A+B - 7 (java)

    출처-https://www.acmicpc.net/problem/11021 11021번: A+B - 7 각 테스트 케이스마다 "Case #x: "를 출력한 다음, A+B를 출력한다. 테스트 케이스 번호는 1부터 시작한다. www.acmicpc.net import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int totalNum = scan.nextInt(); int num1 []=new int[totalNum]; int num2 []=new int[totalNum]; for (int i=0;i

    [백준, BOJ 2133] 타일 채우기 (java)

    출처-https://www.acmicpc.net/problem/2133 2133번: 타일 채우기 문제 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력 첫째 줄에 경우의 수를 출력한다. 예제 입력 1 복사 2 예제 출력 1 복�� www.acmicpc.net 내 생각 : 3xn은 맨 아래나 맨 위에 1x2 타일이 꼭 붙어있어야 하므로 n은 반드시 2의 배수여야만 타일을 꽉 채울 수 있다. 우선 n이 2일 때는 다음과 같은 모양의 3개의 패턴이 가능하다.(dp[2]=3) 또한 N이 2씩 커질때마다 다음과 같은 특수한 패턴이 2개씩 더 생긴다. (위 그림은 각각 n이 4, 6, 8일 때 생기는 특수한 패턴들이다.) 매번..

    [백준, BOJ 1699] 제곱수의 합 (java)

    출처-https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 내가 푼 방식 : 이거 진짜 왜 계속 틀렸다고 뜨는지 몰라서 개빡쳤었던 문제.. 내가 처음 푼 방식은 n이 12라면 12보다 작으면서 가장 큰 제곱수인 9를 빼고 dp에 dp[9]을 더해준 뒤, 나머지 12에서 9를 뺀 나머지 3의 dp를 더해줬다. dp[12]=dp[9](=1)+dp[3](=3)=4 하지만 12는 dp[12]=dp[4]+dp[4]+dp..

    [백준, BOJ 2579] 계단 오르기 (java)

    출처-https://www.acmicpc.net/problem/2579 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 내가 푼 방식 : dp[i-3]+arr[i-1]+arr[i]와 dp[i-2]+arr[i] 중에 큰 것을 비교 둘 중 큰 것을 dp[i]에 넣는다. 그리고 dp[i-1]과 dp[i]을 비교. import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scann..

    [백준, BOJ 1912] 연속합 (java)

    출처-https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 내가 푼 방식 : dp[i]에는 arr[i]가 저장되어 있다. 만약 dp[i-1]이 음수라면 dp[i]은 그대로 나두고, dp[i-1]이 양수라면 dp[i]에 dp[i-1]을 더해준다. ==>>처음에 arr[i-1]가 음수면 합이 작아지게 한다고 생각하고 dp[i]에 dp[i-1]를 더하지 않고 그냥 dp[i]=arr[i] 해주었다. 이렇게 하면 음수인 arr[i-1]를 포함하더라도 연속배열을 늘려 d..

    [백준, BOJ 2156] 포도주 시식 (java)

    출처-https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 내가 푼 방식 : ('2579번'과 유사) dp[i-3]+arr[i-1]+arr[i]와 dp[i-2]+arr[i] 중에 큰 것을 비교 둘 중 큰 것을 dp[i]에 넣는다. 그리고 dp[i-1]과 dp[i]을 비교. (여기까지는 2579번과 동일) 하지만 계단은 한 번에 3 계단 이상 올라갈 수 없었다. 하지만 포도주 마시는 것은 3칸 이상 건너뛰는 것이 가능하다. 따라서 다음 조건을 추가해줬다..

    [백준, 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..