월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
질문드립니다.
섹션 2 k번째 수 문제에서 import sys T=int(input()) for t in range (T): n,s,e,k= map(int,sys.stdin.readline().split()) A=list(map(int,sys.stdin.readline().split())) for i in range (s-1,e-1): if A[i]>A[i+1]: rem=A[i] A[i]=A[i+1] A[i+1]=rem print(A[k+s-2]) 저는 이런식으로 코드를 짰는데 효율성면에서 많이 떨어지나요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
증가하는 수열 응용문제
안녕하세요 강사님. 질문에 앞서 강좌문제가 아닌 문제를 질문하여 죄송합니다. 증가하는 수열 문제를 응용한 문제를 백준(#14002)에서 풀어보았는데 답이 틀렸다고 나와서 질문드립니다. 제가 코드를 짜보았을때 반례는 이상이 없어보였습니다. 혹시 반례나 코드가 틀린부분이 있다면 조언 부탁드리겠습니다. 문제는 대략적으로 강사님께서 풀어주신 문제가 단순히 길이만을 나타내는 문제라면, 이 문제는 길이뿐아니라 순열까지 나타내는 문제입니다. 도움 주시면 감사합니다. 문제링크 ( https://www.acmicpc.net/problem/14002 ) import sys sys.stdin = open('input.txt','rt') n = int(input()) arr = list(map(int,input().split())) arr.insert(0,0) dp = [[0]*(2) for _ in range(n+1)] dp[0][1]=[] dp[1][0] = 1 dp[1][1]=[arr[1]] for i in range(2,n+1): max=0 c=[arr[i]] for j in range(i-1,-1,-1): if arr[i]>arr[j] and dp[j][0]>max: max = dp[j][0] b=dp[j][1] c=b+[arr[i]] elif arr[i]==arr[j]: b=dp[j][1] c=b dp[i][0] = max+1 dp[i][1] = c res=0 for i in range(1,n+1): if dp[i][0] > res: res = dp[i][0] for i in range(1,n+1): if dp[i][0] == res: print(dp[i][0]) for j in range(len(dp[i][1])): print(dp[i][1][j],end=' ') print() break #for x in dp: #print(x)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
왜 for문에는 %i를 하고 else문에는 %(i+1)을 하나요?
for문에 print("#%d NO" %i) else문에 print("#%d YES" %(i+1))인 것이 이해가 안되네요 ㅠㅠ 같이 i번 도는 건데 yes일 경우 왜 1번 더 +하는지 모르겠어요! 그리고 두 번째로 알려주신 if문 if s==s[::-1]: print("#%d YES" %(i+1)) else: print("#%d NO" %(i+1)) 에서는 왜 둘 다 i+1인지 궁금합니다!! 강의 잘 듣고 있습니다 :) 감사합니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드는 어떤가요
import sys sys.stdin=open("input.txt","rt") n = int(input()) a = [] dp = [0] * (n+1) for i in range(n): a.append(list(map(int, input().split()))) a = sorted(a, key =lambda x: x[0]) for i in range(n): dp[i] = a[i][1] for i in range(1, n): for j in range(i): if a[i][2] > a[j][2]: dp[i] = max(dp[i] , dp[j] + a[i][1]) print(max(dp)) 역순으로 문제를 해결해보려다가 뭔가가 잘 안풀려서 그냥 정렬로 문제를 해결해보았습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
공부방법
아직 문제만 보고 먼저풀어보기엔 실력이 부족해서 못풀겠는데 강의 들으면서 따라 치는것도 괜찮을까요..?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
단지번호붙이기 BFS로 문제해결관련
안녕하세요 강사님 chap7에서 단지번호붙이기를 BFS로 해결해보았는데 문제내 입력예제와 출력예제는 제대로 해결이 되지만 채점파일에있는 3,4,5예제에서는 틀리게 답이 나타나는데 코드에서의 원인을 찾지 못해서 질문드립니다. import sys sys.stdin = open('input.txt','rt') from collections import deque n = int(input()) board = [list(map(int,input())) for _ in range(n)] ch = [[0]*n for _ in range(n)] res = [] dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] Q = deque() for i in range(n): for j in range(n): if board[i][j] == 1: #for y in board: #print(y) #print() board[i][j] = 0 cnt = 1 Q.append((i,j)) while Q: for j in range(len(Q)): x,y = Q.popleft() 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]==1: board[xx][yy]=0 cnt += 1 Q.append((xx,yy)) res.append(cnt) print(len(res)) res.sort() for x in res: print(x)코드에 문제가 있는 부분에 대해 알려주시길 부탁드립니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
채점결과
안녕하세요 강사님 코딩테스트 대비하여 연습하던도중 강사님의 채점파일에서 exit_code_1이라고 출력되는데 이는 어떤 원인으로 출력되는지 알려주시면 감사합니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
혹시 이렇게 풀어도 되나요?
강사님 안녕하세요 저는 아래 코드처럼 슬라이싱 사용해서 풀었는데 제가 맥 환경이라 채점을 못하네요. 제가 쓴 코드도 혹시 맞을까요? 저는 강사님처럼 "for문을 몇번 돌아야되는가?" 같은 알고리즘을 생각하지도 못하고 자꾸만 쉽게 코드만 쓰려고 하는거 같아서 그 부분이 걸리네요.. 좋은 강의 감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
선생님 후위표기식 질문있습니다.
for x in a: if x.isdecimal(): # 10진수 숫자라면 res += x else: # 연산자 if x == "(": # 여는괄호는 무조건 append stack.append(x) elif x == "*" or x == "/": # 곱하기나 나누기일 경우 # 스택이 비어있지 않고 최상단의 연산자 우선순위가 같을 경우 # while stack: 의 의미 : 스택이 빌 때까지 while stack and (stack[-1] == "*" or stack[-1] == "/"): res += stack.pop() # 스택 최상단의 연산자를 먼저 처리 stack.append(x) # 현재 연산자를 push elif x == "+" or x == "-": while stack and stack[-1] != "(": # 여는 괄호 전까지 res += stack.pop() stack.append(x) # 닫는괄호라면 여는 괄호 사이까지의 연산자 전부 처리하고 # 여는 괄호까지 처리 elif x == ")": while stack and stack[-1] != "(": res += stack.pop() stack.pop() # 여는괄호 끄집어 냄 선생님께서 작성하신 코드에서 +랑 - 연산자는 여는 괄호전까지 그 사이에 있는 연산자들을 전부 처리를 해줘야하는 것은 잘 이해했습니다. 그런데 곱셈이랑 나눗셈 연산자는 왜 이 부분이 코드에 구현이 안 된걸까요..? 그럴 필요성이 없어서인가요? 분명 곱셈과 나눗셈 연산자도 여는괄호 전까지 그 사이의 연산자를 처리해주고 그것을 코드로 나타내야하는게 아닌건가요..? 이 부분이 이해가 잘 되지 않습니다 ㅠㅠ . 항상 좋은 강의 감사드립니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
회문 문자열 질문 드립니다.
import sys sys.stdin=open("input.txt", "rt") n=int(input()) for i in range(n): s=input() s=s.upper() for j in range(len(s)//2): if s[j]==s[-1-j]: print("#%d YES" %(i+1)) break else: print("#%d NO" %(i+1)) 이렇게 코드를 짜면 안되나요?? if s[j]==s[-1-j] 이렇게 같다는 식으로요! 이렇게 하면 제대로 정답이 출력이 되지 않습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션3-5 수들의 합 문제 질문입니다.
처음에 짠 코드는 for 문 중첩해서 이용해서 짰더니 개선해도 60점까지만 채점이 되어서, 강의에서 설명한 알고리즘을 숙지하고 코드는 보지 않은채로 코드를 아래와 같이 작성했는데요. 마지막 케이스만 통과가 되지 않고 80점이 나오는데, 강의에서 설명해주신 코드랑 크게 시간 복잡도 차이가 나지는 않는 것 같은데 왜 통과가 안되는 걸까요..? lt = 0rt = 1total = arr[lt]while(rt < n): if total < m: rt += 1 total = sum(arr[lt:rt]) elif total == m: count += 1 total -= arr[lt] lt += 1 else: total -= arr[lt] lt += 1 print(count) 관련 문의는 1:1 문의하기를 이용해주세요.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제제기
안녕하세요! 문자길이가 50이라 문제풀이처럼 풀면 시간제한 걸릴거라서 포기했는데 문자길이좀 낮추는게 좋을거같아서요 ex) 121212112121122212121121223312312 과 같이 1, 2, 3위주의 낮은 숫자면 타임에러 발생해서요.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
수열 추측하기 질문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import sys sys.stdin = open('input.txt','rt') def DFS(L,sum): if L == n: for i in range(n): print(res[i],end=' ') print() print(sum) else: for i in range(1,n+1): if ch[i] == 0: ch[i] = 1 res[L] = i sum += res[L]*b[L] DFS(L+1,sum) ch[i] = 0 n,f = map(int,input().split()) ch = [0]*(n+1) res = [0]*(n) b=[1]*n #이항계수 적을곳 121 1331 14641 ... for i in range(1,n): b[i] = b[i-1]*(n-i)//i DFS(0,0) Colored by Color Scripter cs 안녕하세요 강사님 수열 추측하기 부분에서 강의에서 sum의 변화를 DFS(L+1, sum + (res[L]*b[L]))의 형태로 쓰였는데 이를 위의 코드의 형광팬 쳐진 부분처럼 따로 때어서 결과를 진행하면 sum값이 달라지는 것을 확인할 수 있었습니다. 하지만 제가 생각해봤을때 똑같은 코드라고 생각했는데 sum값이 달라지는 이유가 어떠한 원리인지 알수가 없어서 질문드립니다. 답변 부탁드리겠습니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 4 뮤직비디오 문제에 대해서 질문드립니다.
안녕하세요 선생님, 복습 중에 이해 되질 않는 점이 있어 문의드립니다. 반례 수정 영상 까지 전부 보았습니다. 말씀 해주신대로 dvd 한 장의 길이가 최소한 노래들 중에서 가장 긴 곡보다는 길어야 하므로 저는 아예 처음부터 lt를 노래들 중 가장 긴 곡으로 설정하였고, 이를 적용한 풀이는 아래와 같습니다. n, m = map(int, input().split()) song = list(map(int, input().split())) song.sort() def count(length): cnt = 1 # 최소 1장 size = 0 for i in range(n): if size + song[i] > length: cnt += 1 size = song[i] else: size += song[i] return cnt lt = max(song) # 최소한 가장 긴곡의 길이보다는 길어야 하니까(노래 쪼개지면 안됨) rt = sum(song) res = 0 while lt <= rt: mid = (lt + rt) // 2 if count(mid) <=m: res = mid rt = mid - 1 else: lt = mid + 1 print(res) 여기서 두 번째 테스트 케이스를 실행하였을 때 원래 답인 24가 아니고 23의 결과를 도출하는데요, 실제로도 23으로도 3장에 담는 것이 가능한 것을 확인하였습니다. 테스트 케이스 답안에 문제가 있는 걸까요? 확인해주시면 감사하겠습니다. (수정) 죄송합니다 선생님, 이진검색은 정렬된 자료에서 써야하는 것을 엉뚱하게 주어진 자료에다가 정렬을 해버렸네요. 다른 사람들도 도움이 될 수있도록 질문글은 남겨두겠습니다. 좋은 강의 감사합니다!!!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 설명에 대해서 궁금
한 유형당 한개만 풀 수 있습니다. <--- 문제에서 이게 무얼 말하는지 정확히 안나온거 같아서요. 유형이라는 단어도 문제에 안나와 있고요 문제 읽고 어떤 걸 말하는지 대략 파악대서 저 문장 생략하고 풀었는데 수정이 조금 필요해 보여서요!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 질문
안녕하세요 선생님 데크의 오른쪽에서 삽입할 때는 appendright라고 말씀하셨는데, 선생님께서는 right를 생략하고 append만 사용하시더라구요. 혹시 append의 default가 appendright 인건가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
피연산자 순서 질문
안녕하세요 강의에서 말씀하시는걸 보면 stack에서 나중에 나오는 것이 연산을 당한다고 표현하십니다. 그런데 제가 생각할때 STACK은 LIFO 구조이므로 나중에 나오는 피연산자가 연산의 주체가 되고, 먼저 나오는 피연산자가 연산을 당하는게 아닌가라고 생각이 드네요... 감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS함수에서 cnt+=1을 하기위한 조건식이 이해가 되지 않습니다ㅜㅜ
안녕하십니까 선생님!! 선생님 알고리즘 강의 너무 잘듣고 잘 배우고 있는 학생입니다! 다름이 아니라 이번문제를 풀면서 cnt +=1을 하는 조건이 1부터 시작하여 5에 최종적으로 도달한 경우에 cnt를 1씩 늘리는 것으로 판단하였는데 선생님의 풀이에서의 조건이 "if v == n"이 되는 것이 이해가 되지 않아 질문남깁니다. 예를 들어 path의 경우에서 1 2 3 4 5의 경우와 같이 5개의 노드를 지난 경우는 위의 조건이 직관적으로 이해가 가지만 1 2 5와 같이 3개의 노드만을 지나서 5에 도달한 경우에는 DFS(v)에서 v가 3일때 문제에서 요구하는 조건을 충족하게됩니다. 그럼 이 경우는 5에서 또 가지를 뻗어 DFS(v)에서 v가 4인 경우 5인경우까지 모두 실행을 한후 cnt+=1이 실행되는 것인가요? 이 부분이 헷갈려 질문남깁니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
Python 2.5이하 버전에서는 디버깅이 지원되지 않습니다.
선생님! 비쥬얼 스튜디오 쓰는데 파이썬 버전이 3.6이상인데 디버깅이 안돼요ㅠ 비쥬얼 스튜디오는 2017이고요. 어떻게 해결하죠?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
lambda 함수
여기서 정확히 lambda 함수의 어떤 기능이 사용되는건가요?