본문 바로가기
반응형

알고리즘 PS113

[백준] 2164번 - 카드2 (Java)(Python) https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net 문제 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 한 장 남을 때까지 반복하게 된다. 우선, 제일 위에 있는 카드를 바닥에 버린다. 그 다음, 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 예를 들어 N=4인 경우를 생각해 보자... 2023. 1. 3.
[백준] 17298번 - 오큰수 (Java)(○) https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 1. 수열이 A1 ~ An 만큼 있다. 각 수열의 오큰수를 구해야 한다. 2. 오큰수란? Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수이다. 없으면 -1이다. 3. 오큰수 구하기 로직 - Ai가 가장 오른쪽 수이면 -1이다. - Ai 보다 큰 수가 없으면 -1이다. - Ai의 오른쪽 수를 순차적으로 비교해서 더 크면 스택에 push 한다. - 스택이 빌 때까지 pop을 하고 .. 2023. 1. 3.
[백준] 1874번 - 스택 수열 (Java)(△) https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 1. 1~n 까지의 자연수를 스택에 집어 넣는다. 2. 그 n까지의 자연수들을 스택에 넣었다 뺐다 하면서 입력값으로 주어진 수열을 만들 수 있는지 확인한다. 3. 오름차순으로 증가시키면서 집어 넣는데 push 때는 '+', pop은 '-'을 출력한다. 불가능하면 'NO'을 출력한다. import java.io.Buf.. 2023. 1. 2.
[백준] 11003번 - 최솟값 찾기 (Java)(△) https://www.acmicpc.net/problem/11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net N : 수의 갯수 : 1 ~ 5,000,000 L : 수의 범위 : 1 ~ 5,000,000 1. 특정 범위만큼 앞으로 이동하면서 그 범위 안에서 최솟값을 골라서 D에 저장해야 한다. 2. A[i-L+1] ~ A[i]가 범위로 주어지고, 예제 1의 L=3이라고 할 때 A[-2] ~ A[0]의 최솟값 : 1 A[-1] ~ A[1]의 최솟값 : 1 A[0] ~ A[2].. 2022. 12. 30.
[백준] 12891번 - DNA 비밀번호 (Java)(○) https://www.acmicpc.net/problem/12891 12891번: DNA 비밀번호 평소에 문자열을 가지고 노는 것을 좋아하는 민호는 DNA 문자열을 알게 되었다. DNA 문자열은 모든 문자열에 등장하는 문자가 {‘A’, ‘C’, ‘G’, ‘T’} 인 문자열을 말한다. 예를 들어 “ACKA” www.acmicpc.net S : 문자열 길이 : 1 ~ 1,000,000 P : 비밀번호 길이 : 1 ~ 1,000,000 1. DNA 문자 배열에서 첫 요소부터 i ~ +P 만큼 인덱스를 넘겨줘서 패스워드로 유효한지 체크 더보기 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokeniz.. 2022. 12. 29.
[백준] 1253번 - 좋다 (Java)(○) https://www.acmicpc.net/problem/1253 1253번: 좋다 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) www.acmicpc.net N : 수의 개수 : 1 ~ 2,000 Ai : 정수 : 1 ~ 1,000,000,000 1. N개의 수 중 2개를 골라서 그 수의 합이 다른 어떤 수와 같다면 그 수를 GOOD이라고 한다. 2. 투 포인터를 이용해서 A[i] 값을 순차적으로 M으로 대입해서 투포인터 알고리즘으로 A[s] + A[e] == M 인 경우의 수를 찾는다. import java.io.BufferedReader; import java.io.Input.. 2022. 12. 28.
[백준] 1940번 - 주몽(Java)(○) https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net N : 재료의 수 : 1 ~ 15,000 M : 갑옷 필요한 재료의 수 : 1 ~ 10,000,000 1. 재료 번호 중 2개의 합이 M이 되면 갑옷이 완성된다. 2. DFS로 풀기에는 N이 너무 크다. 3. 투 포인터로 sIdx는 앞에서, eIdx는 뒤에서부터 진행하면서 합산한다. import java.io.BufferedReader; import java.io.Inpu.. 2022. 12. 28.
[백준] 11986번 - 나머지 합(Java)(△) https://www.acmicpc.net/problem/10986 10986번: 나머지 합 수 N개 A1, A2, ..., AN이 주어진다. 이때, 연속된 부분 구간의 합이 M으로 나누어 떨어지는 구간의 개수를 구하는 프로그램을 작성하시오. 즉, Ai + ... + Aj (i ≤ j) 의 합이 M으로 나누어 떨어지는 (i, j) www.acmicpc.net 1. 먼저 구간 합 배열 D[N]을 구성한다. 2. 구간 합 배열을 순회하면서 M으로 나눠지는 요소를 찾아서 카운트 한다. 3. D배열 첫 인자부터 순회를 하면서 자기보다 작은 구간 합 배열을 뺐을 때 M으로 나눠지는 요소를 찾아서 카운트 한다. - D[i] - (D[0] ~ D[i-1]) 더보기 import java.io.BufferedReader.. 2022. 12. 28.
[백준] 11660번 - 구간 합 구하기5(△) https://www.acmicpc.net/problem/11660 11660번: 구간 합 구하기 5 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채워져 있는 수가 1행부터 차례대로 주어진다. 다음 M개의 줄에는 네 www.acmicpc.net 1. 구간합을 구하기 위해서 가로 기준으로 더해 나가는 합산 테이블 하나, 세로 기준으로 더해나간 합산 테이블 하나해서 총 2개를 준비한다. 2. 2차원 배열의 구간합 배열을 어떤 식으로 구성하느냐가 이 문제를 푸는 열쇠이다. * 점화식 D[i][j] = D[i][j-1] + D[i-1][j] - D[i-1][j-1] + A[i][j] 3. DP테이블(구.. 2022. 12. 26.
반응형