algorithm

https://www.acmicpc.net/problem/2879 2879번: 코딩은 예쁘게 첫째 줄에 줄의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 현재 줄에 있는 탭의 개수가 주어지며, 1번째 줄부터 순서대로 주어진다. 탭의 개수는 0보다 크거나 같고, 80보다 작거나 같은 정수 www.acmicpc.net 최소 횟수로 현재 탭 개수에서 맞춰야하는 탭 개수로 바꾸라는 그리디 알고리즘 문제이다. 그리디 알고리즘이라는게 특별한 알고리즘이 있는게 아니라 그냥 어떻게 하면 최적의 경로로 문제를 해결할까? 생각하고 구현하는 문제이다. 방법은 간단하다. 현재 위치에서 탭을 줄여야한다면, 양옆까지 확인해서 줄여야하는 탭은 같이 줄여준다. 대신 줄이는 횟수가 다를수 있으므로 줄여야하는 탭 중에서..
https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 문제를 읽었을 때는 ~압축한다 라고 나와있어서 좌표압축 문제로 착각할 수 있지만, 좀만 더 읽어보면 분할정복이라는 것이 보인다. 특정 공간이 0또는 1로만 이루어지면 그 공간 전체를 0 또는 1로 압축한다고 하고, 전체를 압축한 결과를 내라는 문제이다. 종이의 개수나 색종이 만들기 문제와 비슷하지만 괄호를 어느 부분에 넣어야되냐가 생각하기가 조금더 어렵기 때문에 실버1의 난이도로 배정..
https://www.acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제를 보자마자 오큰수하고 똑같은 문제라고 생각했다. 예전 포스팅에서 오큰수문제를 다뤘었는데 그때 deque를 사용하여 숫자를 하나씩 빠르게 비교할수 있다는 것을 배웠다. 만들 숫자를 stack에다가 하나씩 넣으면서, 넣어야될 숫자가 먼저 들어간 숫자보다 크면 원래 있던 숫자를 지우고 스택에 숫자를 추가했다. 당연히 들어가고 나서는 그 앞의 숫자들하고도 비교해주어야 하기 때문에 while을 이용하여 똑같은 과정을 반복했다. 마지막에 비교가 끝나고 한번도 비교를 안하게 되면 ..
https://www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 본인은 BFS를 이용해서 문제를 풀었다. 친구 관계 리스트를 만들어주고, 친구를 한번 건너 뛸때마다 (이전 친구 단계+1, 현재친구)를 튜플로 큐에 저장하였다. BFS탐색이 모두 끝나고는 처음 시작한 친구의 케빈 베이컨의 수를 구해서 리턴해주었다.나온 케빈 베이컨의 수 중에서 가장 작은 친구를 출력해야하므로 마지막에 정렬까지 해주었다.. 당연하지만 ..
https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 분할정복 알고리즘으로 Z(2X2)모양이 나올때까지 좌표를 분할하여 Z가 되면 탐색을 하였다. 처음에는 좌표를 2차원 배열로 만들어서 직접 분할하였다. 숫자를 다 쓰면서 해당 좌표가 (r,c)이면 프로그램을 종료하게 했지만 시간초과가 떴다. 그래서 좌표를 분할할때 분할한 범위 안에 (r,c)가 없으면 탐색을 아에 하지 않도록 return을 추가해주었다. 하지만 그래도 시간초과가 떠서...다..
https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 정사각형안에 1만 존재하거나, 0만 존재하면 색종이를 카운트 하는 문제이다. 알고리즘은 분할정복이라고 나와있긴하지만, 문제를 분할한 다음에 다시 합치는 과정이 없기 때문에 그냥 재귀라고 생각해도 충분히 풀수 있는 문제이다. 분할정복을 더 알아보고 싶다면 파이썬의 정렬모듈로 사용되고 있는 병합정렬을 공부해보면 좋다. 풀이는 처음 시작점의 숫자를 저장해두고 탐색하다가 처음 ..
요플레에
'algorithm' 카테고리의 글 목록 (11 Page)