본문 바로가기

알고리즘

(30)
[Python] 백준 20057: 마법사 상어와 토네이도 www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 풀이 방법 토네이도와 모래의 이동경로만 잘 잡아주면 풀 수 있는 문제였다. 토네이도는 (n//2, n//2)지점부터 시작해서 방향은 좌, 하, 우, 상을 반복하면서 해당 방향으로 1칸, 1칸, 2칸, 2칸, 3칸, 3칸, 4칸, 4칸, ... 이렇게 2를 주기로 칸수를 늘려서 같은 방향을 이동한다. (아래 이미지 참고) 위를 기준으로 0부터 n*n-1까지 이동할 방향을 arr에 ..
[Python] 백준 17825: 주사위 윷놀이 www.acmicpc.net/problem/17825 17825번: 주사위 윷놀이 주사위 윷놀이는 다음과 같은 게임판에서 하는 게임이다. 처음에는 시작 칸에 말 4개가 있다. 말은 게임판에 그려진 화살표의 방향대로만 이동할 수 있다. 말이 파란색 칸에서 이동을 시작하면 www.acmicpc.net 풀이 방법 윷놀이 판을 직접 만들어야 해서 좀 귀찮은 문제였다. 윷놀이 판 만드는 거 빼면 평범한 백트래킹 문제다. 윷놀이 판에 각각 인덱스를 매기고 graph로 만들어줘서 이동할 수 있는 인덱스를 저장했다. 예를들어 0번이 출발점이고 다음칸이 1번이라면 graph[0] = [1], 5번 칸에서는 갈 수 있는 칸이 2칸 이므로 graph[5] = [6, 21]과 같이 표현해줬다. 각 칸의 점수도 배열로 저장해놔..
[Python] 백준 17822: 원판 돌리기 www.acmicpc.net/problem/17822 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 풀이 과정 구현해야 하는 기능은 3가지 이다. 1 - 시계방향/반시계 방향으로 회전 2 - 인접한 같은 것을 찾아서 지우기 3 - 2에서 지울 값이 없다면 평균을 구하고 평균보다 큰 값엔 -1, 작은 값엔 +1 해주기 2번은 bfs/dfs로도 구할 수 있는데 그냥 이중배열로 구하는게 더 쉽다. 처음에 2번을 구혈할 때 인접 행 찾아서 지우고, 인접 열 찾아서 지웠다. 이렇게 하니까 행 찾을 때 ..
[Python] 백준 17779: 게리맨더링 2 www.acmicpc.net/problem/17779 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 풀이 과정 개인적으로 골드 4치고는 어려웠던 문제 같다. 우선 구역 5가 되는 경계 부터 체크해준다. 이후 각 1, 2, 3, 4의 범위(문제에 명시된)에 포함되고, 경계를 만나기 전까지 인구수를 더해준다. 5 구역의 인구는 전체 인구에서 1, 2, 3, 4 인구의 합을 빼는 것이 가장 편하다. 전체 코드 def calculate(x, y, d1, d2): arr = [0,0,0,0,0] temp = [[0]*n f..
[Python] 백준 17837 : 새로운 게임 2 www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하 www.acmicpc.net 풀이 방법 칸이 흰색일 경우, 빨간색일 경우, 파란색일 경우(=범위를 넘어갈 경우)를 구분해서 각각을 구현하면 된다. 빨간색일 경우 list.reverse()를 이용한다. 말이 4개 이상 쌓이는 경우 바로 종료해야 하므로, 이동했을 때 바로 그 이동한 위치의 말의 개수가 몇 개인지 확인하고 4개 이상이면 종료시킨다. 전체 코드 n, k = map(int, input().split()) board = [] f..
[Python] 백준 17142 : 연구소 3 www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 풀이방법 바이러스의 위치 중 활성화할 m개의 조합에 대해서 bfs를 반복한다. -> iteratools를 사용할 수 있다면 더 편하지만 만약에 불가능하다면 backtracking으로 구현한다. visited에 각각 방문까지 걸리는 시간을 저장해둔다. visited에 저장된 시간 중 가장 늦은 시간이 전부에 퍼지는 시간. 단, 이미 바이러스가 있는 곳 (2인 곳)은 시간 체크에서 제외한다. from collections ..
[Python] 백준 17143 : 낚시왕 www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 풀이 방법 1. pypy3으로만 통과하는 코드 모든 열에 대해 검사해서 가장 가까운 상어의 크기를 answer에 더해준다. 낚시 후 모든 상어를 이동한다. 각 상어에 대해 s번 반복문을 돌며 범위에 벗어나면 방향을 바꿔서 이동한다. 이렇게 계산하면 시간 복잡도는 아래와 같다. 낚시왕이 모든 열에 대해 이동 C * (상어 이동 : RCs) → 100100100*1000 = 1,000,000,0..
[Python] 프로그래머스 level3 외벽 점검 programmers.co.kr/learn/courses/30/lessons/60062 코딩테스트 연습 - 외벽 점검 레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기로 했습니다. 레스토랑이 있는 곳은 스노우타운으로 매우 추운 지역이어서 내부 공사를 하 programmers.co.kr 풀이 방법 어떤 친구들 먼저 처리할지 순서가 매번 다르기 때문에 permutation함수를 이용해서 dist의 모든 순서를 다 고려해준다. -> dist = [3, 5, 7]일 때, [3, 5, 7], [3, 7, 5], [5, 3, 7], .... 모두 고려 각 dist에 대해서 dijkstra를 이용해 모든 취약점을 방문하는 최소 친구 수를 구한다. 그래프의 방문을 이용할..

반응형