성장일기

내가 보려고 정리하는 공부기록

백준 56

[백준] 9935: 문자열 폭발 (Stack) - JAVA

class 4https://www.acmicpc.net/problem/9935    # 문제상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다.폭발은 다음과 같은 과정으로 진행된다.문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다.새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다.폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다.상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다.폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다.  # ..

[백준] 14500: 테트로미노 (DFS, dydx) - JAVA

class3++ https://www.acmicpc.net/problem/14500   # 문제 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다.정사각형은 서로 겹치면 안 된다.도형은 모두 연결되어 있어야 한다.정사각형의 변끼리 연결되어 있어야 한다. 즉, 꼭짓점과 꼭짓점만 맞닿아 있으면 안 된다.정사각형 4개를 이어 붙인 폴리오미노는 테트로미노라고 하며, 다음과 같은 5가지가 있다.아름이는 크기가 N×M인 종이 위에 테트로미노 하나를 놓으려고 한다. 종이는 1×1 크기의 칸으로 나누어져 있으며, 각각의 칸에는 정수가 하나 쓰여 있다.테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램을 작성하시오.테..

[백준] 7662: 이중 우선순위 큐 (PriorityQueue) - JAVA

class 3++ https://www.acmicpc.net/problem/7662   # 문제이중 우선순위 큐(dual priority queue)는 전형적인 우선순위 큐처럼 데이터를 삽입, 삭제할 수 있는 자료 구조이다. 전형적인 큐와의 차이점은 데이터를 삭제할 때 연산(operation) 명령에 따라 우선순위가 가장 높은 데이터 또는 가장 낮은 데이터 중 하나를 삭제하는 점이다. 이중 우선순위 큐를 위해선 두 가지 연산이 사용되는데, 하나는 데이터를 삽입하는 연산이고 다른 하나는 데이터를 삭제하는 연산이다. 데이터를 삭제하는 연산은 또 두 가지로 구분되는데 하나는 우선순위가 가장 높은 것을 삭제하기 위한 것이고 다른 하나는 우선순위가 가장 낮은 것을 삭제하기 위한 것이다.정수만 저장하는 이중 우선순..

[백준] 1697: 숨바꼭질 (BFS) - JAVA

Class 3+ 에센셜https://www.acmicpc.net/problem/1697  # 문제수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 1초 후에 2*X의 위치로 이동하게 된다.수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. # 예제입력 :  첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.5 17 출력4 # 필요..

[백준] 2193: 이친수 (DP) - JAVA

알고리즘 분류 - dphttps://www.acmicpc.net/problem/2193   # 문제0과 1로만 이루어진 수를 이진수라 한다. 이러한 이진수 중 특별한 성질을 갖는 것들이 있는데, 이들을 이친수(pinary number)라 한다. 이친수는 다음의 성질을 만족한다.이친수는 0으로 시작하지 않는다.이친수에서는 1이 두 번 연속으로 나타나지 않는다. 즉, 11을 부분 문자열로 갖지 않는다.예를 들면 1, 10, 100, 101, 1000, 1001 등이 이친수가 된다. 하지만 0010101이나 101101은 각각 1, 2번 규칙에 위배되므로 이친수가 아니다.N(1 ≤ N ≤ 90)이 주어졌을 때, N자리 이친수의 개수를 구하는 프로그램을 작성하시오.  # 예제입력3 출력2 # 필요개념많이 풀어봤..

[백준] 11727: 2×n 타일링 2 (DP) - JAVA

알고리즘 분류 - dphttps://www.acmicpc.net/problem/11727   # 문제 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.아래 그림은 2×17 직사각형을 채운 한가지 예이다. # 예제입력 :  첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)12 출력 :  첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.2731 # 필요개념어떻게 점화식을 세울지 고민하다가 한 개씩 그려보았다. 모양을 하나하나 그려볼까 하다가 귀찮아서 위 사진처럼 그렸는데, 덕분에 점화식을 세우기 쉬워졌다.n = 3인 경우, n = 1인 타일 뒤에 두 칸을 더 이용할 수 있고 n = 2인 타일 뒤에는 2x1 타..

[백준] 1806: 부분합 (누적합, 투포인터) - JAVA

알고리즘 분류 - 두 포인터https://www.acmicpc.net/problem/1806   # 문제10,000 이하의 자연수로 이루어진 길이 N짜리 수열이 주어진다. 이 수열에서 연속된 수들의 부분합 중에 그 합이 S 이상이 되는 것 중, 가장 짧은 것의 길이를 구하는 프로그램을 작성하시오. # 예제입력 :  첫째 줄에 N (10 ≤ N 10 155 1 3 5 10 7 4 9 2 8  출력 :  첫째 줄에 구하고자 하는 최소의 길이를 출력한다. 만일 그러한 합을 만드는 것이 불가능하다면 0을 출력하면 된다.2 # 필요개념이 문제에서 신경써야 할 조건은 두 가지였다.합이 S 이상이어야 한다수열의 길이가 가장 짧아야 한다그래서 나는 누적합을 구하기로 했다. 만약 여지껏 수열의 합이 S보다 작다면, 계속..

[백준] 20922: 겹치는 건 싫어 (투 포인터) - JAVA

알고리즘 스터디 (투포인터)https://www.acmicpc.net/problem/20922  # 문제홍대병에 걸린 도현이는 겹치는 것을 매우 싫어한다. 특히 수열에서 같은 원소가 여러 개 들어 있는 수열을 싫어한다. 도현이를 위해 같은 원소가 K$K$개 이하로 들어 있는 최장 연속 부분 수열의 길이를 구하려고 한다. 100000$100\,000$ 이하의 양의 정수로 이루어진 길이가 N$N$인 수열이 주어진다.  이 수열에서 같은 정수를 K$K$개 이하로 포함한 최장 연속 부분 수열의 길이를 구하는 프로그램을 작성해보자. # 예제입력 : 첫째 줄에 정수 N$N$ (1≤N≤200000$1 \le N \le 200\,000$)과 K$K$ (1≤K≤100$1 \le K \le 100$)가 주어진다.둘째 줄에..

[백준] 1309: 동물원 (DP) - JAVA

https://www.acmicpc.net/problem/1309  # 문제어떤 동물원에 가로로 두칸 세로로 N칸인 아래와 같은 우리가 있다.이 동물원에는 사자들이 살고 있는데 사자들을 우리에 가둘 때, 가로로도 세로로도 붙어 있게 배치할 수는 없다. 이 동물원 조련사는 사자들의 배치 문제 때문에 골머리를 앓고 있다.동물원 조련사의 머리가 아프지 않도록 우리가 2*N 배열에 사자를 배치하는 경우의 수가 몇 가지인지를 알아내는 프로그램을 작성해 주도록 하자. 사자를 한 마리도 배치하지 않는 경우도 하나의 경우의 수로 친다고 가정한다. # 예제입력 :  첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.4 출력 :  첫째 줄에 사자를 배치하는 경우의 수를 9901로 나눈 나머지를 출력하여라.41 ..

[백준] 1495: 기타리스트 (DP) - JAVA

https://www.acmicpc.net/problem/1495  # 문제Day Of Mourning의 기타리스트 강토는 다가오는 공연에서 연주할 N개의 곡을 연주하고 있다. 지금까지 공연과는 다른 공연을 보여주기 위해서 이번 공연에서는 매번 곡이 시작하기 전에 볼륨을 바꾸고 연주하려고 한다.먼저, 공연이 시작하기 전에 각각의 곡이 시작하기 전에 바꿀 수 있는 볼륨의 리스트를 만들었다. 이 리스트를 V라고 했을 때, V[i]는 i번째 곡을 연주하기 전에 바꿀 수 있는 볼륨을 의미한다. 항상 리스트에 적힌 차이로만 볼륨을 바꿀 수 있다. 즉, 현재 볼륨이 P이고 지금 i번째 곡을 연주하기 전이라면, i번 곡은 P+V[i]나 P-V[i] 로 연주해야 한다. 하지만, 0보다 작은 값으로 볼륨을 바꾸거나, M..

728x90