월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
k번째 약수 문제 관련 질문드립니다.
# k번째 약수 import sys def return_numbers(x): number_list = [] for i in range(1, x+1) : if x%i == 0: number_list.append(i) return number_list sys.stdin = open('input.txt', 'rt') num, k = map(int, input('숫자, n번째 지정 : ').split()) number_list = return_numbers(num) if len(number_list) < k : print(-1) else : print(number_list[k-1]) ------------------------------------------- 위와 같이 코드를 작성해서 채점했는데 틀린 답변이 되어서 질문드립니다. 설명해주신 코드는 모두 이해했지만, 어느부분에서 제가 놓친 부분이 있는지 여쭈어 보고 싶습니다. 감사합니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
마지막 인풋 테스트케이스 반례 질문입니다!
안녕하세요! 질 좋은 강의에 감사인사부터 드립니다 :) 다름이 아니라 해당 문제에 대해 강사님의 아이디어만 듣고 스스로 구현해보았는데, 마지막 인풋 테스트 케이스에서 오답이 발생하는데요!? 이후에 강사님 풀이를 보고 조건 하나가 빠져서 오답이 발생했다는 것은 알았는데, 왜 오답이 발생하는지에 대해서는 잘 모르겠어서요.. 인풋이 워낙 큰 값이어서 디버깅하기가 힘드네요.. 우선 마지막 인풋 테스트 케이스는 input: 7 8945 output: 1790 인데요! 제가 처음에 작성한 코드는 아래 코드인데요! 선생님 풀이를 본 후 추가시킨 if 문이 주석 처리 해준 부분입니다. 왜 제 풀이로 하면 마지막 인풋에 대해서 1063이라는 아웃풋이 나오게 될까요..? 근본적인 이유가 궁금하네요.. s, e = map(int, input().split()) move = [1, -1, 5] MAX = int(1e4) distance = [-1] * (MAX+1) distance[s] = 0 # 출발지점 거리 0으로 초기화 queue = deque([s]) while queue: pos = queue.popleft() if pos == e: break # 3가지 방법으로 이동 for m in move: #if 0 < pos + m <= MAX: # 이 조건이 없으면 마지막 인풋 오답나옴 if distance[pos + m] == -1: # 방문한 곳 아니라면! distance[pos + m] = distance[pos] + 1 queue.append(pos + m) print(distance[e])
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS를 활용한 슬라이딩 윈도우 결과 만드는 방법 질문입니다!
안녕하세요! 강의 잘 듣고 있습니다! 강의 내용과 살짝 벗어나긴 한데 너무 궁금해서 질문드립니다 ㅜㅜ 구체적인 방법론을 제게 알려주시기보다 가능하다/불가능하다로만 답변 주시면 감사하겠습니다! 그 이후로는 제가 연구해볼게요! 아래과 같은 리스트가 존재할 때, 1개부터 5개까지 슬라이딩 윈도우 경우의 수를 탐색하고 싶을 때 DFS를 활용해서 구현할 수 있나요?? 예를 들어, [1,2,3] 이 있을 때, 결과값이 [1], [2], [3], [1,2], [2,3], [1,2,3] 이렇게 결과가 나오는 것을 DFS로는 구현이 가능한가요? 이중 for loop로 구현은 했는데.. 이게 리스트 크기가 커지면 시간초과 문제가 발생할 것 같아 DFS로 구현하는 방법이 있나 문의드립니다 ㅜㅜ 가능하다/불가능하다로만 답변주시면 정말 감사하겠습니다! 제가 이중 loop로 구현한 코드는 아래와 같습니다! sets = ['a', 'b', 'c', 'd', 'e'] n = len(sets) for size in range(1, n+1): for i in range(n-size+1): window = sets[i:i+size] print(''.join(window))
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
코딩테스트 대비(프로그래머스 레벨1)
안녕하세요 파이썬 문제풀이 강의 듣고 있는 사람입니다. 이 강의에 있는 문법과 지금 코드 구현력 기르기 ,시뮬레이션까지 듣고 어느정도 익숙해진 상황인데 제가 준비하는 기업 테스가 프로그래머스로 진행된다고 하네요.. (약 4일정도남음) 테스트 난이도가 프로그래머스 1~2 정도라고합니다. 어떤식으로 공부를 진행해야 빠르게 준비 할수 있을까요!!? 레벨 1까지만이라도 공부해보려고 합니다 남은시간.. 여기 강의 에있는 이분탐색과 자료구조 강의까지 완독후 레벨 1 을 직접 접근해도 가능할까요? 지금 당장 프로그래머스 문제를 풀려고하니 도저히 풀기가 힘들었어서 이렇게 문의 뒤늦게라도 드립니다 ㅠㅠ 조언 부탁드립니다..
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
뒤집은 소수
안녕하세요 강사님 강의 잘보고있습니다! 이번강의에선 앞선 강의인 에라토스테네스체 방법없이 구현하셨는데 이렇게 하신 이유가 제 생각에는 2가지 이유인거같은데 맞는지 여쭤보고 싶어서 이렇게 글을 올리게 되었습니다. 1. 리스트에 입력값을 저장하게되는데 이 값들이 어떤 값들이 들어올지 모릅니다. 2. 에라토스테네스 체 방법을 하려면 각 숫자에 따른 빈 리스트를 만들어야합니다. 그래서 리스트안에 있는 입력값에 따라 빈 리스트 크기가 달라져서 인거 같다고 생각했습니다. 혹시 맞을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
59번째줄 코드 관련 질문
선생님 수업 잘 듣고 있습니다. 감사합니다. 59번째줄 그 행 번호까지 탐색한다고 하셨으니, for y in range(23, height-1, -1): 아닌가 여쭤봅니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
for 문에서의 list 값 질문있습니다!!!
test=[0,0,0,0] for i in range(4): test2=test test2[i]=1 print(test2) 다음과 같이 for문을 돌릴때마다 test2값을 test 리스르로 초기화 하면 제가 생각하는 예상값은 [1, 0, 0, 0] [0, 1, 0, 0] [0, 0, 1, 0] [0, 0, 0, 1] 인데 실제 결과값은 test2값을 test로 초기화하지 못하고 [1, 0, 0, 0] [1, 1, 0, 0] [1, 1, 1, 0] [1, 1, 1, 1] 으로 나오는데.. 이것은 뭐때문에 그런건가요?? 확인해보니 test값도 동일하게 변수값이 들어가네요 ㅠㅠ 그렇다고 append 함수를 써서 test값을 유지한다고 하면 test=[0,0,0,0] for i in range(4): test2.append(test) test2[i]=1 print(test2) 결과값이 [1] [1, 1] [1, 1, 1] [1, 1, 1, 1] 처럼 나오네요.. 원하는 결과값은 얻는 방법이 무엇이고, 왜 이런 결과가 나오는지 알고싶어요
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
랜센자르기(결정알고리즘)
랜선자르기(결정알고리즘) 문제에서 print(res)는 200이 나오는데 print(mid)는 201이 나옵니다. mid가 200이었을 때 lt는 lt=201, rt=200인 상태에서 while문이 종료될 덴데 그러면 res나 mid나 모두 200이 되어야 할텐데 어떻게 mid가 201되는지 이해가 안됩니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
질문있습니다!
N, M = map(int, input().split()) my_list = [0 for _ in range(N+M+1)] for i in range(1,M+1): for j in range(1,N+1): my_list[i+j] += 1 for i in range(len(my_list)): if my_list[i] == max(my_list): print(i, end = ' ') 5 6 7 마지막 for문처럼 리스트를 순회하면서 max값과 같은 것을 출력할 때 end = ' ' 로 인해서 마지막 7을 출력하고 공백도 한 칸 출력되는 것 같습니다.. 5 6 7 5 6 7 위에처럼 나와야 정답 같은데 밑에처럼 나오는 코드도 선생님께서 올려주신 테스트케이스는 다 통과 하더라구요. 실제로 코딩테스트에서 이러한 부분이 문제가 되지는 않나요? 아니면 공백없이 5 6 7 만 나오게 하는 다른 방식으로 출력하는게 있나요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 에러 납니다.
소스 코드에 있는 N=int(input()) dy=[0]*(N+1) dy[1]=1 dy[2]=2 for i in range(3, N+2): dy[i]=dy[i-1]+dy[i-2] print(dy[N+1]) 이 코드를 실행하면 Traceback (most recent call last): File "main.py", line 6, in <module> dy[i]=dy[i-1]+dy[i-2] IndexError: list assignment index out of range 이런 에러가 나오는데 dy=[0]*(N+2)로 바뀌어야 합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
dp 질문입니다.
dp 문제를 풀 때 아 이게 dp 문제다 할만한 근거를 어떻게 찾을 수 있을까요? 이전 강의에서 완탐, dfs, bfs 배운 이후로 대부분의 문제가 완탐, dfs, bfs로 풀면 될 것 같아서 잘 분별이 안됩니다. dp와 마찬가지로 이분탐색도 완탐으로 풀 수 있을 것 같은데 언제 완탐으로 풀고 언제 이분탐색으로 푸는 것이죠?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
체크 배열 함수 만드는데 질문있습니다.
선생님께서 2차원 체크 배열 만드실때 항상 ch=[[0] *n for _ in range(n)] 과 같이 만드시는데, 왜 ch=[[0]*n]*n 으로 만들면 안될까요 예를 들어 n이 3일때 ch=[[0] *3 for _ in range(3)] print(ch) => [[0, 0, 0], [0, 0, 0], [0, 0, 0]] ch2=[[0]*3]*3 print(ch2) => [[0, 0, 0], [0, 0, 0], [0, 0, 0]] print값은 둘다 동일한데 ch[0][2]=1 ch2[0][2]=1 을 넣으면 print(ch) =>[[0,0,1],[0,0,0],[0,0,0]] ch2=[[0]*3]*3 print(ch2) =>[[0,0,1],[0,0,1],[0,0,1]] 이렇게 결과가도출되네요.. 어떻게 다른지 알려주세요 ㅠㅠ
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
제 코드가 틀린것일까요?
우선 풀이를 보지 않고 작성한 코드입니다. import sys sys.stdin=open("input.txt", "rt") n,m=map(int, input().split()) a=list(map(int, str(n))) b=[] x=1 while x: b.append(a[0]) a.pop(0) if len(a)==0: break while b[-1]<a[0]: b.pop(-1) m-=1 if len(b)==0: break elif m==0: for i in range(len(a)): print(a[i]) b.append(a[i]) x=0 break if m>0: for i in range(m): b.pop(-1) for x in b: print(x, end='') 채점시 case #04 에서만 wrong answer가 뜨는데, 중간에 while문 안에서 m==0 일때 break가 안드네요. 일시적인 오류인건가 하는데 이해가 안가서요.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 7 등산하기 DFS
섹션 7 DFS 문제를풀다가 return 함수에대해 혼동이 생겨서 여쭤봅니다. import sys #sys.stdin=open('input.txt', 'rt') n=int(input()) max=0 min=217000 maxArr=[] minArr=[] a=[list(map(int,input().split())) for _ in range(n)] cnt=0 for i in range(len(a)): for j in range(len(a[i])): if a[i][j] < min : min=a[i][j] minArr=[i,j] if a[i][j]>max: max=a[i][j] maxArr=[i,j] dx=[0,1,0,-1] dy=[1,0,-1,0] def DFS(x,y): global cnt if x==maxArr[0] and y==maxArr[1]: cnt+=1 else: for i in range(4): xx=x+dx[i] yy=y+dy[i] if 0<=xx<n and 0<=yy<n and a[x][y]<a[xx][yy]: DFS(xx,yy) # else: # return DFS(minArr[0], minArr[1]) print(cnt) 다음과 같이 풀어서 답을 맞췄었는데 주석처리된 else return을 넣으면 위의 코드에서 어떤부분이 달라지는건가요? return이 함수를 종료시키라는 뜻이므로 0<=xx<n and 0<=yy<n and a[x][y]<a[xx][yy] 에 해당하지 않는 값이 나왔을때 return 이 되고 다음함수로 넘어가는게 아닌가요??
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 7 미로탐색 문제 왜 체크함수로 풀면 오답이나오나요?
import sys from collections import deque #sys.stdin=open("input.txt", "r") dx=[-1, 0, 1, 0] dy=[0, 1, 0, -1] def DFS(x, y): global cnt if x==6 and y==6: cnt+=1 else: for i in range(4): xx=x+dx[i] yy=y+dy[i] if 0<=xx<=6 and 0<=yy<=6 and board[xx][yy]==0: board[xx][yy]=1 DFS(xx, yy) board[xx][yy]=0 if __name__=="__main__": board=[list(map(int, input().split())) for _ in range(7)] cnt=0 board[0][0]=1 DFS(0, 0) print(cnt)우 위에가 실제 정답이고, import sys from collections import deque #sys.stdin=open("input.txt", "r") dx=[-1, 0, 1, 0] dy=[0, 1, 0, -1] def DFS(x, y): global cnt if x==6 and y==6: cnt+=1 else: for i in range(4): xx=x+dx[i] yy=y+dy[i] if 0<=xx<=6 and 0<=yy<=6 and board[xx][yy]==0 and ch[xx][yy]==0: ch[xx][yy]=1 DFS(xx, yy) ch[xx][yy]=0 if __name__=="__main__": board=[list(map(int, input().split())) for _ in range(7)] ch=[[0]*8]*8 cnt=0 board[0][0]=1 DFS(0, 0) print(cnt) 왜 다음과 같이 체크리스트를 포함하면 답이 안나오고, 0만 나올까요?? 왜 저렇게 풀면 안되는지 알고싶어요!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 문제에서는 왜 체크배열을 0으로 다시 바꿔주지 않나요?
사다리 타기랑 이 문제에서는 체크 배열을 풀어주지 않는데 back할 일이 없어서 그런가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
리스트 슬라이싱을 이용한 에라토스테네스의 체 질문입니다.
N = int(input()) prime = [0, 0, 1] + [1] * (N - 2) for i in range(2, int(N ** 0.5) + 1): if prime[i]: prime[2 * i::i] = [0] * (N // i - 1) print(sum(prime)) 이런식으로 리스트 슬라이싱을 이용해서 한번에 처리해 주는 에라토스테네스의 체 구현 방법이 있었는데요. 이게 코드만 봐서 뭘 하려고 하는지 이해는 되는데 작동하는 이유가 리스트 슬라이싱을 해도 call by reference로 리스트 주소로 연결되어 있고 인덱스도 그대로 가져오기 때문이라고 이해하면 될까요??
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
테스트 케이스 2번, 5번 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님 제가 짠 코드는 강사님 답안과 동일한거 같은데 테스트 케이스 2번과 5번의 경우 답보다 1씩 더 크게 나옵니다. 2번의 답은 43으로 되어있는데 제가 짠 코드로 돌려보니 44가 나오고, 5번의 답은 190인데 제 코드에서는 191을 반환하네요. 나머지 테스트 케이스는 답과 동일하게 나오는데, 혹시 제 코드에 잘못된 부분이 있을까요? import sys sys.stdin = open(r"섹션 4/4. 마구간 정하기/in2.txt", "r") N, C = map(int, input().split()) points = [] for _ in range(N): points.append(int(input())) points.sort() # 최초 범위 설정 left = 1 right = max(points) - min(points) while left <= right: mid = (left + right) // 2 cnt = 1 # 가장 가까운 말 사이 거리의 최대값이 mid일 때 마구간에 들어갈 수 있는 말의 수; while문 돌때마다 초기화 해주어야 함 last = points[0] # 연속된 두 말 사이의 거리를 계산할 기준점; 초기값은 마구간 좌표의 맨 첫번째 값 for i in range(1, N): if points[i] - last >= mid: cnt += 1 last = points[i] if cnt < C: # 거리를 더 좁혀야 하는 경우 right = mid - 1 else: # 거리를 더 넓혀야 하는 경우 left = mid + 1 print(mid)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
k번째 약수풀이 질문
안녕하세요, k번째 약수 구하는 풀이 중 저는 빈 배열을 만들어서 만약 약수이면 빈배열에 append하여, 마지막에 배열의 인덱스 숫자를 프린트하고 싶었습니다! 코드 구현력이 아직 많이 부족하여 생각한대로 구현이되지않습니다.. ㅠㅠ 제 생각대로 짠 코드는 아래인데 실행이되지않습니다.. 어떻게 바꿔야 할까요 ? n, k = map(int, input().split()) arr = [] for i in range(n): if n % i == 0: arr = arr.append() else: print(-1) print(arr.index[k])
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파일 가져오기가 되지 않습니다ㅠ
'import'에서 에러가 난 것 같은데 이유를 모르겠네요ㅠㅠ - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.