알고리즘 21

백준 2468번 : 안전 영역(python)

https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net n = int(input()) data = [list(map(int,input().split())) for _ in range(n)] max_value = max(max(data)) temp = [[0]*n for _ in range(n)] dx = [-1,1,0,0] dy = [0,0,-1,1] def dfs(x,y,temp): q = [(x,y)] temp[x][y] = 0 while q: x,y =..

알고리즘 2021.07.26

백준 10026번 : 적록색약(python)

https://www.acmicpc.net/problem/10026 10026번: 적록색약 적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록) www.acmicpc.net import copy n = int(input()) data = [list(input()) for _ in range(n)] red_green = copy.deepcopy(data) for i in range(n): for j in range(n): if red_green[i][j] == 'G': red_green[i][j] = 'R' dx = [0,1,0,-1] dy = [1,0,-1,0..

알고리즘 2021.07.26

백준 2583번 : 영역 구하기(python)

https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net m,n,k = map(int,input().split()) data = [[0]*n for _ in range(m)] dx = [-1,1,0,0] dy = [0,0,-1,1] for _ in range(k): a1,a2,b1,b2 = map(int,input().split()) for j in range(a1,b1): for k in range(a2,b2): data[k][j]..

알고리즘 2021.07.26

백준 2667번 : 단지번호붙이기(python)

https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net n = int(input()) data = [list(map(int, input())) for _ in range(n)] dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def dfs(x, y): count = 1 data[x][y] = 0 q = [(x, y)] while q: x, y = q.pop() for i in range(4): nx, ny = x + dx[i], y ..

알고리즘 2021.07.26

백준 7576번 : 토마토(python)

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net from collections import deque m,n = map(int,input().split()) box = [list(map(int,input().split())) for _ in range(n)] ripe = deque() for i in range(n): for j in range(m): if box[i][j] == 1: ripe.append((i,j)) dx = ..

알고리즘 2021.07.26

백준 1600번 : 말이 되고픈 원숭이(Python)

https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net # 원숭이는 k번만 말처럼 움직일 수 있고, 그 외에는 인접한 칸(상하좌우)으로 움직인다. dx_m = [0,1,0,-1] dy_m = [1,0,-1,0] dx_h = [-2,-2,-1,-1,1,1,2,2] dy_h = [-1,1,-2,2,-2,2,-1,1] # 격자판의 맨 위쪽 위에서 시작해서 맨 오른쪽 아래까지 가야한다. # 격자판이 주어졌을때 원숭이가 최소한 동작으로 갈 수 ..

알고리즘 2021.06.20

programmers 두 개 뽑아서 더하기(Python)

https://programmers.co.kr/learn/courses/30/lessons/68644 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr def solution(numbers): answer = [numbers[i] + numbers[j] for i in range(len(numbers)-1) for j in range(i+1,len(numbers))] return list(set(sorted(answer))) 처음에는 다음과 같이 했는데 테스트케이..

알고리즘 2021.06.12

programmers 완주하지 못한 선수(Python)

https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr from collections import Counter def solution(participant, completion): A = Counter(participant) B = Counter(completion) answer = A-B return [x for x in answer.keys()][0]

알고리즘 2021.06.09

programmers 타겟 넘버(Python)

https://programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr def dfs(count, cnt, numbers, target): global answer if count == len(numbers): if cnt == target: answer += 1 return dfs(count + 1, cnt + numbers[count], numbers, target) dfs(..

알고리즘 2021.06.06

programmers 키패드 누르기(Python)

https://programmers.co.kr/learn/courses/30/lessons/67256 코딩테스트 연습 - 키패드 누르기 [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL" programmers.co.kr def solution(numbers, hand): answer = [] left,right = [1,4,7], [3,6,9] # 거리 계산을 위해 2차원 좌표로 변환 change_2d = {'*':(1,1),0:(1,2),'#':(1,3), 7:(2,..

알고리즘 2021.06.06