본문 바로가기

CodingTest/Baekjun Online Judge

(111)
[ 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²) 풀이 )
[ BOJ / 파이썬 ] 2193. 이친수 일단 문제 파악 위해 쭉 경우의 수를 써내려갔다. 1자리 1 2자리 10 3자리 100 101 4자리 1000 1001 1010 5자리 10000 10001 10010 10100 10101 일단 보통 초기값은 1개나 2개 잡는다고 가정하며 n항과 n-1항 사이 관계식 도출하려고 생각해보는데. 오 싹 스쳤다.. 사실상 5자리수는 4자리수를 안고 있어서는 안된다. 반면, 3자리수부터 2자리, 1자리수는 모두 안고있다. 왜냐하면 바로 다음자리수를 안는다면 11이 연달아서 나오니까!. 1자리, 2자리에서 점차 늘리는건 보통 조건에 부합한다는걸 보장하므로 신경안쓰고! 바로 이전자리수 뺀 모든 자리수들의 합 + 1 이 되는 셈이다. .. 엥 근데 왜 풀이를 이렇게 했지.. 직관적으로 풀기는 했는데 정리하려니 .....