알고리즘

알고리즘/Python

[python] 백준 15685 - 드래곤 커브

출처 : 백준, https://www.acmicpc.net/problem/15685 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net # 다음 세대 드래곤 커브 # 이전 세대 드래곤 커브의 끝 점을 기준으로 90도 시계 방향 회전 # 그것을 끝 점에 붙인 것임 # 격자 위에는 N개의 드래곤 커브가 존재 # x, y, d, g # 1x1 크기의 정사각형의 꼭짓점이 모두 드래곤 커브의 일부인 정사각형의 개수 더보기 먼저, 생각해야 할 부분 1. 꼬마신 신고 평행 이동과 회전 변환, 잊지 않..

알고리즘/Python

[python] 백준 15683 - 감시

출처 : 백준, https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net # 1번 1방향 # 2번 서로 반대 방향 # 3번 서로 직각 # 4번 3방향 # 5번 4방향 # CCTV는 벽을 넘을 수 없으나, CCTV는 넘을 수 있다. # 최소 사각지대의 개수 더보기 먼저, 생각해야 할 부분 1. 여러개의 CCTV가 바라볼 수 있는 모든 방향에 대한 조합을 어떻게 구할지 생각해본다. 풀이 모든 조합을 훑어 최소값을 알아보고 싶다면, 깊이 우선 탐색..

알고리즘/Python

[python] 백준 16234 - 인구 이동

출처 : 백준, https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net # 한 칸에 한나라, 인구이동은 하루에 한 번 # 인구 이동이 발생하지 않을 때 까지 반복 # 두 나라 사이의 인구 차가 L 이상 R 이하이면, 국경선 OPEN # 국경선을 모두 연 다음에 인구 이동 시작 # 국경선이 열린 나라들끼리 연합 # 인구 이동 = 연합 인구 / 연합 이루는 나라 수 (소수점 버림) # 인구이동이 발생한 일자 더보기 먼저, 생각해야 할 부분 ..

알고리즘/Python

[python] 백준 14502 - 연구소

출처 : 백준, https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net # 벽을 3개 세울 수 있다. # 바이러스는 상하좌우로 퍼져나간다 # 바이러스가 있는 칸은 연구소 내에 2개 이상 9개 이하이다. # 안전영역의 최댓값을 구하여라 더보기 먼저, 생각해야 할 부분 1. 어떻게 해야 벽을 세울 칸을 효율적으로 선택할 수 있을지 고민해보자. 아마.....없을 것이다. 벽을 세울 칸을 효율적으로 선택할 수 없다면...다 해봐야지 어쩌겠니... 2. 그렇다면 안전 영역..

알고리즘/Python

[python] 백준 14499 - 주사위 굴리기

출처 : 백준, https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지 www.acmicpc.net 더보기 먼저, 생각해야 할 부분 1. 주사위를 굴리는 알고리즘 문제의 핵심은 주사위를 굴리는 알고리즘을 어떻게 구현할 것인가이다. 주사위의 면과 적혀있는 숫자를 매칭하는 것과, 실제 놓여진 주사위의 각 면의 방향과 주사위의 각 면을 매칭하는 것을 따로 생각해보자. 괜히 주사위의 각 면에 번호를 붙여준게 아니다. 풀이..

알고리즘/Python

[python] 백준 3190 - 뱀

출처 : 백준, https://www.acmicpc.net/problem/3190 더보기 먼저, 생각해야 할 부분 1. 계속 움직이는 뱀이 차지하는 좌표들을 어떻게 관리하면 좋을까? 뱀이 자기자신에게 부딪혀도 게임 오버이기 때문에 지속적으로 뱀의 좌표를 관리해주어야한다. 뱀이 한 번 움직일 때마다 뱀이 차지하는 좌표들을 조회해야했기 때문에 빠르게 조회할 수 있는 자료형이 필요했고, 처음에는 좌표들을 set에 넣어서 관리하려고 했다. 이를 통해 새 좌표를 넣어주고, 꼬리를 제거하면서 필요 시 간편하게 조회할 수 있을 것이라 생각했다. 그러나 set은 성분의 순서를 보장하지 않기 때문에 뱀의 꼬리가 어디인지 알아낼 수 없었다. 이를 해결하기 위해 dictionary 자료형을 사용하도록 변경했다. (Pytho..

알고리즘/Python

[python] 백준 15686 - 치킨 배달

출처 : 백준, https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 더보기 먼저, 생각해야 할 부분 1. 1개를 골랐을 때 최대 m개라면, m개를 골랐을 때도 같은 값이 나온다. m개가 최댓값이라면 m개를 골랐을 때 최댓값이 나온다. 최대 m개를 골라야하지만, 어짜피 m개보다 작게 고른 경우의 수가 m개를 뽑았을 때도 포함되어 있으므로, 1~m개를 모두 계산하는게 아니라 m개를 고른 경우에 대해서만 계산하면 된다. 풀이 def..

알고리즘/알고리즘

순열(Permutation)의 코드화

이전에 조합(Combination)의 코드화에 대해서 글을 작성한 적이 있었다. 이번에는 순열의 코드화에 대해 글을 적어보려한다. 순열의 코드화는 조합의 코드화에서 약간만 추가하면 쉽게 만들 수 있다. [4, 3, 2, 1]에서 성분이 2개인 순열을 구하는 방식은 다음과 같다. 먼저 고정된 성분 4를 선택한다. 그 후, 고정된 성분 뒤의 배열에서 1개인 성분을 선택한다. 모두 돌았다면, 고정된 성분 4를 가장 뒤로 보낸다. 그 후 고정된 성분 3을 선택하고 위를 반복한다. 여기서 고정된 성분을 따로 떼어놓고 생각해보자. 고정된 성분 4를 제외하면, [3, 2, 1]에서 1개의 성분에 대한 순열을 구하는 것과 같다. 즉, list에서 성분이 n개인 순열을 구하는 방법은 고른 고정성분 앞의 배열을 고정 성분..

알고리즘/알고리즘

조합(Combination)의 코드화

조합(Combination)의 코드화에 대해 글을 작성해보려한다. 조합을 코드화하기 위한 아이디어를 생각해보자. [4, 3, 2, 1]에서 성분이 2개인 조합을 구하는 방식은 다음과 같다. 먼저 4를 고정해놓고 뒤의 숫자를 1개 고른다. 그 후 4를 제외하고 3을 고정, 뒤의 숫자를 1개 고른다. 그런데 여기서 고정된 성분을 따로 떼어놓고 생각해보자. 고정된 성분 4를 제외하고 생각해보면, 이는 [3, 2, 1]이라는 배열에서 성분이 1개인 조합을 구한 것에 성분 4를 추가한 것과 같다. 이를 통해 list에서 n개의 조합을 구하는 알고리즘을 짜보자. 1. 고정할 성분을 선택 2. 이를 제외한 뒤의 배열에서 n-1개의 조합을 구함 3. 이 조합에 고정한 성분을 추가 4. 다음 고정 성분을 선택한 후 반복..

알고리즘/Python

[python] 백준 21610 - 마법사 상어와 비바라기

출처 : 백준, https://www.acmicpc.net/problem/21610 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net 더보기 먼저, 생각해야 할 부분 1. 문제를 단순하게 줄여보자 # 구름은 d방향으로 s칸만큼 이동 후 구름이 있는 칸의 물 + 1 => 구름 제거 # 물이 증가한 칸에 대각선 방향으로 거리가 1인 바구니 중 물이 있는 바구니 수만큼 바구니만큼 물 증가 # 1, N 경계는 취급 X # 바구니에 저장된 물의 양이 2 이상인 모든 칸에 구름이 생기고 물의 양이 2가 줄어듬. # ..

알고리즘/Python

[python] 백준 20055 - 컨베이어 벨트 위의 로봇

출처 : 백준, https://www.acmicpc.net/problem/20055 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 더보기 먼저, 생각해야 할 부분 1. 문제를 잘 이해하자. 문제가 너무 이상하지만 차근차근 읽어보면 해석이 된다. 문제에서 말하는 단계란 무엇일까? # 단계의 정의 -> 1~4까지가 1단계 # 1. 벨트를 움직인다. -> 로봇 내림 # 2. 로봇을 움직인다. -> 내구도 하락 및 로봇 내림 # 3. 로봇 올림 # 4. 내구도 k개인지 조사 이것이 문제에서 말하..

알고리즘/Python

[python] 백준 14891 - 톱니바퀴

출처 : 백준, https://www.acmicpc.net/problem/14891 14891번: 톱니바퀴 총 8개의 톱니를 가지고 있는 톱니바퀴 4개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 더보기 먼저, 생각해야 할 부분 1. 보자마자 가장 쉬운 접근법이 떠올랐을텐데 그 풀이 방법이 통과 가능한지 검토해보자. 불가능하다는 말이 아니다. 2. 구현 문제는 놓치는 부분 없이 꼼꼼하게 풀어야한다. 조건을 놓치지 않게 조건을 잘 명시하는 의사코드를 대략적으로 적어보자 풀이 : Multiple Pointer import sys def solution(gears, rot_c..

제주도랏맨
'알고리즘' 카테고리의 글 목록 (5 Page)