본문 바로가기

알고리즘

(30)
[Python] 백준 17144 : 미세먼지 안녕! www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 풀이 방법 적혀있는 대로 구현하면 돼서 비교적 쉬운 문제였다. 미세먼지 확장 : 모든 곳 방문하면서 인접한 곳에 a//5더해주고, a-(a//5)*cnt 해주는 함수 만들기 = diffusion 공기 청정기 작동 : 공기청정기 위에서 시작해서 반시계 방향순환, 아래에서 시작해서 반시계 방향순환 = clean 전체 코드 r, c, t = map(int, input().split()) room = [] for i..
[Python] 프로그래머스 level3 카드 짝 맞추기 programmers.co.kr/learn/courses/30/lessons/72415 코딩테스트 연습 - 카드 짝 맞추기 [[1,0,0,3],[2,0,0,0],[0,0,0,2],[3,0,1,0]] 1 0 14 [[3,0,0,2],[0,0,1,0],[0,1,0,0],[2,0,0,3]] 0 1 16 programmers.co.kr 풀이 방법 정답률이 0.95%인 6번 문제였다..... 어쩐지 어렵더라 처음 잘못 생각했던 것 : 나는 2번 지우고 가장 가까운 다음 카드로 가서 그거 지우고, 지운 후 위치에서 가장 가까운데 가서 또 지우고,... 를 반봅했다. 가장 가까운데를 찾아다니면 최소 비용이 나올거라 생각했다. -> X 모든 순열에 대해서 생각해 줘야한다. 1, 2, 3번 카드가 있다면 1-2-3, 1..
[Python] 백준 16236 : 아기 상어 www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 풀이 방법 물고기를 먹으러갈 때마다 bfs로 이동한다. bfs로 이동하고 이동한 칸 수 만큼 answer에 더해준다. 현재 상어의 크기 만큼 물고기를 먹었으면 상어의 크기 + 1해준다. 틀렸던 부분 ) "먹을 수 있는 물고기가 1마리보다 많다면, 거리가 가장 가까운 물고기 -> 가장 위에 -> 가장 왼쪽에" : 이 부분 구현은 bfs와 move의 순서 조정으로 할 수 있을 줄 알았는데, 먹을 수 있는 물..
[Python] 프로그래머스 level3 기둥과 보 설치 코딩테스트 연습 - 기둥과 보 설치 5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[ programmers.co.kr 풀이 과정 보와 기둥의 설치 조건을 빠트리지만 않으면 되는 문제다. 삭제할 때는 삭제를 하고, 조건에 안 맞는 기둥이나 보가 있는지 확인하고, 있다면 다시 삭제하기 전으로 되돌리는 게 ..
[Python] 백준 16235 : 나무 재테크 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 문제에 나온 그대로 봄,여름,가을,겨울을 구분하여 구현하면 된다. 전체 코드 move = [(0,1),(0,-1),(1,0),(-1,0),(1,1),(-1,-1),(1,-1),(-1,1)] def spring(): temp = [[0]*N for _ in range(N)] for i in range(N): for j in range(N): if not tree[i][j]: continue new = [] for x in range(len(tree[..
[Python] 프로그래머스 level3 광고 삽입 programmers.co.kr/learn/courses/30/lessons/72414 풀이 과정 처음에는 후보가 될 수 있는 시작지점을 구해서 각 log와 비교해줬더니 O(N^2)로 시간초과가 났다. 모든 시점에 각각 시청하는 사람이 몇명인지 배열에 저장하면, O(전체시간)으로 비교 가능하다. 각 시간마다 사람 수를 저장하는 방법이 O(전체시간 * 전체사람)으로 밖에 안떠올랐는데, dp memorize를 사용하면 O(전체시간)으로 저장할 수 있다. "HH:MM:SS"문자열을 초로 변환해주는 함수와 초를 "HH:MM:SS"형태로 변환해주는 함수를 만든다. 위 그럼처럼 각 시점에 맞는 사람수를 구하기 위해 dp[i]를 갱신해주고, 구간합 계산을 위해 dp[i]를 한 번 더 갱신해 준다. # 광고 삽입 de..
[Python] 백준 16234 : 인구 이동 www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 풀이 과정 각 지점에서 출발해서, 인접하고 현재 지점과의 차이가 l이상 r이하인 곳들을 bfs/dfs를 통해서 다 방문한다. 방문이 가능하다는 것은 하나의 연합이 된다는 것을 의미한다. visted는 전체 출발에 대해서 하나만 정의해서 쓰면 된다. 전체 코드 move = [(0,1), (1,0), (-1,0), (0,-1)] def dfs(i, j): now = [] total = 0 cnt = ..
[Python] 프로그래머스 level3 합승 택시 요금 programmers.co.kr/learn/courses/30/lessons/72413 코딩테스트 연습 - 합승 택시 요금 6 4 6 2 [[4, 1, 10], [3, 5, 24], [5, 6, 2], [3, 1, 41], [5, 1, 24], [4, 6, 50], [2, 4, 66], [2, 3, 22], [1, 6, 25]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4 programmers.co.kr 🍟 풀이 방법 다익스트라를 이용해 최단 경로를 찾는다. 다익스트라에 대한 설명은 아래 포스팅을 참..

반응형