월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
바둑이 승차문제
안녕하세요! 바둑이 승차 문제 풀이 영상을 보고 다른 풀이로도 한번 풀어봤는데 예제 입출력대로는 제대로 나오는데 혹시 제 풀이가 맞는지 질문하고자 코드를 올립니다.C,N=map(int,input().split()) weights=[] result=[] for _ in range(N): weights.append(int(input())) def dfs(L,sum): if sum>C: return if L==N: result.append(sum) else: dfs(L+1,sum+weights[L]) dfs(L+1,sum) dfs(0,0) print(max(result))
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
휴가 DFS 문제 질문
def DFS(L, sum): global res if L == n+1: if res < sum: res = sum else: # 상담을 한다고 했을떄 L번쨰 상담을 한다고 했을떄 if L + T[L] <= n+1: DFS(T[L]+L, sum + P[L]) DFS(L+1, sum) if __name__ == "__main__": n = int(input()) T = list() P = list() for i in range(n): a, b = map(int, input().split()) T.append(a) P.append(b) res = -2147000000 T.insert(0, 0) P.insert(0, 0) DFS(1, 0) print(res) 제가 구현할떄 else 문에 if L + T[L] <= n+1: 이라는 코드를 작성하지 않아도 정상적으로 코드가 실행했습니다. 이 if 문 같은 경우에는 위의 else 문에서 다 해결해주는 부분이 아닌가 싶어서 저는 작성하지 않았습니다. 혹시 if L != n+1 하고 if L + T[L] <= n+1: 하고 다른게 있을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 7-14 안전영역에서 print가 출력되지 않습니다.
안녕하세요 강사님! 저는 채점기 관련 오류로 프로그램을 직접 실행하고 input과 output을 비교하는 것을 통해 채점을 하고 있습니다.그런데 섹션 7-14 안전영역을 DFS로 푼 문제에서 재귀가 1000이 넘는 input4, input5를 실행했을 때 print 결과가 출력되지 않습니다. setrecursionlimit도 제대로 설정했는데 이렇습니다. 아무 에러메세지 없이 종료됩니다디버깅으로 확인해보니 첫루프에서 재귀가 계속 진행되다가 어느순간 프로그램이 자동으로 종료되는 것 같습니다. 강사님이 작성하신 코드로 테스트해봐도 똑같은 현상이 발생합니다.혹시 몰라 제가 작성한 코드와 출력결과도 첨부드립니다 print 안되는 문제를 고치려다보니 강사님 코드와 많이 비슷해졌습니다# 14. 안전영역 (DFS) import sys sys.stdin=open("inflearn/section_7/input.txt", "r") sys.setrecursionlimit(100000) input = sys.stdin.readline def DFS(x, y, h): chk[x][y] = 1 for i in range(4): xx = x + dx[i] yy = y + dy[i] if 0<=xx<N and 0<=yy<N and board[xx][yy] > h and chk[xx][yy] == 0: DFS(xx, yy, h) if __name__=="__main__": N = int(input()) board = [list(map(int, input().split())) for _ in range(N)] max_cnt = 0 dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] for height in range(1, 100): cnt = 0 chk = [[0 for _ in range(N)] for _ in range(N)] for x in range(N): for y in range(N): if chk[x][y] == 0 and board[x][y] > height: DFS(x, y, height) cnt += 1 max_cnt = max(max_cnt, cnt) if cnt == 0: break print(max_cnt)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션3. 두 리스트 합치기 질문입니다
안녕하세요 강사님섹션3의 4번째 문제 (두 리스트 합치기) 를 듣다가 궁금한게 생겨서 문의 드립니다 강사님 코드는 while p1<n and p2<m: 조건을 걸고 while문 밖에서두 포인트 지점 p1, p2에 조건을 추가해 마지막처리를 하셨는데while p1 < n and p2 < m: if a[p1] <= b[p2]: c.append(a[p1]) p1 += 1 else: c.append(b[p2]) p2 += 1if p1 < n: c = c + a[p1:]elif p2 < m: c = c + b[p2:]for x in c: print(c, end=' ')저는 이렇게 while문을 무한루프로 만들고 while문 안에서 break 조건을 걸어서 처리했는데 이렇게 하면 안좋거나 잘못된 코드인가요?while True: if a[p1] <= b[p2]: c.append(a[p1]) p1 += 1 if p1 == n: c.extend(b[p2:]) break else: c.append(b[p2]) p2 += 1 if p2 == m: c.extend(a[p1:]) breakprint(c)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
조합 구하기 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.def DFS(L, s): global cnt if L == m: for j in range(L): print(res[j], end =' ') cnt += 1 print() else: for i in range(s, n+1): res[L] = i # 교수님꼐서는 i+1로 하셨고 저는 s+i로 했습니다. DFS(L + 1, s + i) if __name__ == "__main__": n, m = map(int, input().split()) res = [0] * (n+1) cnt = 0 # DFS(L, s)라 하면 s는 가지니까 즉 처음에는 1, 2, 3, 4돌고 그다음은 2, 3, 4돌고 이런식으로 해야 # 순서를 고려안할 수 있다. DFS(0, 1) print(cnt) 안녕하세요 교수님! 코드를 작성하다가 질문이 있어서 질문 드립니다. 제가 교수님의 강의를 먼저 듣고 코드 구현 보기전에 저렇게 코드를 작성했습니다. 그러나 다른 코드는 다 같은데 한가지 다른 부분이있었습니다. else 문에서 교수님께서는 DFS(L+1, i+1)으로 하셨고 저는 어짜피 s는 1부터 시작하고 i도 똑같이 1부터 n+1까지 증가하기에 s+i라고 생각하여 코드를 작성했습니다. 이렇게 해도 혹시 문제는 없는지 i+1로 해야만 한다면 왜 그런지 이유를 알고 싶습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
곳감과 사과나무 질문입니다
선생님 !!곳감과 사과나무 문제 합에 대한 부분인 if i<n//2부분에서 i가 2일때는 else부분에 속해지게 되는데 왜 if부분에서의 계산이 이루어지는지 궁금합니다!!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
8. 순열구하기 (DFS) 질문입니다.
def DFS(L): global cnt # 종료 => 즉 출력 if L == m: # res에 m개를 뽑은 수를 저장했으므로 출력한다. for j in range(m): print(res[j], end=' ') cnt += 1 print() else: # 가지 뻗기 for i in range(1, n + 1): if ch[i] == 0: ch[i] = 1 res[L] = i DFS(L + 1) ch[i] = 0 if __name__ == "__main__": n, m = map(int, input().split()) # 순열이기때문에 겹치지않게 하기 위해 0과 1로 구분. ch = [0] * (n + 1) res = [0] * m cnt = 0 DFS(0) print(cnt) 궁금한 점이 있어 질문드립니다. 교수님이 짜주신 코드를 보면 for j in range(L)이라고 나와있습니다. 저는 처음에 m번을 뽑아야해서 인덱스가 m개만 필요하므로 저는 m번만큼 반복문이 돌아 출력할 수 있도록 코드를 짰는데 L이 아닌 m으로 짜도 코드가 정상 작동했습니다. 이렇게 짜도 혹시 괜찮은게 맞는지 여부가 궁금합니다.또한 cnt+=1 을 for j문 안에 넣었을 경우에 12가 출력되었습니다. 왜그런지 알꺼같으나 1 2 1 3 2 1 2 3 3 1 3 2 이거를 모두 한개씩 for문 돌면서 받아들여 12라고 출력되는거 같기는한데 이게 맞는건가요?그리고 마지막으로 print()의 위치가 교수님의 코드에는 print() 다음 cnt+= 1 이렇게 되있는데 저는 순서를 cnt+=1 print()이렇게 했는데 답에는 문제가 없었습니다. 혹시 순서를 변경해도 코드 실행 속도에 영향을 미치지 않는지 여부가 궁금합니다.항상 좋은강의 감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 이해가 잘 안되요
안녕하세요 선생님 문제가 잘 이해되질 않아 이렇게 질문을 남깁니다.[2:50] 모든 말들의 거리는 5보다 크거나 같아야 한다.가장 가까운 두 말의 거리가 최대로 된다는 말이 무엇인가요? 예를들어 3마리의 말이 1, 4, 9 or 1, 4, 8이 최대라고 생각을 하는데 맞나요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
마지막 else 들여쓰기가 헷갈립니다.
if 와 else 가 같은 선상에 있으니 정답이 5가 나오는데break가 걸리면 else:가 실행되지 못하도록 하기 위함인가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
tsum 관련해서 질문드립니다
시간초과 (4, 5번) 해결을 위해서 tsum 조건을 추가하셨는데, 이 경우 worst case에서는 시간초과가 발생할수밖에 없지 않나요? 혹시 완전탐색(DFS) 외 다른 방법으로 찾아봐야 하지 않나요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
Mac 강의자료 다운로드 오류
Mac을 쓰고있는데 강의자료 다운로드 받는란이 별도로 없는거 같습니다 mm7044@naver.com메일로 보내주실 수 있나요
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
채점기에 파일을 넣었는데 다음과 같이 뜨면 뭐가 문제인가요?
파이참으로 연동해서 문제 코드 채첨 풀더에 옮겨 넣었는데이렇게 뜨면서 채점이안되네요..
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
채점기 오류
.아까 그 ++++ 오류는 풀었는데 이번엔 이게 문제내요 어떻게 해야하나요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
채점기 오류
저기 이름이 뭐 ++++++2 로나오고 프로그램 자체가 안돌아가요
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
봉우리질문
안녕하세요.!![ 탐색 ] 봉우리 문제 질문 드립니다.제가 적은 코드는 아래와 같습니다.for i in range(1,n+1): for j in range(1,n+1): Max = mountain[i][j] for k in range(4): if mountain[i+dx[k]][j+dy[k]] >Max: break else: count+=1 선생님께서 적은 코드와 논리상의 차이는 없어보이는데... 출력값이 다르게 나옵니다..제 생각에는,, 제 코드가 all이 안돼서 좀 더 많은 값이 나오는 것 같은데.. 혹시 뭐가 문제인지 봐주실 수 있을까요? 아래 코드는 선생님의 코드입니다.for i in range(1, n+1): for j in range(1, n+1): if all(a[i][j]>a[i+dx[k]][j+dy[k]] for k in range(4)): cnt+=1감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
카드 역배치 문제 질문있습니다.
import sys input=sys.stdin.readline card=list(range(21)) for _ in range(10): start,end=map(int,input().split()) tmp=card[start:end+1] tmp.sort(reverse=True) card[start:end+1]=tmp for i in range(1,len(card)): print(card[i],end=" ")위와 같은 코드로 작성을 했는데 10가지의 경우에 어떤 경우에는 역배치가 잘 되는데 어떤 경우에는 역배치가 되지 않습니다. 이 코드의 문제점을 모르겠습니다...!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
채점기 작동오류
채점을 하려는데 이런 오류가 뜨고 있습니다. 코드는 import sys#sys.stdin = open('input.txt','rt')T = int(input()) for t in range(T): n, s, e, k = map(int, input().split()) a = list(map(int, input().split())) print('#{} {}'.format(t+1, sorted(a[s-1:e])[k-1])) 입니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
K 번째 큰 수 3중 for문 부분에서요!
K번쨰 큰 수 3중 for 문에서요두번쨰 for 문for j in range(i+1,n):요 문장에서 만약에 i+1이 n보다 커지면 어떻게 되는것인가요?예를들어 range(6,5)같은 상황이 나온다면오류가 나는건가요 아니면 그냥 넘어가는건가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
퀵정렬-1
김태원 강사님 좌측 파티션은 마무리를 했는데,우측 파티션을 어떻게 퀵정렬을 해야 될지 몰라서 질문 드립니다.질문의 요지는 텍스트라도 쳐서라도 중간과정을 보여주시면 감사하겠습니다.유투브도 찾아보고 print()함수도 찍어보고 했는데,결론만 나오지 과정이 나오지를 않습니다.현재 좌측 파티션까지는 이해를 했습니다.그리고 우측의 경우 중앙이라고 하기 에매한 게우측은 값의 갯수가홀수가 아니라 짝수로 4개네요 즉 좌우대칭이 되지 않습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
곳감 문제 시간복잡도에 관해서
이 문제를 시간복잡도를 생각해서 다르게 풀었는데 그 판단이 맞는지 질문드립니다.우선 저의 코드는 다음과 같습니다.def solution(): # setting sys.stdin = open('problem_8.txt', 'rt') # inputs n = int(input()) area: List[List[int]] = [list(map(int, input().split())) for _ in range(n)] m = int(input()) rotations: List[List[int]] = [list(map(int, input().split())) for _ in range(m)] # process for rotation in rotations: row_num: int = rotation[0] direction: int = rotation[1] step = rotation[2] row = area[row_num - 1] step = step if direction == 0 else -step left = row[step:] right = row[:step] area[row_num - 1] = left + right deviation: int = 0 summation: int = 0 for row_num in range(n): for column_num in range(0 + deviation, n - deviation): # 04 13 22 summation += area[row_num][column_num] if row_num < n // 2: deviation += 1 else: deviation -= 1 # output print(summation) TimeCounterRunner(solution).run()저는 슬라이싱 기능을 이용해서 했는데 이렇게 한 이유는 리스트의 pop에 파라미터를 안넘기면 시간복잡도가 1이지만 제가 알기로 파라미터가 있는 경우 N이 되는 것으로 알고 있습니다.거기에 추가로 pop은 루프를 돌면서 해야하기 때문에 N^2가 된다고 생각했습니다.거기에 회전 숫자가 1인 경우에는 insert를 써야하는데 이것도 시간복잡도가 N으로 되는 것으로 알고 있었습니다.그러면 어림잡아서 시간복잡도가 라인도 읽어야 하니까 N^3이 되는 것 같아서 저같은 경우 위에처럼 하면슬라이싱에서 N이고 리스트를 더하는 것이 제가 알기론 시간복잡도가 N이긴 하지만 중첩으로 가지 않아서 N^2로 끝날 수 있을 것 같았는데 맞는 판단인지 알고 싶습니다.