Programmers 35

[프로그래머스] 안전지대

def solution(board): # 지뢰가 있는 지역과 지뢰에 인접한 위, 아래, 좌, 우 대각선 칸을 모두 위험지역으로 분류 # 지뢰는 2차원 배열 board에 1로 표시되어 있고 board에는 지뢰가 매설 된 지역 1과, 지뢰가 없는 지역 0만 존재 answer = 0 def return_boom_set(x,y): temp_set = set() for i in range(x-1,x+2): for j in range(y-1,y+2): if 0  본 문제는 지뢰가 설치된 영역이 주어지고, 지뢰가 설치된 자리와 지뢰를 둘러싼 자리들이 위험지대라고 가정할 때 안..

[프로그래머스] 숫자의 표현

def solution(n): answer = 0 for i in range(1,n+1): sum_value = 0 for j in range(i,n+1): sum_value += j if sum_value == n: answer += 1 elif sum_value > n: break return answer 이번 문제는 연속된 자연수로 n을 만들 수 있는 모든 경우의 수를 구하는 브루트포스 (brute force, 완전 탐색) 문제이다. 처음에는 dp 문제인 줄 알고 패턴과 점화식을 찾으려고 노력했으나, 도무지 규칙을 생각해봐도 나오지 않아 다른 사람의 풀이를 참고해본 결과 완전 탐색으로 풀이해야 한다는 것을 알게 되었다.(n

[프로그래머스] 최솟값 만들기

import heapq def solution(A,B): result = 0 count = len(A) # A에 대한 최소 힙 / 최대 힙, B에 대한 최소 힙 / 최대 힙 min_heap_a, max_heap_a, min_heap_b, max_heap_b = [], [], [], [] for a in A: heapq.heappush(min_heap_a,a) heapq.heappush(max_heap_a,-a) for b in B: heapq.heappush(min_heap_b,b) heapq.heappush(max_heap_b,-b) while count > 0: # 원소의 개수만큼 반복 min_A, max_A, min_B, max_B = min_heap_a[0], -max_heap_a[0], min_..

Algorithm/Sorting 2024.01.05

[프로그래머스 PCCP 모의고사 2-4번] 수레

def solution(maze): answer = 0 n = len(maze) m = len(maze[0]) dx = [-1,1,0,0] dy = [0,0,-1,1] minimum = float("inf") is_success = False # 모든 수레가 각각의 도착 칸에 이동해야 함 # 각 턴 마다 모든 수레를 상하좌우로 인접한 칸 중에 하나로 이동 # 벽(5)이나 격자 판 밖으로 이동 X # 자신이 방문했던 칸으로 이동 X # 도착 칸에 위치한 수레는 더 이상 이동 X # 동시에 두 수레를 같은 칸에 위치 X # 수레끼리 자리를 바꿀 수 X for i in range(n): for j in range(m): if maze[i][j] == 1: red_start = (i,j) if maze[i][j..

Algorithm/DFS 2023.11.18

[프로그래머스 PCCP 모의고사 2-1번] 붕대 감기

def solution(bandage, health, attacks): # 1초마다 x 만큼 체력회복 # t초 동안 연속으로 붕대를 감는데 성공하면 y만큼의 체력을 추가로 회복 # 최대 체력 보다 체력이 커지는건 X # 몬스터에게 공격을 당하거나 기술이 끝나면 '붕대 감기' 재시전 + 연속 성공시간 0초기화 # 체력이 0 이하가 되면 캐릭터 사망 후 회복 X # 만약에 공격받고 죽으면 -1 리턴 # 입력 : 붕대감기 기술정보(시전 시간, 1초당 회복량, 추가 회복량), 최대 체력, 몬스터의 공격 패턴 # 출력 : 모든 공격을 받고 난 후 남은 체력 max_time = attacks[-1][0] # 몬스터의 마지막 공격시간 attack_list = [0]*(max_time+1) # 공격 목록을 리스트화 f..

[프로그래머스 PCCP 모의고사 3번] 카페 확장

from collections import deque def solution(menu, order, k): answer = 0 queue = deque() for i in order: queue.append(menu[i]) answer = max(answer,len(queue)) time = k while queue: # queue[0]과 time을 비교(걸리는 시간과 남은 시간) if queue[0] time: queue[0] -= time break else: queue.popleft() break return answer 이번 문제는 Queue 자료구조를 사용하여 푸는 문제인데 문제의 조건이 조금 ..

[프로그래머스 PCCP 모의고사 2번] 신입사원 교육

import heapq def solution(ability,number): # 신입사원 2명 선발, 선발 후 같이 공부시킴 # 모든 신입사원의 능력치는 정수로 표현 # 2명이 같이 공부하면 서로의 능력을 흡수하여 두 신입사원의 능력치는 # '공부하기 전 두 사람의 능력치의 합'이 됨 # 교육 후 모든 신입사원의 능력치의 합을 최소화 # 최솟값을 pop하는 시간복잡도를 최소화 하기위해 heapq 사용 q = [] for item in ability: heapq.heappush(q,item) for i in range(number): a = heapq.heappop(q) b = heapq.heappop(q) heapq.heappush(q,a+b) heapq.heappush(q,a+b) return sum(q)

Data Structure/Heap 2023.11.11

[프로그래머스 PCCP 모의고사 1번] 실습용 로봇

def solution(command): answer = [] # 로봇은 입력된 명령에 따라 x, y좌표를 이동 # G : 바라보는 방향으로 한칸 전진 # B : 바라보는 방향으로 한칸 후진 # 위, 오른, 아래, 왼 dx = [0,1,0,-1] dy = [1,0,-1,0] direction = 0 x,y = 0, 0 command = list(command) for com in command: if com == "R": direction = (direction + 1)%4 elif com == "L": if direction > 0: direction -= 1 else: direction = 3 elif com == "G": x += dx[direction] y += dy[direction] elif ..

[프로그래머스 Lv.3] 단어 변환

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr from collections import deque def solution(begin, target, words): if target not in words: # words 안에 없다면 0 반환 return 0 def canExchange(arr_a,arr_b): # 바꿀 수 있는 알파벳인지 확인 diff = 0 for i in range(len(arr_a)): if arr_a[i] != arr_b[i]: diff += 1 if diff == 1: return True else: return False de..

Algorithm/BFS 2023.09.29