본문 바로가기

전체 글1271

[백준] 1918 후위 표기식 - Data Structure / Java • 문제 링크 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 www.acmicpc.net • 풀이 과정 후위 표현식을 저장할 StringBuilder 와 연산자의 우선 순위를 구하기 위해 Stack 자료구조를 활용한다. 입력받은 수식의 한 문자 단위로 탐색을 수행하고, 피연산자인 경우 StringBuilder 객체 sb 에 저장, +, -, *, / 의 경우 연산자의 우선 순위를 스택의 상단의 연산자와 해당 연산자를 비교하는 priority 함수를 통해 스택에 저장할 지, 스택의 모든 연산자를 꺼내 sb 에 저장할 지 결정한다. 이.. 2022. 7. 23.
[백준] 9935 문자열 폭발 - Data Structure / Java • 문제 링크 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net • 풀이 과정 입력받은 문자열이 폭발 문자열과 일치할 경우 해당 문자열을 제거하기 위해 Stack 자료구조를 활용해 풀이한다. 입력받은 문자열을 하나씩 스택에 저장하는 중, 스택의 크기가 폭발 문자열의 길이보다 크거나 같을 경우, 스택에 저장된 문자열 중 폭발 문자열의 존재 여부를 나타낼 flag 변수를 생성해 탐색한다. 현재 문자열의 길이에서 폭발 문자열의 길이를 뺀 수를 시작 인덱스로써, 폭발 문자열의 길이만큼 탐색해 일치 여부를.. 2022. 7. 22.
[백준] 11053 가장 긴 증가하는 부분 수열 - Dynamic Programming / Java • 문제 링크 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net • 풀이 과정 입력받은 수열을 arr 배열을 생성해 저장하고, 각각의 부분 수열의 길이를 메모이제이션할 dp 배열을 생성, 2중 for문으로 배열의 현재 인덱스와 이전 인덱스들을 비교하며 탐색을 진행한다. 기본적으로 수열의 최소 길이인 1로 dp 배열의 인덱스를 초기화한다. 증가하는 부분 수열이므로 비교하고자 하는 arr 배열 값보다 현재 값이 크고, dp 배열에 현재까지.. 2022. 7. 21.
[백준] 1932 정수 삼각형 - Dynamic Programming / Java • 문제 링크 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net • 풀이 과정 정수 삼각형을 일종의 트리 구조로써, 경로의 합의 최댓값을 구하기 위해 위층이 아닌 아래층부터 탐색하여 풀이한다. 맨 하단의 두 자식 노드 중 큰 값을 부모 노드에 더해 부모 노드를 갱신하는 방식으로 루트 노드까지 탐색해나간다. 문제에 제시된 입력을 위의 방법으로 접근하여 최종적으로 변화된 정수 삼각형의 값을 나타내면 아래와 같다. 30 23 21 20 13 10 7 12 10 10 4 5 2 6 5 이를 i는 감소하고 j 는 증가하는 2중 for 문 안에 arr[i - 1][j] += Math.max(a.. 2022. 7. 20.
[백준] 11052 카드 구매하기 - Dynamic Programming / Java • 문제 링크 11052번: 카드 구매하기 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net • 풀이 과정 n 이 주어지고 0 ~ n 의 범위의 각각의 정수의 합이 n 되는 조합의 규칙성을 찾는 문제. 예시로 n = 4 일 때 4 = 0 + 4 = 1 + 3 = 2 + 2 = 3 + 1 의 규칙이 존재하고 이를 더 세분화하면 4 = (4 - 4) + 4 = (4 - 3) + 3 = (4 - 2) + 2 = (4 - 1) + 1 로 나타낼 수 있다. 이때 괄호 안의 첫 항과 둘째 항의 값과 대응되는 항을 각각 i, j 로 치환 시 2중 for 문으로.. 2022. 7. 19.
[백준] 9095 1, 2, 3 더하기 - Dynamic Programming / Java • 문제 링크 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net • 풀이 과정 규칙성을 발견하기 위해 n이 1 ~ 4 일 때 1, 2, 3 의 합으로 나타내는 경우의 수을 표현하면 아래와 같다. n = 1 (1) n = 2 (1 + 1) (2) n = 3 (1 + 1 + 1) (1 + 2) (2 + 1) (3) n = 4 (1 + 1 + 1 + 1) (1 + 1 + 2) (1 + 2 + 1) (2 + 1 + 1) (2 + 2) (1 + 3) (3 + 1) 위와 같이 n = 4 일 때 모든 경우의 수는 1 ~ 3 의 모든 경우의 수를 포함한다. 이에 대한 점화식을 dp 배열을 활용한 코드에 적용하면 dp[i] .. 2022. 7. 18.