반응형

슬기로운 개발자생활 67

[DFS/BFS] 블록 이동하기

1. 문제 오른쪽 하단 끝으로 이동하기 2. 입력 # SET - 1 board = [[0,0,0,1,1],[0,0,0,1,0],[0,1,0,1,1],[1,1,0,0,1],[0,0,0,0,0]] 3. 출력 # SET - 1 result = 7 4. 풀이 DFS로 풀려고했는데 visited 처리를 제대로 못했다. visited처리를 하면서 혼돈에 빠져서 결국 해결못하고 GG DFS로 하면 모든 경로를 다 탐색하므로 오래걸리고 안될 수 밖에;; 판단을 잘못했다. BFS로 풀면, 그 전에 방문한곳은 cost가 무조건 낮은걸로 채워져있을테니 결국 N, N에 도착하는 cost는 최저 코스트가 될 것이다. 그러므로, 다음 이동할 position을 미리 계산해서 리스트에 담은 뒤, 그것을 큐에 cost와 함께 넣어주면..

[DFS/BFS] 인구 인동 (BAEKJOON - 16234)

1. 문제 땅의 크기 N 각 영역별로 나라가 존재하고 최소 인구 이동, 최대 인구 이동 범위가 L, R 사이 일 때 인구 이동이 몇번 일어나는가? 2. 입력 # SET - 1 2 20 50 50 30 20 40 # SET - 2 2 40 50 50 30 20 40 # SET - 3 2 20 50 50 30 30 40 # SET - 4 3 5 10 10 15 20 20 30 25 40 22 10 # SET - 5 4 10 50 10 100 20 90 80 100 60 70 70 20 30 40 50 20 100 10 3. 출력 # SET - 1 1 # SET - 2 0 # SET - 3 1 # SET - 4 2 # SET - 5 3 4. 풀이 bfs로 확산하는것만 이해하고 같은 그룹으로 묶는거를 까먹었다보..

[DFS/BFS] 감시 피하기 (BAEKJOON - 18428)

1. 문제 T는 선생님 S는 학생 벽(W) 3개를 세워서 감시를 피할 수 있으면 YES를 출력, 아니면 NO 출력 2. 입력 # SET - 1 5 X S X X T T X S X X X X X X X X T X X X X X T X X # SET -2 4 S S S T X X X X X X X X T T T X 3. 출력 # SET - 1 YES # SET - 2 NO 4. 풀이 N이 3~6으로 맵 크기가 작기 때문에 완전탐색도 가능하다. 선생님의 감시를 피할 수 있는지 확인하는 부분이 조금 다를 뿐 벽을 세우면서 (dfs를 돌리면서) 벽이 3개일 때, 선생님의 감시를 피할 수 있는지 체크 여기서 가능하다면 최종적으로 True를 들고가면된다. 지금은 풀이가 잘 이해되는데 다른거 공부하다가 까먹을까봐 기록..

[DFS/BFS] 연산자 끼워 넣기 (BAEKJOON 14888번)

1. 문제 숫자가 N만큼 주어지고 연산자가 N-1개 만큼 주어졌을 대 최대값, 최소값을 출력하라. 연산자 순서는 + - * / 순이다. 나눌땐 몫만 취할 것 (음수를 나눌 경우 양수로 나눈 뒤 - 붙임) 2. 입력 # SET - 1 2 5 6 0 0 1 0 # SET - 2 3 3 4 5 1 0 1 0 # SET - 3 6 1 2 3 4 5 6 2 1 1 1 3. 출력 # SET - 1 30 30 # SET - 2 35 17 # SET -3 54 -24 4. 풀이 예전에 풀때는 완전탐색으로 permutation을 사용해 풀었지만, 조금 공부하고나니 DFS로 푸는 방법이 보였다. 마치 친구와 당구를 하면서, 맨날 당구비를 내다보니 길이보이는 느낌이랄까.. 근데 중요한건 아직 시야가 편협하다는 것 max값을..

[DFS/BFS] 연구소 (BAEKJOON - 14502)

1. 문제 벽을 3개 지어서 0을 최대한 많이 만들어라. virus는 상하좌우로 퍼짐 2. 입력 # SET - 1 N, M = 7, 7 maps = '''2 0 0 0 1 1 0 0 0 1 0 1 2 0 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0''' # SET - 2 N, M = 4, 6 maps = '''0 0 0 0 0 0 1 0 0 0 0 2 1 1 1 0 0 2 0 0 0 0 0 2''' # SET - 3 N, M = 8, 8 maps = '''2 0 0 0 0 0 0 2 2 0 0 0 0 0 0 2 2 0 0 0 0 0 0 2 2 0 0 0 0 0 0 2 2 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 ..

[구현] 외벽 점검

1. 문제 친구들을 활용해 외벽 점검을 하자. 점검이 필요한 외벽의 번호 오름차순으로 주어진다. 각 친구들은 점검할 수 있는 길이가 정해져있다. 친구들을 최소한으로 사용해서 외벽 점검을 마쳐라. 2. 입력 # SET - 1 n = 12 weak = [1, 5, 6, 10] dist = [1, 2, 3, 4] # SET - 2 n = 12 weak = [1, 3, 4, 9, 10] dist = [3, 5, 7] # SET - 3 n = 50 weak = [1] dist = [6] # SET - 4 n = 200 weak = [0, 10, 50, 80, 120, 160] dist = [1, 10, 5, 40, 30] # SET - 5 n = 30 weak = [0, 3, 11, 21] dist = [10, ..

[구현] 자물쇠와 열쇠

1. 문제 풀어보기 (프로그래머스) Key로 Lock을 풀수 있는 방법이 있는가? 가능한 방법 : 회전, 이동 0은 들어간부분, 1은 튀어나온 부분 2. 입력 # SET - 1 key= [[0, 0, 0], [1, 0, 0], [0, 1, 1]] lock= [[1, 1, 1], [1, 1, 0], [1, 0, 1]] 3. 출력 # SET - 1 result = True 4. 풀이 회전함수를 구현해야한다. 여기서 중요한 건, 회전한 키의 type이 Lock에서 가져온 홈 파인부분과 일치하지 않으면, False를 반환하게 된다. 이 점을 유의해서 회전함수를 구현하는 것이 필요 회전함수를 구현했으면, 이후에 어떻게 저 홈에 키를 끼워맞출 것인지, 생각해야 하는데 본인의 경우에는 Lock에서 홈이 패인 부분만 ..

[그리디] 무지의 먹방 라이브

1. 문제 무지의 카카오 TV 방송 ! 1. 1번 음식부터 순서대로 먹기 시작함 2. 마지막 번호의 음식을 먹고나면 다시 1번 음식을 먹음 3. 1초에 한 음식만 먹고, 다음 음식은 남아있는 음식 중 가장 가까운 번호의 음식 4. 다음 번호의 음식이 오는데 걸리는 시간은 없음 K초가 지났다. 몇 번 음식을 먹어야 하는가? 2. 입력 # SET - 1 food_times=[3, 1, 2] K = 5 # SET - 2 food_times = [4, 2, 3, 6, 7, 1, 5, 8] K = 27 # SET - 3 food_times = [4, 2, 3, 6, 7, 1, 5, 8] K = 16 3. 출력 # SET - 1 result = 1 # SET - 2 result = 5 # SET - 3 result..

[그리디] 만들 수 없는 금액

1. 문제 N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요. 2. 입력 5 3 2 1 1 9 3. 출력 8 그리디 문제, 동전들을 오름차순으로 정렬하고 목표 금액을 만들 수 있는지 여부를 판단하며 값을 증가시킨다. 현재 만들 수 있는 값을 target이라 하면, 현재 target보다 주어진 coin이 크면 해당 금액은 만들 수 없게 된다. 1 1 2 3 9가 주어졌을 때, 초기 target = 1 부터 시작한다고 했을 때, 1 ≥ 1 이므로 target += 1 → target=2 두 번째 코인 2 ≥ 1 이므로 target += 1 → target=3 세 번째 코인 3 ≥ 2 이므로 target += 2 → target=5 네 번째 코인 5 ≥ 3 이므로 ..

알고리즘 노트 - Python 라이브러리

# 입력 input() import sys sys.stdin.readline().rstrip() # 출력 print(f'{value}') # 내장 함수 sum([list]) max([list]) min([list]) eval("(3 + 5) * 7") sorted(array, reverse=False, key=lambda i:i[1]) # 반복 from itertools import permutations, combinations, product # 클래스객체 반환 permutations(array, 3) # 순열 (A B) (B A) combinations(array, 2) # 조합 (A B) product(array, repeat=2) # 중복 허용 순열 # 자료형 heap import heapq h..

반응형