stack 6

[Java] 백준 22866번 : 탑 보기

문제 https://www.acmicpc.net/problem/22866 22866번: 탑 보기 3번째 건물에서 볼 수 있는 건물은 2, 4, 8번째 건물로 총 3개를 볼 수 있다. 그 중 3번째 건물과 가장 가까운 건물은 2, 4번째 있는 건물로 이 중 번호가 작은 번호인 2가 답이 된다. www.acmicpc.net 풀이과정 stack을 활용하여 왼->오, 오->왼으로 각각 순회하면서 자신의 왼쪽 혹은 오른쪽으로 옆면을 볼 수 있는 건물을 찾는다.stack에는 데이터가 내림차순으로 남게 하여, 자신보다 큰 건물의 수는 stack의 크기와 동일하게 하면 된다.따라서, 자신보다 작은 값은 모두 pop시키고, 남은 stack크기를 자신이 볼 수 있는 건물 수에 더해주면 된다. 이때, stack의 top에 ..

[Java] 백준 1863번 : 스카이라인 쉬운거

문제 https://www.acmicpc.net/problem/1863 1863번: 스카이라인 쉬운거 첫째 줄에 n이 주어진다. (1 ≤ n ≤ 50,000) 다음 n개의 줄에는 왼쪽부터 스카이라인을 보아 갈 때 스카이라인의 고도가 바뀌는 지점의 좌표 x와 y가 주어진다. (1 ≤ x ≤ 1,000,000. 0 ≤ y ≤ 500,000) 첫 www.acmicpc.net 풀이 과정 큰 건물에는 가려질 수 있지만, 작은 건물에는 가려질 수 없다. 따라서 stack을 이용해서 자신보다 큰 값은 pop으로 꺼내면서 건물의 개수를 카운트했다. 그리고 Stack에 값을 넣을 때는 stack의 top에 이미 같은 값이 있다면, 같은 건물일 가능성이 있으므로 넘어갔다. 마지막으로 stack에 오름차순으로 모두 다른 값..

[Java] 백준 1406번 : 에디터*

1. 문제 https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 2. 풀이 과정 [방법1] LinkedList + Iterator 처음에는 LinkedList를 사용해서 풀었다. LinkedList를 선택한 이유는 리스트 중간에 값을 삽입하고 삭제하는 과정이 빠르기 때문이다. 하지만 시간초과가 났다. 기존 코드에서는 커서가 있는 값을 index를 써서 해당 위치에 있는 값을 찾았기 때문에, LinkedList는 맨 처음 요소부터 index번째에 있는 ..

[Java] 백준 2374번 : 같은 수로 만들기

1. 문제 https://www.acmicpc.net/problem/2374 2374번: 같은 수로 만들기 n(1 ≤ n ≤ 1,000)개의 자연수 A[1], A[2], A[3], …, A[n]이 있다. 이 자연수에 Add(i)라는 연산을 하면, A[i]가 1만큼 증가한다. 이때, A[i]만 증가하는 것이 아니고, A[i]의 좌우로 인접한 같은 수의 그룹이 한 www.acmicpc.net 2. 풀이과정 문제 유형에 stack이 써있는 걸 보고 풀었다. 안 보고 풀었으면 생각해내기 어려웠을 것 같았다. 입력을 처음부터 끝까지 받으면서, 구간마다 최소값을 찾아서 큰 값에서 뺀 값을 결과에 더해주었다. 마지막에 최대값에서 stack의 top에 있는 값을 빼주는 이유는 값이 감소하면서 끝날 경우 앞서 나온 최댓..

[Java] 백준 9935번 : 문자열 폭발

1. 문제 https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 2. 풀이 과정 StringBuilder객체인 sb에 결과 문자열을 담았다. 실행 과정은 아래 2단계로 정리할 수 있다. 1) (sb길이 >= 폭발시킬 문자열 길이) & (방금 읽은 문자 == 폭발시킬 문자열의 마지막 문자)이면, 검사 시작 2) sb의 뒤에서 폭발시킬 문자열 길이만큼 잘라서 비교 => 같으면 자르기 폭발시킬 문자열 내에 반복되는 구간이 있다면 KMP를 쓰..

스택(Stack) & 큐(Queue)

1. 스택(Stack) - LIFO(Last-In, First-Out) 구조 : 먼저 들어간 것이 나중에 나온다. - 스택 관련 연산 1) push : 데이터 추가 2) pop : 데이터 꺼내기 - 소스코드 1) 배열로 Stack 구현 #include #include typedef struct ArrStack { int arr[100]; int top; }Stack; void init(Stack* node); int is_Empty(Stack* node); void push(Stack* node, int data); int pop(Stack* node); int main() { Stack my_stack; int n; init(&my_stack); for (int i = 0; i < 3; i++) { s..

CS/자료구조 2021.07.10