본문 바로가기

BOJ89

백준 알고리즘 9461 (파도반 수열) - C++, Python [문제] 백준 알고리즘 9461 (파도반 수열) > https://www.acmicpc.net/problem/9461 9461번: 파도반 수열 문제 오른쪽 그림과 같이 삼각형이 나선 모양으로 놓여져 있다. 첫 삼각형은 정삼각형으로 변의 길이는 1이다. 그 다음에는 다음과 같은 과정으로 정삼각형을 계속 추가한다. 나선에서 가장 긴 변의 길이를 k라 했을 때, 그 변에 길이가 k인 정삼각형을 추가한다. 파도반 수열 P(N)은 나선에 있는 정삼각형의 변의 길이이다. P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다. N이 주어졌을 때, P(N)을 구하 www.acmicpc.net 나선에서 가장 긴 변의 길이를 갖는 정삼각형을 계속 추가하는 수열 문제이다. DP.. 2019. 11. 4.
백준 알고리즘 1904 (01타일) - C++, Python [문제] 백준 알고리즘 1904 (01타일) > https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이의 공부를 방해하기 위해 0이 쓰여진 낱장의 타일들을 붙여서 한 쌍으로 이루어진 00 타일들을 만들었다. 결국 현재 1 하나만으로 이루어진 타일 또는 0타일을 두 개 붙인 한 쌍의 00타일들만이 남게 되었다. 그러므로 지원이는 타일로 더 이상 크기가 N인 모든 2진 수 www.acmicpc.net 2진 수열에서, 0을 하나만 못 쓰고 0을 짝수 개로 쓸 수 있을 때, n의 2진 수열은.. 2019. 11. 3.
백준 알고리즘 2748 (피보나치 수 2) - C++, Python [문제] 백준 알고리즘 2748 (피보나치 수 2) > https://www.acmicpc.net/problem/2748 2748번: 피보나치 수 2 문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 www.acmicpc.net 피보나치 문제, DP문제이다. N이 주어지고, N번째 피보나치 수를 출력하는.. 2019. 10. 29.
백준 알고리즘 1003 (피보나치 함수) - C++, Python [문제] 백준 알고리즘 1003 (피보나치 함수) - C++, Python > https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 0이 호출되는 횟수와 1이 호출되는 횟수를 공백으로 구분해서 출력해야한다. 피보나치 함수를 동적계획법(=DP, 다이나믹 프로그래밍)으로 작성하는 문제이다. 메모이제이션(Memoization)을 활용하는데, 이는 동일한 계산을 반복할 때 이전 값을 메모리에 저장하여 반복 수행을 제거하여 실행 속도를 빠르게 하는 기술이고, 동적계획법의 핵심이다. [문제 해결] 1. 메모이제이션을 활용할 dp[41]을 생성, 테스트 케이.. 2019. 10. 27.
백준 알고리즘 10989 (수 정렬하기 3) - C++, Python [문제] 백준 알고리즘 10989 (수 정렬하기 3) - C++, Python > https://acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 수의 범위가 작다면, 카운팅 정렬을 사용하는 문제라고 나와있다. 말 그대로 수의 갯수를 카운팅 후 출력하는 방식이다. 입력 값을 카운트 배열의 idx로써 ++해주는 개념이다. 시간 복잡도는 O(n+k)이고, 양의 정수일 때와 가장 큰 정수 k를 알 때 사용! [C++] #include #include using namespace std; c.. 2019. 10. 21.
백준 알고리즘 2751 (수 정렬하기 2) - C++, Python [문제] 백준 알고리즘 2751 (수 정렬하기 2) - C++, Python > https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 수 정렬하기 1(2750)과 같은 문제이지만, 입력 N의 개수가 훨씬 많다. > https://wlstyql.tistory.com/109 백준 알고리즘 2750(수 정렬하기) - C++, Python [문제] 백준 알고리즘 2750(수 정렬하기) > https://www.acmicpc.net/problem.. 2019. 10. 18.
백준 알고리즘 2750 (수 정렬하기) - C++, Python [문제] 백준 알고리즘 2750 (수 정렬하기) > https://www.acmicpc.net/problem/2750 2750번: 수 정렬하기 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net 삽입 정렬이나 거품 정렬을 구현하는 문제이다. (시간 복잡도 O(N^2)) 삽입 정렬(insert sort)은 작은 것을 최대한 앞쪽으로 삽입하는 방식이다. (Bold는 값 비교 후 왼쪽>오른쪽 경우 교체) idx = 0, 5 2 3 4 1 -> 2 5 3 4 1 idx = 1, 2 5 3 4 1 -> 2 3 5 4 1 -> 2 3 5 4 1 idx .. 2019. 10. 16.
백준 알고리즘 1956 (운동) - C++, Python [문제] 백준 알고리즘 1956 (운동) > https://www.acmicpc.net/problem/1956 1956번: 운동 첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 2019. 10. 16.
백준 알고리즘 2206 (벽 부수고 이동하기) - C++, Python [문제] 백준 알고리즘 2206 (벽 부수고 이동하기) > https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다. 만약에 이동하는 도중에 한 개의 벽을 부수고 이동하는 것이 좀 더 경로가 짧아진다면, 벽을 한 개 까지 부수고 이동 www.acmicpc.net N x M 미로 탐색(2178번)처럼 최단 거리 찾는 문제인데, 벽.. 2019. 10. 16.
728x90