본문 바로가기

PS81

[백준 *Java] - 합분해 (2225) 합분해 문제 보기 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 설명 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다 (1+2와 2+1은 서로 다른 경우) 또한 한 개의 수를 여러번 쓸 수도 있다. 입력 첫째 줄에 두 정수 N(1 005*3 014*6 023*6 122*3 113*3 = 18개 : DP[5][0] = 15, DP[5][1]= 6 N이 6일 때, 0 1 2 3 4 5 6 => 006*3 015*6 114*3 024*6 033*3 123*6 222 = 28개 : DP[6][0] = 18, DP[6][1]= 9 (+1) N이.. 2022. 3. 23.
[백준 *Java] - 제곱수의 합 (1699) 제곱수의 합 문제 보기 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 문제 설명 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11 = 3² + 1² + 1² (3개 항) 이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11 = 2² + 2² + 1² + 1² + 1² (5개 항)도 가능하다. 이 경우, 수학자 숌크라테스는 "11은 3개 항의 제곱수 합으로 표현할 수 있다." 라고 말한다. 또한 그보다 적은 항의 제.. 2022. 3. 23.
[백준 *Java] - 연속합 (1912) 연속합 문제보기 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 설명 n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 수를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 수는 한 개 이상 선택해야한다. 예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12 + 21인 33이 정답이된다. 입력 첫째 줄에 정수n (1 max ? accumulate : max; } DP[i] = max; } Sys.. 2022. 3. 22.
[백준 *Java] - 가장 긴 증가하는 부분 수열 (11053) 가장 긴 증가하는 부분 수열 문제보기 문제 설명 수열 A 가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 ? {10, 20, 10, 30, 20, 50} 이고, 길이는 4이다. {10, 20, 30, 50} 입력 첫째 줄에 수열 A의 크기 N(1 2022. 3. 21.
[백준 *Java] - 이친수 (2193) 문제 설명 0과 1로 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다. 1. 이친수는 0으로 시작하지 않는다. 2. 이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지않는다. 예를 들면, 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만, 0010101 이나 101101은 각각 1, 2번 규칙에 위배되므로 이친수가 아니다. N(1 2022. 3. 21.
[백준 *Java] - 에디터 (1406) 에디터 백준 1406 ⬇ [접근방식] 접근방법 1. 명령어가 수행되기 전 커서는 문장 맨 뒤에 위치하고 있다. => 초기화할 때, N+1 2. 초기에 편집기에 입력되어 있는 문자열이 주어짐 그 문자열에 삽입이 들어감 => List 자료구조 사용하기 3. Scanner / BufferedReader 중 어떤 걸로 입력으로 사용할까? => 최대 입력 값은 60만 글자임. 따라서 Scanner(1KB) 에 비해 더 큰 버퍼(8KB)를 사용하니, 긴 문자열에 포함된 파일을 읽을 시 효과적, 따라서 BufferedReader 로 먼저 사용. 4. 담을 공간에 대해서 생각해보기 (String, StringBuffer/StringBuilder) => 단일 쓰레드에 문자열 연산이 많을 수 있고, 특정 위치에 값을 삽입.. 2022. 3. 18.
[백준 *Java] - 2*n 타일링 (11726) 이번 문제는 2*n 타일링 백준 문제입니다. 역시나 DP 문제에 익숙하지 않아 문제를 이해하는데 오래걸렸습니다. 역시 DP 문제는 문제와 테스트케이스를 꼼꼼히 읽으며 하나씩 그려보거나? 쓰면서 하는 게 이해가 잘되는 거 같습니다. DP 에 대해서 잘 모르신다면? 아래 링크를 타고가서 블로그 글을 읽고 오시면 좋을 거 같습니다 😊 다이나믹 프로그래밍 점화식 👆 위 그림과 같이 그려보면, 갯수가 피보나치 수열로 증가하는 게 보입니다. 피보나치 수열은 1, 1, 2, 3, 5, 8 이런 식으로 증가합니다. 그런데 지금 보이는 수는 1 2 3 5 8 로 증가를 하니 인덱스를 맞춰서 코드를 구현하면 됩니다. 아래 코드는 주석을 달아 코드 설명을 해놓았습니다. 👇 Top-down 방식으로 구현하였고, 주석에는 Bo.. 2022. 3. 18.
[백준 *Java] - 1로만들기(1463) DP 문제를 처음 접했을 때 풀었던 문제입니다. 일단 DP에 대해서 잘 모르신다면, 아래 링크를 타고 가서 한 번 읽고 오셔도 좋을 거 같습니다. 다이나믹 프로그래밍 점화식 1로 만들기 문제는 Top-down, Bottom-up, dfs 방식으로 각기 다르게 문제를 풀어보았습니다. 아래코드 기준으로 메모리,시간 효율이 좋은 순서는 dfs > Bottom-up > Top-down 입니다. 하지만 dfs 와 Bottom-up은 큰 차이는 보이지 않았습니다. 각 코드마다 주석으로 코드 설명을 해놓았습니다. 혹시 코드개선할 점과, 모르는 부분이 있으시면 댓글 남겨주시면 감사합니다 : ) DP 문제는 종이와 펜을 가지고 일일이 확인을 해보면서 점화식을 찾으며 문제를 풀고 그 능력을 키우면 실력에 도움이 많이 될거.. 2022. 3. 18.