Programmers39 [프로그래머스 Lv.3] 등굣길 def solution(m, n, puddles): # m x n 크기의 격자모양 # 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다 # 오른쪽과 아래쪽으로만 움직여 집에서 학교까지 갈 수 있는 최단경로의 개수를 1,000,000,007로 나눈 나머지 # 0 1 1 1 # 1 0 1 2 # 1 1 2 4 area = [[0]*m for _ in range(n)] for x, y in puddles: area[y-1][x-1] = 1 dp = [[0]*m for _ in range(n)] for i in range(1,n): if area[i][0] == 0: .. 2024. 7. 15. [프로그래머스 Lv.1] 덧칠하기 def solution(n, m, section): answer = 0 painted = 0 for s in section: if s > painted: painted = s+m-1 answer += 1 return answer 2024. 7. 15. [프로그래머스 Lv.2] 더 맵게 import heapqdef solution(scoville, K): answer = 0 # 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다 # 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다. # 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) # 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다. hq = [] for data in scoville: heapq.heappush(hq,data) while True: if hq and len(hq) ==.. 2024. 7. 15. [프로그래머스 Lv.3] N으로 표현 def solution(N, number): answer = -1 if N == number: return 1 # N을 i+1번 사용했을 때 만들 수 있는 값들 dp = [set() for i in range(9)] for i in range(1,9): dp[i].add(int(str(N)*i)) for i in range(2,9): for j in range(1,i): for term1 in dp[j]: for term2 in dp[i-j]: dp[i].add(term1 + term2) dp[.. 2024. 7. 4. [프로그래머스] 안전지대 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 본 문제는 지뢰가 설치된 영역이 주어지고, 지뢰가 설치된 자리와 지뢰를 둘러싼 자리들이 위험지대라고 가정할 때 안.. 2024. 6. 9. [프로그래머스] 숫자의 표현 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 2024. 1. 5. 이전 1 2 3 4 ··· 7 다음