본문 바로가기

백준 알고리즘(BOJ)90

백준 알고리즘 2630 (색종이 만들기) - C++, Python [문제] 백준 알고리즘 2630 (색종이 만들기) > https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. 하얀색으로 칠해진 칸은 0, 파란색으로 칠해진 칸은 1로 주어지며, 각 숫자 사이에는 빈칸이 하나씩 있다. www.acmicpc.net '분할 정복(Divide and Conquer)' 문제이다. 분할 정복은 보통 재귀함수의 응용인데, 원하는 조건을 만족하지 않으면 문제를 분할(=작은 부문제)해서 해결하는 방식으로 다시 재귀시킨다. 4등분을 하면.. 2019. 11. 8.
백준 알고리즘 1149 (RGB거리) - C++, Python [문제] 백준 알고리즘 1149 (RGB거리) > https://www.acmicpc.net/problem/1149 1149번: RGB거리 RGB거리에 사는 사람들은 집을 빨강, 초록, 파랑중에 하나로 칠하려고 한다. 또한, 그들은 모든 이웃은 같은 색으로 칠할 수 없다는 규칙도 정했다. 집 i의 이웃은 집 i-1과 집 i+1이고, 첫 집과 마지막 집은 이웃이 아니다. 각 집을 빨강으로 칠할 때 드는 비용, 초록으로 칠할 때 드는 비용, 파랑으로 드는 비용이 주어질 때, 모든 집을 칠하는 비용의 최솟값을 구하는 프로그램을 작성하시오. www.acmicpc.net 집에 빨강, 초록, 파랑 중에 하나의 색을 칠하려는데, 이웃은 같은 색을 칠할 수 없다. 각 색깔에 대한 비용이 주어질 때, 모든 집을 칠하는 .. 2019. 11. 7.
백준 알고리즘 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.
728x90