본문 바로가기

전체 글108

[BOJ] 백준 1697번: 숨바꼭질 www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 �� www.acmicpc.net 순간이동이 현재 좌표에 2배까지 가능하므로 최대 배열 크기를 20만으로 잡고, dp[i]는 i 좌표로 이동하는데 걸리는 최소 시간이라고 보면 아래 코드와 같이 해결 가능합니다. 먼저 n보다 작은 좌표 위치는 -1 로 이동할 수밖에 없으므로 최소 시간은 n - i로 초기화해주고 과정 1. 반복적으로 +1 이동하는 경우 과정 2. 2배 이동하는 경우 두 가지 경우에 대하여 최솟값을 .. 2020. 9. 7.
[BOJ] 백준 14500번: 테트로미노, 브루트포스, 필터링 www.acmicpc.net/problem/14500 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변� www.acmicpc.net 주어진 블록모양에 대하여 회전, 반전 한 상대적인 좌표 위치를 필터로 저장하여 (아래 첨부했으니 고통을 덜어가세요.) 모든 좌표에 대하여 총 19가지의 필터를 씌워 필터내의 숫자의 합 중 제일 큰것을 찾아가면 됩니다. int filter[19][2][4] = { {{0,0,1,1},{0,1,0,1}}, {{0,0,0,0},{0,1,2,3}}, {{0,1,2,3},{0,0,0,0}}, {{0,1,2,2},{0,.. 2020. 9. 7.
[BOJ] 백준 1676번: 팩토리얼 0의 개수 www.acmicpc.net/problem/1676 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net N! 은 1x2x3x4 x... N으로 곱하는 과정에서 10의 배수가 생길 때마다 0이 생깁니다. 다시 해석해보면 N!을 곱하는 전체 과정을 소인수 분해하여 2와 5의 개수를 찾으면 맨뒤에 오는 연속된 0의 개수를 알 수 있습니다. 좀 더 간단화시키면 2의 배수는 5의 배수보다 항상 많으므로 N! 를 소인수 분해하여 5의 개수를 찾으면 됩니다. 5, 10, 15, 20, .... 은 5를 1개 가지고 있습니다. 25, 50, 75, .... 는 5를 2개 가지고 있습니다. 125, 250, 375.. 2020. 9. 7.
[BOJ] 백준 11726번: 2xn 타일링, 타일링 문제 www.acmicpc.net/submit/11726/21279055 로그인 www.acmicpc.net 타일링 문제는 동적 계획법을 접하면 입문 문제로 간단한 점화식으로 풀리는 문제입니다. 타일은 1x2 크기와 이것을 회전한 2x1 타일이 있으며, 길이 n이 주어질 때 2 x n 직사각형을 채울 수 있는 경우의 수를 찾아야 합니다. 아래는 n이 각각 1, 2, 3 인 경우를 보여줍니다. 각 경우에서 보면 빨간 블록은 이전 단계들의 블록 모양이며 파란색은 현재 단계에 새로 추가된 블록입니다. 여기까지만 보면 점화식을 d[i] = d[i-1] + d[i-2]로 유추해볼 수 있습니다. 좀더 정확하게 알아보기 위해 n이 4인 경우를 보면 n이 2인 경우 + n이 3인 경우의 합이 됩니다. 점화식은 피보나치 형태.. 2020. 9. 7.
[BOJ] 백준 5525번: IOIOI www.acmicpc.net/problem/5525 5525번: IOIOI 첫째 줄에 N이 주어진다. 둘째 줄에는 S의 길이 M이 주어지며, 셋째 줄에 S가 주어진다. (1 ≤ N ≤ 1,000,000, 2N+1 ≤ M ≤ 1,000,000) www.acmicpc.net 문자열을 탐색하면서 I 문자가 최대 몇 번째 Pn의 마지막 I에 해당하는지를 찾으면 쉽게 풀수있습니다. 만약 IOIOIOI 에서 세 번째 I에 대하여 str[i-2]가 I고 str[i-1]가 O이므로 P[i] = P[i-2] + 1을 갖습니다. 예제로 주어진 OOIOIOIOIIOII 의 P[1..N] = { 0, 0, 0, 0, 1, 0, 2, 0, 3, 0, 0, 1, 0} 처럼 구해집니다.이렇게 구한 P에서 길이 M보다 큰 값을 같은.. 2020. 9. 7.
c++ sort 함수 커스텀, 특정 조건 정렬, 우선순위 큐 정렬 기본적인 삽입 정렬 및 선택 정렬은 아래 링크를 참조해주세요 2020/10/21 - [알고리즘] - 삽입 정렬 (InsertionSort), 선택 정렬 (Selection Sort) 비교 및 c언어 구현 삽입 정렬 (InsertionSort), 선택 정렬 (Selection Sort) 비교 및 c언어 구현 삽입 정렬과 선택 정렬은 O(N^2)의 비효율적인 정렬 방법입니다. 효율적인 정렬을 구현하고 싶으시면 아래 링크를 봐주세요 2020/08/17 - [알고리즘] - 머지 소트, 머지 소트 트리 및 관련 백준 문제 �� seongjuk.tistory.com 알고리즘 문제를 해결하다보면 algorithm 헤더의 sort 함수를 유용하게 사용합니다. 이 sort 함수를 기존(Default) 정렬 방식이 아닌 .. 2020. 9. 7.
[BOJ] 백준 9012번: 괄호 www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 괄호 '(' 와 ')' 가 주어졌을 때 ( )는 올바른 문자열이며 올바른 문자열 S에 대하여 ( S ) 도 올바른 문자열이고, 올바른 문자열 T와 ST를 이루는 것도 올바른 문자열일 때, 주어진 괄호 문자열이 올바른 문자열인지 판별하는 문제입니다. 문자열을 탐색하는 중 현재 문자가 ( 라면, 이 후 가장 먼저오는 )와 짝을 이뤄야합니다. Last in First out 의 특징을 .. 2020. 9. 7.
[BOJ] 백준 1654번: 랜선 자르기, 이분 탐색 (Binary Search) www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 이 문제는 주어진 랜선 K개의 길이를 잘라 같은 길이의 N개를 만들 때 최대 랜선의 길이를 구하는 문제입니다. 랜선의 길이가 INT_MAX 값보다 작거나 같은 자연수 이므로 Naive한 방법으로는 시간초과가 발생하므로 해결할 수 없습니다. 자를 수 있는 랜선 길이의 범위 내에서 가능한 최대 길이를 구하는 문제로 정렬된 순열에서 특정 값을 찾는 문제로 해석할 수 있고 이는 이분 탐색을.. 2020. 9. 7.
[BOJ] 백준 1929번: 소수 구하기, 에라토스테네스의 체 어떤 수 X가 소수인지 판별하는 것은 O(lgX) 복잡도로 판별 가능합니다. 2~x^1/2 범위 내에서 하나라도 나누어 떨어지는 수가 있다면 그 수는 소수가 아니게 되죠. 범위 a~b 사이의 모든 수를 위의 아이디어로 판별한다고 해도 무리는 없습니다. 다만 우리는 좀 더 효율적으로 소수를 찾고 이를 활용할 수 있습니다. 특정 범위에 존재하는 수들 중 소수를 찾는 문제는 에라토스네테스의 체를 이용합니다. www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 1929번: 소수 구하기 문제는 N이 1.. 2020. 9. 7.