월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이썬 강의 둘 중 하나만 들어도 될까요?
강사님 강의중에 파이썬 강의가 두 개 있고, 두 강의 모두 입문용으로 되어있는데 커리큘럼을 보면 내용이 겹치는 것 같은데 [입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]]강의는 요약, [파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)]강의는 전체적으로 학습하는걸로 이해하고 이 강의만 들어도 될까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이썬 알고리즘 코딩테스트 입문 강의와 차이점이 어떤게 있나요?
파이썬 알고리즘 코딩테스트 입문 강의와 차이점이 어떤게 있나요? 문제 차이나 난이도 혹은 업데이트된 부분이 있을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
K번째 큰수 코드 작성중 3중 for문
안녕하세요 K번째 큰수 코드 작성중 3중 for문 만들때 아래와 같은 경우 에러가 발생하지 않을까 해서 break나 continue 를 넣어야 하지 않나 하는 생각이 들어 여쭙니다for i in range(n): for j in range(i+1, n): for m in range(j+1, n): res.add(a[i]+a[j]+a[m])range 가 5인 경우 i, j, m이 0, 3, 4 이후 0, 4, 5 일 때 이 경우 다른 답변에서는 for문이 멈춰버린다고 답변주셨는데 continue처럼 이 경우 작동하지 않고 다음 순환으로 넘어간다고 생각하면 될까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
시간복잡도 질문
일반적으로 알려진 시간복잡도에 따르면 input 값이 200000 정도일 경우 O(nlogn) ~ O(n) 사이의 시간복잡도에 해당한다고 생각하였는데, 이중 for문을 사용해도 시간 초과가 일어나지 않는 원인이 무엇인지 궁금합니다.
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
heap 구조에 대한 질문입니다!
heappush를 사용하면 리스트인 a가 heap의 형태로 바뀌게 되는건지 궁금합니다!교수님 풀이와는 다르게 heappush를 사용하지 않고 리스트에 append 하는 형식으로 값을 추가한 후에 heappop을 사용하게 되면 최솟값이 나오지않는것같습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 7 10번 미로탐색 반복 깊이 초과 에러
#my sol def DFS(x,y): global cnt if x>7 or y>7: return if x==7 and y==7: cnt+=1 else: for i in range(4): nx=x+dx[i] ny=y+dy[i] if maze[nx][ny]==0: maze[nx][nx]=1 DFS(nx,ny) maze[nx][nx]=0 if __name__=='__main__': maze = [list(map(int, input().split())) for _ in range(7)] maze.insert(0,[1]*7) maze.append([1]*7) for row in maze: row.insert(0,1) row.append(1) cnt=0 dx=[-1,0,1,0] dy=[0,1,0,-1] maze[1][1]=1 DFS(1,1) print(cnt) #solution 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): nx=x+dx[i] ny=y+dy[i] if 0<=nx<=6 and 0<=ny<=6 and maze[nx][ny]==0: maze[nx][nx]=1 DFS(nx,ny) maze[nx][nx]=0 if __name__=='__main__': maze = [list(map(int, input().split())) for _ in range(7)] cnt=0 maze[0][0]=1 DFS(0,0) print(cnt)위의 코드는 강의 듣기 전에 혼자 작성한 코드이고, 아래는 강의에서 알려주신 코드입니다. 두 코드가 접근 방식이 같은 것은 알고 있습니다. 그런데 제 컴퓨터에서 두 코드 모두 채점 프로그램을 돌렸을 때 결과 계산을 하지 못 합니다.(5초짜리로 해도 같고, 코드에 setrecursionlimit 추가해도 같음)import sys sys.setrecursionlimit(10**6)그리고 pdf 예제조차도 RecursionError: maximum recursion depth exceeded in comparison 에러가 납니다.(예제는 setrecursionlimit 추가 시 파이썬이 응답을 멈춰서 강제 종료됨) 혹시 제가 발견하지 못 한 코드 상의 문제가 있는 것인지、 제 컴퓨터 사양 때문인지 궁금합니다。
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
[자릿수의 합] 질문입니다.
안녕하세요 계속 오류가 떠서 여쭤봅니다.이 코드는 어떤 부분이 잘못되었는지 잘 모르겠습니다. import sys import os current_path=os.getcwd() sys.stdin=open(current_path + "\\python\\코딩테스트 강의 내용\\01 코드 구현력\\복습 파일\\" + "input.txt", "rt") N=int(input()) num_arr=list(map(int, input().split())) def digit_sum(x): result=0 for idx in range(0, len(str(x))): result+=int(str(x)[idx]) return result # 각 자리수 더한 합 for idx in range(N): arrMax=-21470000000 answer=0 if digit_sum(num_arr[idx])>arrMax: arrMax=digit_sum(num_arr[idx]) answer=num_arr[idx] print(answer)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
교육과정설계 문제 관련 질문입니다.
import sys sys.stdin = open("input.txt", "rt") a = input() order = [] n = int(input()) course = '' for TC in range(1, n+1): course = input() for x in a: order.append(x) for x in course: if x in order and x == order[0]: order.pop(0) elif x in order and x != order[0]: print("#%d NO" % TC) order.clear() break else: if len(order) != 0: order.clear() print("#%d NO" % TC) else: print("#%d YES" % TC)문제를 풀이할 때 큐를 사용하지 않고 리스트만 사용해서 작성한 코드입니다.리스트에서도 pop(0)으로 큐에서의 popleft()기능 수행이 가능하고 append도 동일하게 사용 가능한데 큐를 사용하는 이유가 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
침몰하는 타이타닉 시간 복잡도/반례
import sys sys.stdin = open("input.txt", "rt") n, m = map(int, input().split()) # n = 승객 수, m = 무게 제한 weight = list(map(int, input().split())) weight.sort() ans = 0 lt, rt = 0, n-1 while lt <= rt: if weight[lt] + weight[rt] <= m: ans += 1 lt += 1 rt -= 1 else: ans += 1 rt -= 1 print(ans)문제의 답안으로 작성한 코드인데 해당 코드의 반례가 있는지 궁금하고, 강의에 나온 정답 코드와 비교했을 때 시간복잡도면에서 불리한지 궁금합니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
곶감(모래시계) 문제 코드 질문입니다.
import sys sys.stdin = open("input.txt", "rt") n = int(input()) # 마당 길이 ground = list() # 마당 격자판 for _ in range(n): ground.append(list(map(int, input().split()))) m = int(input()) # 회전명령 개수 for TC in range(m): idx, direc, turn = map(int, input().split()) tmp = 0 if direc == 0: # 왼쪽 회전 tmp = ground[idx-1][:turn] del ground[idx-1][:turn] ground[idx-1] += tmp else: # 오른쪽 회전 tmp = ground[idx-1][-turn:] del ground[idx-1][-turn:] for i in range(len(tmp)): ground[idx-1].insert(i, tmp[i]) s, e = 0, n-1 ans = 0 for i in range(n): if i < n//2: ans += sum(ground[i][s:e+1]) s += 1 e -= 1 else: ans += sum(ground[i][s:e+1]) s -= 1 e += 1 print(ans) 곶감(사과나무)문제에 대한 코드를 작성해봤는데, 3번과 4번 테스트 케이스만 오답으로 나옵니다. 어느 부분이 잘못됐는지 찾지 못하여 질문드립니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
시간복잡도
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 강사님강사님이 푸신 방법대로 하면 각 동전의 개수가 동전 종류의 개수 만큼 루프를 돌아야 해서 11(각 동전이 가질 수 있는 최대 가짓수)^10(동전 종류의 최대 개수)여서 시간복잡도가 굉장히 높아지는거 같은데 제가 계산한 시간 복잡도가 맞을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
블로그에 공부내용 정리
안녕하세요 교수님, 다름이 아니라 제 개인 블로그에 알고리즘 공부내용을 작성하려고 하는데 우선 교수님의 허락을 맡아야 될 것 같아서 여쭤봅니당,,,, 강의자료나 세부적인 내용은 유출하지 않고 오직 알고리즘관련된 내용들만 적어도 될까요??
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
뒤집은 소수 res 식
안녕하세요 뒤집은 소수 res 식에 대하여 궁금해서 질문 올립니다.저는 그냥 맨 뒤가 0인 경우를 무한 반복문으로 돌리고, 수를 다시 갱신하고, 맨 뒤가 0이 안 되는 경우 반복문을 빠져나와 [::-1]로 갱신하여 처리하였습니다.하지만 res=res*10+t의 식을 아무리 봐도 이해가 안 되어서 여쭤봅니다!!!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
해당 문제를 BFS로 풀었을 때와 DP로 풀었을 때 시간복잡도가 궁금합니다.
안녕하세요. 강사님. 강의 잘 보고 있습니다.저도 다른 분을과 비슷하게 처음에 BFS로 문제를 풀었습니다.확실히 DP로 푼 강사님의 코드가 훨씬 간결하긴한데 DP가 BFS보다 얼마나 효율적인지 잘 감이 잡히지 않습니다.각각 어떤 시간복잡도를 갖는지 궁금합니다. 감사합니다! # BFS 풀이 from collections import deque N = int(input()) valley = [list(map(int, input().split())) for _ in range(N)] dx = [1, 0] dy = [0, 1] def bfs(x, y): q = deque() q.append([x, y]) visted = [[int(1e9)] * N for _ in range(N)] visted[x][y] = valley[x][y] while q: x, y = q.popleft() for i in range(2): nx = x + dx[i] ny = y + dy[i] # 맵을 벗어나면 continue if nx >= N or ny >= N: continue # visted 표기 더 작은 경우에만 if visted[nx][ny] > valley[nx][ny] + visted[x][y]: visted[nx][ny] = valley[nx][ny] + visted[x][y] q.append([nx, ny]) return visted[N - 1][N - 1] print(bfs(0, 0))
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
[섹션5-공주구하기] 질문드립니다.
안녕하세요 선생님![섹션5-공주구하기] 문제 강의를 듣다가 궁금한점이 생겨서 질문드리게되었습니다.먼저 코드를 작성해보았었는데, 저의 풀이 아이디어는(1) 데크의 원소 개수가 1개가 될 때 까지 반복(2) 데크를 왼쪽으로 k-1만큼 회전(3) 데크의 가장 첫번째 원소를 제거하도록 코드를 작성했는데요, 예제 입력 8과 3을 넣었는데 1이 출력됩니다.. ㅠㅠ 어디가 잘못되었는지 알려주실 수 있을까요..?from collections import deque n, k = map(int, input().split()) # 데크에 왕자 번호 생성 prince = deque() for i in range(1, n+1): prince.append(i) while len(prince) == 1: prince.rotate(-(k-1)) # 왼쪽으로 k-1만큼 회전 prince.popleft() # 데크의 가장 첫번째 원소 제거 print(prince[0])
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이분 검색
찾고자 하는 M 값이 list에 없는 경우는 고려하지 않아도 되나요?
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
스토쿠 검사
input_list = [list(map(int, input().split())) for _ in range(9)] # 행 체크 for i in range(9): temp = [] for j in range(9): temp.append(input_list[i][j]) if len(set(temp)) != 9: print("NO") exit() # 열 체크 for i in range(9): temp = [] for j in range(9): temp.append((input_list[j][i])) if len(set(temp)) != 9: print("NO") exit() # 블럭 단위 체크 9번 temp = [] for i in range(3): for j in range(3): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3): for j in range(3, 6): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3): for j in range(6, 9): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3, 6): for j in range(3): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3, 6): for j in range(3, 6): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3, 6): for j in range(6, 9): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(6, 9): for j in range(3): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(6, 9): for j in range(3, 6): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(6, 9): for j in range(6, 9): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() print("YES") 이런 식으로 이중 for문으로 모두 처리하는 것은 좋은 풀이가 아닐까요?강사님 풀이가 훨씬 깔끔하긴 한데, 4중 for문 시간복잡도와 제 풀이 중 어느게 더 빠른지 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
1차원 다이나믹을 쓸 때 vs 2차원 다이나믹을 쓸 때
선생님 질문입니다. 사실 너무 많은 알고리즘과 문제가 있어서 질문자체의 범위가 큰 질문일수도 있지만, 질문 그대로 문제에 대해서 1차원으로 접근할건지 2차원으로 접근할건지에 대한 판단이 문제를 보고 잘 안섭니다.좋은 팁이 있을까요?(다른질문을 보니 물론 많이 풀어보면서 감을 익힐 수도 있겠지만 조언을 듣고싶습니다.)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이것도 맞는 알고리즘일까요?
제일 큰 수와 제일 작은 수를 더하는게 아닌 제일 큰 수와 m(limit)에 가장 가까운 수를 찾아 빼는 알고리즘입니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 혹시 이것도 답이될까요?
import sys n,k=list(map(int,input().split())) li=list(map(int,input().split())) li.sort(reverse=True) # li=list(set(li)) answer = 0 tmp = 1 for i in range(len(li)-2): for j in range(i+1,len(li)-1): for l in range(j+1,len(li)): if k != tmp: tmp+=1 else: answer += li[i] + li[j] + li[l] print(answer) sys.exit()한번에 list(set)하는식으로 해봤는데 이런식으로 코드 작성해도될까요?