1주차 [포인터]
·
📚알고리즘/C 언어
컴퓨터가 정보를 저장하는 방식 컴퓨터는 기본적으로 bit단위로 정보를 저장한다. (8bit = 1byte) int a = 1024를 컴퓨터가 저장한다고 가정하자. 1024는 2의 10제곱이므로 1바이트(8비트 = 256)의 크기를 넘어간다. 따라서 옆의 메모리까지 연속하여 사용하게 된다. 그림을 보면서 이해해보자. 컴퓨터에는 메모리가 있고, 메모리마다 주소값이 있다. 만약 a를 저장한다면, 메모리공간이 총 4칸이 필요하게 된다. 주소값은 컴퓨터의 메모리 안에서의 실제 위치를 가르킨다. 우리는 포인터를 이용해 직접 그 데이터에 접근할 수 가 있다. 1024처럼 여러 공간을 차지한다면, 여러 메모리공간의 주소값의 가장 첫번째 부분을 가르킨다. 예시에서의 주소값은 100이 된다. 포인터 변수 포인터 변수를 선..
[백준 2879번] 코딩은 예쁘게 (Python/파이썬)
·
📚알고리즘/백준
https://www.acmicpc.net/problem/2879 2879번: 코딩은 예쁘게 첫째 줄에 줄의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 현재 줄에 있는 탭의 개수가 주어지며, 1번째 줄부터 순서대로 주어진다. 탭의 개수는 0보다 크거나 같고, 80보다 작거나 같은 정수 www.acmicpc.net 최소 횟수로 현재 탭 개수에서 맞춰야하는 탭 개수로 바꾸라는 그리디 알고리즘 문제이다. 그리디 알고리즘이라는게 특별한 알고리즘이 있는게 아니라 그냥 어떻게 하면 최적의 경로로 문제를 해결할까? 생각하고 구현하는 문제이다. 방법은 간단하다. 현재 위치에서 탭을 줄여야한다면, 양옆까지 확인해서 줄여야하는 탭은 같이 줄여준다. 대신 줄이는 횟수가 다를수 있으므로 줄여야하는 탭 중에서..
[백준 1992번] 쿼드트리 (Python/파이썬)
·
📚알고리즘/백준
https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 문제를 읽었을 때는 ~압축한다 라고 나와있어서 좌표압축 문제로 착각할 수 있지만, 좀만 더 읽어보면 분할정복이라는 것이 보인다. 특정 공간이 0또는 1로만 이루어지면 그 공간 전체를 0 또는 1로 압축한다고 하고, 전체를 압축한 결과를 내라는 문제이다. 종이의 개수나 색종이 만들기 문제와 비슷하지만 괄호를 어느 부분에 넣어야되냐가 생각하기가 조금더 어렵기 때문에 실버1의 난이도로 배정..
[백준 2812번] 크게 만들기 (Python/파이썬)
·
📚알고리즘/백준
https://www.acmicpc.net/problem/2812 2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제를 보자마자 오큰수하고 똑같은 문제라고 생각했다. 예전 포스팅에서 오큰수문제를 다뤘었는데 그때 deque를 사용하여 숫자를 하나씩 빠르게 비교할수 있다는 것을 배웠다. 만들 숫자를 stack에다가 하나씩 넣으면서, 넣어야될 숫자가 먼저 들어간 숫자보다 크면 원래 있던 숫자를 지우고 스택에 숫자를 추가했다. 당연히 들어가고 나서는 그 앞의 숫자들하고도 비교해주어야 하기 때문에 while을 이용하여 똑같은 과정을 반복했다. 마지막에 비교가 끝나고 한번도 비교를 안하게 되면 ..
[백준 1389번] 케빈 베이컨의 6단계 법칙 (Python/파이썬)
·
📚알고리즘/백준
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탐색이 모두 끝나고는 처음 시작한 친구의 케빈 베이컨의 수를 구해서 리턴해주었다.나온 케빈 베이컨의 수 중에서 가장 작은 친구를 출력해야하므로 마지막에 정렬까지 해주었다.. 당연하지만 ..
[백준 1074번] Z (Python/파이썬)
·
📚알고리즘/백준
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을 추가해주었다. 하지만 그래도 시간초과가 떠서...다..
루오
'📚알고리즘' 카테고리의 글 목록 (13 Page)