BOJ
-
BOJ) 계단 수 (1562 번)알고리즘/백준 2021. 3. 7. 17:19
계단 수 1562번: 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 45656, 1210123 과 같이 각 자릿 수의 차이가 1씩 나는 수를 계단 수라고 한다. 자릿 수를 의미하는 n이 주어질 때, 이러한 계단수가 몇 개 존재하는지 구하는 문제다. 이 때, 모든 계단 수는 0으로 시작하지 않는다. DP와 비트 마스크를 활용해서 푸는 문제로, 각 자릿수, 0 ~9의 수, 비트마스크를 저장할 3차원 정수형 배열 DP를 이용해서 풀었다. 우선, n = 1인 경우, 0 ~ 9는 각각 자신 수 하나를 가진다. 이를 비트마스크로 표현해주면서, n을 증가시켰다. 0인 경우에는 0으로 시작할 수 없기 때문에, 0다음에 올 수 있는 수인 1만 dp에 추가시켜..
-
BOJ) 수들의 합 2 (2003 번)알고리즘/백준 2021. 2. 18. 11:48
수들의 합 2 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net N개의 수열에서 i ~ j 번 째의 값들의 합이 M이 되는 경우를 구하는 문제다. N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000) 의 조건이 주어진다. 투포인터는 슬라이딩 윈도우와 유사하지만 다른 점은 바로 탐색 구간의 길이가 정해져있지 않다는 것이다. 투포인터를 활용해서 푸는 문제인데, 익숙하지 않아서 기록에 남겨둔다. 우선, 시작점 탐색을 도와줄 left와 끝점 탐색을 도와줄 ..
-
BOJ) 가르침 (1062 번)알고리즘/백준 2021. 2. 18. 11:40
가르침 1062번: 가르침 첫째 줄에 단어의 개수 N과 K가 주어진다. N은 50보다 작거나 같은 자연수이고, K는 26보다 작거나 같은 자연수 또는 0이다. 둘째 줄부터 N개의 줄에 남극 언어의 단어가 주어진다. 단어는 영어 소문 www.acmicpc.net 모든 단어는 "anta"로 시작되고, "tica"로 끝난다. 남극언어에 단어는 N개 밖에 없다. 어떤 K개의 글자를 가르쳐야 학생들이 읽을 수 있는 단어의 개수가 최대가 되는지 구하는 문제다. 단어는 모두 소문자로 주어지고, 1
-
BOJ) 생물학자 (3116 번)알고리즘/백준 2021. 1. 21. 19:12
생물학자 3116번: 생물학자 첫째 줄에 박테리아의 수 N(1 ≤ N ≤ 5,000)이 주어진다.다음 N개의 줄에는 세 개의 정수 X, Y, D (-1,000,000 ≤ X,Y ≤ 1,000,000), (1 ≤ D ≤ 8) 가 주어진다. X와 Y는 박테리아의 시작 좌표이며, D는 방향이 www.acmicpc.net 수학 문제라고 느껴졌다. 박테리아의 위치가 주어지고, 방향이 주어진다. 아래의 방향에 따라서, 매 초 일정하게 이동을 할 때, 박테리아 여러 마리가 같은 칸에 제일 많이 있을 때가 언제인지, 그리고 그 때 몇 마리가 같은 칸에 있었는지 구하는 문제였다. 또한, X값은 왼쪽에서 오른쪽으로 갈 수록 증가하며, Y값은 위로 갈수록 증가한다는 조건이 있다. 즉, 1번은 매초 X값이 -1씩, Y값이 +..
-
BOJ) 녹색 옷 입은 애가 젤다지? (4485 번)알고리즘/백준 2021. 1. 19. 00:33
녹색 옷 입은 애가 젤다지? 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net 다익스트라를 알고, 적절하게 이용할 줄 아는가?를 물어보는 문제였다. 좌측 상단에서 우측 하단으로 이동하면서 돈을 가장 적게 뺏겨야하는 문제다. 처음에는 dp로 간단하게 풀 수 있겠다고 생각하고 코드를 작성했지만, 불규칙적으로 왔다갔다하는 경우가 있어서 다익스트라를 추가해줬다. 출발 지점을 우선순위 큐에 담아두고, 상하좌우를 돌면서 돈을 가장 적게 뺏기는 경우들을 저장하면서 큐에 넣어주었다. 이동하면서, 가장 적게 ..
-
BOJ) 평범한 배낭알고리즘/백준 2020. 8. 28. 16:49
평범한 배낭 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net 풀이 짐의 개수 n, 버틸 수 있는 무게 k, n개 만큼의 짐의 정보 (무게 w, 가치 v)가 주어진다. 최대한 k에 맞추어, 최대 가치(max v)를 찾는 문제다. dp의 크기를 최대 가치 k까지 입력받을 수 있도록, k+1만큼 생성해준다. 짐의 정보를 순회하면서 w와 v를 가져온다. 그리고 k 부터 w까지 무게를 줄여나가면서, 현재 무게 ( i )의 dp값(가치) 과 dp[i-w] ..
-
BOJ) 숫자고르기알고리즘/백준 2020. 8. 28. 16:42
숫자고르기 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절� www.acmicpc.net 풀이 어제 풀었던 사이클 문제와 비슷한 것 같은데, 이 문제는 BFS로 풀었다. (사실 어제 푼 방법이 기억에 남지 않았다.) 1~N번까지 순회하면서 해당 인덱스가 가진 값을 타고 가는 검사를 통해, 시작한 인덱스 i번이 나오면 답에 추가를 해줬다. 위의 값을 가지고 있다면, 1번~ 7번까지 순회를 하면서 답을 찾는 것이다. 1번 index는 3이라는 값을 가지고 있다. 이 3이라는 값을 LinkedList에 넣고, 탐색을 한다. 3번 ..
-
BOJ) 한 줄로 서기알고리즘/백준 2020. 8. 28. 16:33
한 줄로 서기 1138번: 한 줄로 서기 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다 � www.acmicpc.net 풀이 고민하는 시간에 비해 코드가 짧은 문제였다. 처음에는 우선순위 큐에 담아서, 적절한 sorting을 통해 출력하려고 했다. 하지만, 메모리 초과가 떴고 다시 고민했다. 주어진 정보들을 우선적으로 배열에 담고, 마지막부터(키가 제일 큰 사람부터) 자신의 왼쪽에 몇명이 있는지를 인덱스로 그 사람을 추가하면 된다는 것을 알았다. 문제의 예시를 통해 설명하면 더 쉽게 이해가 될 것 같다. 1 2 3 4 2 1 1 0 1~4의 값을 담은 배..