월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
실제 코딩테스트에서 heapq 라이브러리
안녕하세요 강사님 저는 코딩테스트를 준비 중인 학생입니다. 다름이 아니라 이 문제를 저는 최소힙 자체를 구현해서 풀었는데 강사님께서는 heapq를 사용해서 간단하게 해결하신 것을 봤습니다. 실제 코딩테스트에서도 최소힙이나 최대힙 같은 문제는 이렇게 라이브러리를 사용해서 풀어도 괜찮은 건지 궁금해서 질문 올립니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제만 보고 미리 풀었지만 명료한 느낌이 아니에요
문제는 풀었는데 res = res * 10 + t같이 한번에 짧게 풀 수 있는 코드를 생각못하겠어요. 아직 저는 시간이 남았지만 코테를 볼 때 즈음이면 이러한 코드를 보고 외워야 되는건지...아니면 그냥 이대로 풀어도 되는건지 모르겠습니다. 이대로 풀면 잘은 모르지만 시간복잡도나 공간복잡도 배울때 값이 엄청 클거 같아서 고쳐야 할 부분은 고쳐야 할 것 같습니다. 현재는 선생님의 코드를 보고 "아 이렇게 활용할 수 있겠다랑 이게 있었지" 하고 메모하지도 않고 다음 문제를 푸는데 앞으로 다른 선생님이나 푸신 분 들의 코드를 보고 어떠한 생각을 하고 앞으로의 문제풀이에 접근하는게 좋을까요? 밑은 제가 영상을 안보고 푼 풀이입니다. a = int(input())b = list(map(int, input().split()))def reverse(x): c = [0] * (6) count = 0 hap = 0 while x >= 1: c[count] = x % 10 count += 1 x = x // 10 if x < 1: for t in range(count): hap += c[t] * 10**(count-1-t) return hapdef isPrime(x): cnt = 0 for i in range(2,x): if x % i != 0: cnt += 1 if x == cnt + 2: return xt = [0]*afor i in range(a): t[i] = reverse(b[i])for sd in range(len(t)): if isPrime(t[sd]) != None: print(isPrime(t[sd]), end=" ")
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
메모이제이션과 가지 컷의 관계
if dy[len] > 0: return dy[len] 코드가 가지 컷이 되는 이유가 뭔가요? 메모이제이션이 결국 빠른 시간 단축의 방법인것으로 이해햇는데 또 가지컷을 해야하니까 혼란스럽네요
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이렇게 풀어도 되나요?
n = int(input()) arr = list(map(int, input().split())) res = [0] * n for i in range(n): cnt = 0 for j in range(n): if res[j] == 0: cnt += 1 if cnt > arr[i]: res[j] = i+1 break print(*res) 맥이라 자동채점을 못하네요ㅠㅠ
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
set을 이용한 로직 간소화 질문
안녕하세요! 강의 따라가면서 실력이 늘고있는게 느껴저 기분이 좋은 학생입니다 :) 아래는 리스트/인덱스를 활용한 방법보다 조금 더 간단한 로직으로 동작 할 수 있을까 궁금하여 작성해본 코드인데요, set이라는 자료구조의 중복제거 성질을 활용하여 가로세로(check_lines함수) 및 3x3 사각형(check_rect함수)를 작성해보았습니다. 샘플 테스트케이스는 모두 통과했는데, 예외케이스가 존재할까 조마조마한 마음에 평가 요청드리고자 질문 드립니다. grid = [list(map(int, input().split())) for _ in range(9)] def check_lines(i, j): if len(set(grid[i])) != 9 or len(set(grid[:][j])) != 9: return False else: return True def check_rect(i, j): val = [] i //= 3 j //= 3 for x in range(i * 3, (i + 1) * 3): for y in range(j * 3, (j + 1) * 3): val.append(grid[x][y]) if len(set(val)) != 9: return False else: return True flag = True for i in range(9): if flag: for j in range(9): if flag: if not (check_lines(i, j) and check_rect(i, j)): flag = False else: break else: break if flag: print("YES") else: print("NO")
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
list out of range 방지
안녕하세요 강사님! 수업 잘 듣고 있습니다. 해당 문제 풀이를 본 후 궁금한 점이 있어 질문 남깁니다. 저는 3중 for문을 구성할 때 다음과 같이 for i in range(N-2) : for j in range(i+1, N-1): for l in range(j+1, N): i+1, j+1이 되어 list 길이(N값) 를 고려하여 각각 N-2, N-1로 조정해주었는데요! 해답 풀이에는 N으로 통일되어있어도 문제가 생기지 않는 것으로 보입니다. range를 N으로 두어도 out of range 문제가 발생하지 않는 이유를 알 수 있을까요? 이외 코드는 해답과 동일합니다. 답변 부탁드립니다. 항상 감사합니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이썬 기본개념
파이썬 기본 개념을 여기 나와있는것만 듣고 알고리즘 공부해도 충분한가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 풀다가 질문드립니다
안녕하세요 문제 풀다가 질문드립니다. ide에서 실행할 때는 잘 되었는데 채점기 사용 시 왜 exit_code1이 나오는 지를 모르겠네요... 확인해주시면 감사하겠습니다. import sys # sys.stdin = open("input.txt", 'r') number, list_sum = map(int, input().split()) user_list = list(map(int, input().split())) start = 0 end = 1 count = 0 total = user_list[0] while start != number: if total < list_sum: total += user_list[end] end += 1 elif total == list_sum: count += 1 total -= user_list[start] start += 1 else: total -= user_list[start] start += 1 if start == (number-1) and user_list[start] < list_sum: break print(count)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
블로그 업로드 관련
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님, 안녕하세요 :) 강사님의 강의를 너무 좋아하는 학생입니다. 개인적으로 공부 블로그를 운영 중인데, 출처와 함께 제 나름의 풀이과정을 정리한 문제 업로드가 가능할지 문의 드립니다. 답변 주시면 참고하도록 하겠습니다. :) 감사합니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
가로 세로 따로 판별해도 괜찮을까요??
def solution() : board = [list(map(int, input().split())) for _ in range(7)] cnt = 0 # row for i in range(7) : for j in range(3) : if board[i][j:j+5] == board[i][j:j+5][::-1] : cnt += 1 #column for i in range(7) : for j in range(3) : tmp = [] for k in range(5) : tmp.append(board[j+k][i]) if tmp == tmp[::-1] : cnt += 1 print(cnt) solution() 선생님처럼 for문 한번에 가로 세로 전부 확인하지 않고 가로, 세로 나눠서 판단하는 코드를 작성하였는데 for문을 최대한 줄여서 한번에 해결하는 것이 훨씬 더 좋은 코드인가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
곳감문제 곳감 갯수 더할 때 질문입니다.
from collections import deque def solution() : n = int(input()) tree = [list(map(int, input().split())) for _ in range(n)] m = int(input()) for _ in range(m) : c, d, v = map(int, input().split()) tmp = deque(tree[c-1]) if d == 0 : for _ in range(v) : tmp.append(tmp.popleft()) else : for _ in range(v) : tmp.appendleft(tmp.pop()) tree[c-1] = list(tmp) s = 0 e = n-1 res = 0 for i in range(n) : res += sum(tree[i][s : e+1]) if i < n//2 : s += 1 e -= 1 else : s -= 1 e += 1 print(res) solution() 코드는 위와 같습니다. 마지막에 곳감갯수 더하실 때 for문을 활용하여 더하셨는데 위 코드처럼 슬라이싱과 sum을 활용해도 괜찮을까요??for문을 사용하는것이 시간복잡도가 덜 할까요??
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS 에러가 납니다
안녕하세요 강사님 DFS 로 풀어 보았는데 RecursionError: maximum recursion depth exceeded in comparison 에러가 뜹니다. 어느 부분이 문제일까요? 제가 비교해보니 강사님과 전체적인 구조는 똑같이 푼 것 같은데 자꾸 오류가 납니다. ㅠㅠ def dfs(x, y, h): visited[i][j] = 1 for k in range(4): xx = x + dx[k] yy = y + dy[k] if 0 <= xx < n and 0 <= yy < n: if visited[xx][yy] == 0 and graph[xx][yy] > h: dfs(xx, yy, h) n = int(input()) graph = [list(map(int, input().split())) for _ in range(n)] dx = [0, 1, 0, -1] dy = [1, 0, -1, 0] mmax = -2147000000 for i in range(n): for j in range(n): if graph[i][j] > mmax: mmax = graph[i][j] cnt = 0 res = 0 for h in range(100): # 높이가 100 이면 안전영역은 0개이기 때문에 할 필요 X if h > mmax: break cnt = 0 visited = [[0] * n for _ in range(n)] for i in range(n): for j in range(n): if visited[i][j] == 0 and graph[i][j] > h: cnt += 1 dfs(i, j, h) res = max(res, cnt) print(res)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
바둑이 승차문제 출력값이 자꾸 초기 result 값으로 나옵니다
global result를 해줘도 최종 출력값이 -27400000 이렇게 나옵니다. 뭐가 문제일까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
질문드립니다.
n,m=map(int,input().split()) dy=[0]*(m+1) for i in range(n): score,time=map(int,input().split()) for j in range(time,m+1): dy[j]=max(dy[j],dy[j-time]+score) print(dy[m]) 여기서 2중 for문의 range를 저렇게 잡으면 오류가 나는데... 이유가 따로 있을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드에 문제가 있는걸까요?
n,m=map(int,input().split()) jl=list() for i in range(n): a,b=map(int,input().split()) jl.append((a,b)) dy=[0]*(m+1) for i in range(n): for j in range(jl[i][0],m+1): dy[j]=max(dy[j],dy[j-jl[i][0]]+jl[i][1]) print(dy[11]) 채점시 20점이 나오네요 ㅠㅠ
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
4중 for문 질문
import sys # input = sys.stdin.readline sys.stdin = open("/Users/yerim/Downloads/pythonalgorithm_formac/문자열&1,2차원리스트탐색/10. 스도쿠 검사/in3.txt", 'r') G = [] for _ in range(9): G.append(list(map(int, input().split()))) # 1. 가로, 세로 1줄씩은 그 1줄을 임시리스트에 담아서 set()화 하여 중복을 없앤 후, 그 리스트의 길이가 9인지 확인한다! # 2. 3x3칸은 2중 for문 3번 3번 돌려서 G[i][j]를 sum에 더하여 3x3의 총 합이 45가 아니면 "NO" 출력 temp = set() for ix in range(9): for jx in range(9): temp.add(G[ix][jx]) if len(temp) != 9: print("No") sys.exit() temp = set() for iy in range(9): for jy in range(9): temp.add(G[jy][iy]) if len(temp) != 9: print("No") sys.exit() temp = set() sum = 0 for i in range(0, 9, 3): for j in range(0, 9, 3): sum += G[i][j] + G[i+1][j] + G[i+2][j] sum += G[i][j+1] + G[i+1][j+1] + G[i+2][j+1] sum += G[i][j+2] + G[i+1][j+2] + G[i+2][j+2] if sum != 45: print("No") sys.exit() sum = 0 # set 사용해도 될 듯(3X3) => 4중 for문을 해야 짧아질 듯! # for i in range(0, 9, 3): # for j in range(0, 9, 3): # temp.add(G[i][j]) # temp.add(G[i+1][j]) # temp.add(G[i+2][j]) # temp.add(G[i][j+1]) # temp.add(G[i+1][j+1]) # temp.add(G[i+2][j+1]) # temp.add(G[i][j+2]) # temp.add(G[i+1][j+2]) # temp.add(G[i+2][j+2]) # if len(temp) != 9: # print("No") # sys.exit() # temp = set() print("Yes") - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님! 제 코드입니다. for i in range(0, 9, 3): for j in range(0, 9, 3): sum += G[i][j] + G[i+1][j] + G[i+2][j] sum += G[i][j+1] + G[i+1][j+1] + G[i+2][j+1] sum += G[i][j+2] + G[i+1][j+2] + G[i+2][j+2] 이 부분에서 강의에서는 4중 for문을 사용했던데, 저는 2중 for문을 사용했지만 결국 돌아가는 원리는 똑같은 것 같거든요. 이러면 4중 for문이든 2중이든 시간복잡도 면에서는 별 차이가 없는 건가요?ㅎㅎ
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
open 경로 이상
open 함수를 통하여 텍스트 파일을 생성하고 열려고 하는데 제가 원하는건 .py 파일이 들어있는 폴더에 텍스트 파일이 생성되는 것인데 다른 폴더에 생성이 됩니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
선생님! (알파코드 DFS)
import sys input = sys.stdin.readline # 아스키 : chr(x) # 0 입력되면 입력 종료 def DFS(L): global cnt, res if L == len(num): if len(res) > len(num): res = res[2:] # pop, slicing 둘 다 O(N). pop(0)을 2번 하면, 2N이니까 슬라이싱 사용. pop(0)을 O(1)로 하려면 deque사용하면 됨 print("".join(res)) # print(res) cnt += 1 return a = int(num[L]) b = int("".join(num[L:L+2])) if a == 0: return if 0 < a < 10: res.append(chr(a+64)) # res.append(a) DFS(L+1) res.pop() if 9 < b < 27: res.append(chr(b+64)) # res.append(b) DFS(L+2) res.pop() if __name__ == "__main__": num = list(str(input()).rstrip()) res = [] cnt = 0 DFS(0) print(cnt) - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의에 나온 방법 외에 숫자를 1글자, 2글자로 나눠서 트리를 만드는 방법으로 코드를 구현해봤는데 어떤가요...?! 괜찮은가요??! for문을 이용하지 않고 거의다 조건문으로 굴러가는 코드인데, 시간복잡도 등 차이가 많이 있을까요?? 처음으로 정답코드 안보고 구현해본 DFS코드라 선생님이 보시기엔 어떤지가 궁금합니다..!! ㅎㅎ
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
IsPrime 함수에서 for문 범위 질문 드립니다.
def isPrime(x): ''' 소수인지 판별하는 함수 ''' if x==1: return False for i in range(2,x//2+1): if x%i==0: return False else: return True 위 for문에서 범위가 2부터 x를 2로나눈 몫까지 반복되는데, 예시로 들어주신 16의 경우, i가 2,3,4,5,6,7,8까지 반복문이 돌게 됩니다. 그런데 마지막 8의 경우는 2로 나눴을 때 이미 2*8=16으로 한번 나눠지게 되니 for문에 포함이 안되어도 될 것 같은데 아닌가요? range의 범위가 range(2,x//2)로 수정되어야 할 것 같은데, 맞는건지 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
ch배열의 길이를 n+1로 해주는 이유가 뭘까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. n=int(input()) ch=[0]*(n+1) cnt=0 이 부분에서 ch배열의 크기를 왜 (n+1)만큼 곱해주나요? 그럼 배열이 n보다 하나 더 큰 수로 만들어지지 않나요?