본문 바로가기

CodingTest

(238)
[ Programmers / 파이썬 ] 정수 삼각형 Dynamic Programming 풀이 1. (실패, 풀이 소요 시간 15분) def solution(triangle): answer = 0 h = len(triangle) dp = [[0]*i for i in range(1,h+1)] dp[0] = triangle[0] for i in range(1, h): for j in range(i): if j == 0: dp[i][j] = dp[i-1][j] + triangle[i][j] elif j == h: dp[i][j] = dp[i-1][j-1] + triangle[i][j] else: dp[i][j] = max(dp[i-1][j], dp[i-1][j-1]) + triangle[i][j] answer = max(dp[h-1]) return answer ..
[ BOJ / 파이썬 ] 2146. 다리 만들기 와아.. BFS 이제 뚫렸나보다.. 행복해.. 재밌어.. 풀이 소요 시간 30분. 통과 # 2:40 from collections import deque n = int(input()) def make_continent(i, j, board, visited, index): n = len(board) dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] q = deque([(i, j)]) visited[i][j] = True board[i][j] = index while q: x, y = q.popleft() for k in range(4): nx = x + dx[k] ny = y + dy[k] if 0
[ BOJ / 파이썬 ] 2573. 빙산 오예 : ) 간만에 한 번에 뚫었다. from collections import deque dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] def get_iceberg_num(board): n, m = len(board), len(board[0]) count = 0 visited = [[False] * m for _ in range(n)] for i in range(n): for j in range(m): if board[i][j] != 0 and not visited[i][j]: count += 1 q = deque([(i, j)]) visited[i][j] = True while q: x, y = q.popleft() for k in range(4): nx = x + dx[k] n..
[ BOJ / 파이썬 ] 9466. 텀 프로젝트 보호되어 있는 글입니다.
[ BOJ / 파이썬 ] 11559. Puyo Puyo 40분 걸려서 풀었는데.. 18%인가에서 '틀렸습니다.' .. 😥😥 확실히 시뮬레이션 유형, 그니까 코드 구현력이 약하다.. 많이 풀면서 속도와 정확도 올리는 것에 관심 가져야겠다. 1차 제출. 실패 코드. 풀이시간 40분 import sys input = sys.stdin.readline from collections import deque dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] def bfs(a, b, field): visited = [[False]*6 for _ in range(12)] q = deque([(a, b)]) visited[a][b] = True puyos = [] while q: x, y = q.popleft() puyos.append((x, y)) for..
[ BOJ / 파이썬 ] 6603. 로또 백트래킹으로 구현했다. 음.. N과M시리즈를 다시 풀어야겠다. 해당 문제에서 시간이 걸리면 안되는데.. 음.. 순간 순열 구현 아이디어가 안 떠올랐다. 해결법은 .. 오름차순인걸 이용해서 새로 넣는 값이 이미 저장한 배열의 마지막 값보다 큰 경우에만 들어가게끔 해줬다. import sys input = sys.stdin.readline def make_nums(count, k, data, lotto): global visited if count == 6: print(*lotto) return for i in range(k): if data[i] not in lotto: if not lotto or (lotto and lotto[-1] < data[i]): lotto.append(data[i]) make_..
[ BOJ / 파이썬 ] 6593. 상범빌딩 아싸 ~ 3차원 BFS ..! 아 인덱스 때문에 머리 꼬여서 고생했는데 하루 자고 풀어보니까 풀린다 ㅎㅎㅎㅎㅎㅎ 행복해 ~ 재밌어 코테 ㅎㅎㅎㅎ 그 .. 개인적으로 3차원에서 z 인덱스를 맨 앞으로 뺀다는 부분에서 헷갈리지 말아야 한다. import sys input = sys.stdin.readline from collections import deque # 동 서 남 북 위 아래 dx = [-1, 0, 1, 0, 0, 0] dy = [0, 1, 0, -1, 0, 0] dz = [0, 0, 0, 0, -1, 1] def bfs(): q = deque([(sz, sx, sy)]) building[sz][sx][sy] = 0 while q: z, x, y = q.popleft() for i in range..
[ BOJ / 파이썬 ] 14501.퇴사 공부의 참맛을 느껴가는 중... 아 기분 좋다 진짜 ..🤸‍♀️ 해당 문제는 현재 한국 코테 바이블 이코테에 수록되어 있는 문제인데 대학 다니면서 처음 코딩테스트에 대해 접한 초반에 풀어보고 진짜 이해가 도통 되지 않아 좌절했던 문제다. 풀이가 이해된 뒤에도 뒤에서부터 인덱스를 접근해야만 이 문제를 풀 수 있나..? 싶어서 계속 의아했었는데 드디어 내 사고방식에 근거해서 이 문제를 풀 수 있었다. n = int(input()) T = [] P = [] total = [0] * (n+1) for i in range(n): time, price = map(int, input().split()) T.append(time) P.append(price) for i in range(n): if i > 0: tota..
[ BOJ / 파이썬 ] 9461. 파도반 수열 dp 좋다.. 감이 잡히니까 확실히 내 타입 문제란 걸 알겠다. 원래도 규칙성 있는 걸 좋아해서 수열 문제 좋아했는데, DP자체가 일반항 세우는거라 불규칙성 속에서 규칙 찾아내는 게 핵심이라 수열 문제가 많은 것이었다. 그래서 DP가 비교적 난이도가 쉬운 문제도 많이 분포하는 것이었다. 그러니까 DP문제는 사실상 DP테이블을 만드는 자체가 힘든게 아니라 DP테이블, 즉 메모제이션(탑다운 방식)을 차용할 생각만 떠올리면 되는것이고, 그 규칙을 찾아내느냐가 핵심인 경우가 많았다. 물론 내가 문제를 아직 많이 못 접해서 DP테이블을 어렵게 사용하는 걸 모르기 때문에 하는 얘기일 수도 있다. 어렵게 내려면 엄청 어려워질 수 있다고 한다. 뭐 이거야 계속 하다보면 늘겠지.. 하여간 해당 문제는 이게 수열이라는걸 ..
[ BOJ / 파이썬 ] 코테. 증가하는 부분 수열(LIS) 문제 시리즈 LIS 문제 푸는 알고리즘 1. O(N²) 1 부터 n 까지 차례대로, 본인보다 인덱스 작은 애들 살피며 본인 값보다 작은 값을 가진 애들 중 가장 dp 값이 큰 애를 찾는다. 계속 갱신. 그 큰 dp값으로 갱신된 상태 +1 (본인) 2. O(NlogN) 문제 샘플 1. 11053 가장 긴 증가하는 부분수열 ( 링크 ) ✅(O(N²) 풀이 ) 2. 11055 가장 큰 증가 부분 수열 ( 링크 ) ✅(O(N²) 풀이 )