본문 바로가기

Problem Solving1215

[백준] 7785 회사에 있는 사람 - Data Structure / Java • 문제 링크 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net • 풀이 과정 문제에 제시된 조건 중 동명이인이 없음, 즉 중복을 허용하지 않으므로 Set 자료구조를 활용한다. 또는 Map 자료구조의 key 값으로 구현 가능하며 이때 Set 과 Map 은 List 대비 속도면에서 우위를 가진다. 입력받은 출입 기록 중 state 변수에 저장된 문자열이 "enter" 일때 Set 에 name 값을 저장하고 그 외의 경우는 state = "leave" 로써 Set 에 입력된 .. 2022. 7. 25.
[백준] 11279 최대 힙 - Data Structure / Java • 문제 링크 11279번: 최대 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 www.acmicpc.net • 풀이 과정 [백준] 1927 최소 힙 - Data Structure / Java • 문제 링크 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 graycode.tistory.com 위 문제와 전체적인 구조는 유사하나 해당 문제에선 최소값 대신 최대값을 우선 순위로 둔다. Pr.. 2022. 7. 24.
[백준] 1927 최소 힙 - Data Structure / Java • 문제 링크 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net • 풀이 과정 문제에 제시된 조건 중 배열의 가장 작은 값을 선택하여 출력하기 위해 PriorityQueue 자료구조를 활용한다. Integer 우선 순위 큐는 기본 값으로 오름차순, 즉 수가 작을수록 우선 순위가 높기에 매개변수를 변경하지 않는다. 입력 받은 x 가 0 이 아닐 경우 큐에 x 를 삽입하고, x 가 0 일 경우 큐의 원소 존재 여부에 따라 0 을 출력할 지, 우선 순위에 의해 가장 작은 수를 꺼내어 출력할 지 결.. 2022. 7. 24.
[백준] 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.