25%
57,750원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이참
파이참으로 해도 괜찮지요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
EOFError라고 오류가 뜨는데...
여기서 왜 오류가 발생되는 걸까요ㅠㅠ
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
색션7. 단지 번호 붙이기 문제
단지 번호 붙이기 문제에서 함수 dfs(x,y)가 재귀호출로 계속 호출이 되고, return문이 없는데.. 1. return문이 없을 때는 더 이상 갈 곳이 없다 싶으면 알아서 재귀함수호출을 빠져나오는건가요?궁금합니다. 2. 풀이에서 왜 back하는 부분은 없는 건가요? 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
자릿수의 합
안녕하세요. 10.점수계산 질문입니다. 강의 잘 듣고 있습니다. 감사합니다. 듣던 중 잘 이해가 가지 않아서 질문 드립니다. 하단이 선생님의 코드인데, import sys sys.stdin=open("input.txt", "r") n=int(input()) a=list(map(int, input().split())) cnt=0 sum=0 for i in range(n): if a[i]==1: cnt=cnt+1 sum=sum+cnt else: cnt=0 print(sum) a[i] == 1일때, cnt+=1 sum+=cnt를 주면 예를 들어, n=5이고, a = [1 0 1 1 1]라고 가정했을 때 a[0] == 1, cnt = 1, sum =1 a[0] == 0, cnt = 0, sum =1 a[0] == 1, cnt = 2, sum =3 a[0] == 1, cnt = 3, sum =6 a[0] == 1, cnt = 4, sum =10 으로 계산 되지 않는건가요? 제가 어느 부분을 잘못짚고 있는지 잘 모르겠습니다. 제 코드는 n = int(input()) a = list(map(int, input().split())) count = 0 sum = 0 for i in a: if i == 1: count += 1 if a[i+1] == 1: sum += count else: count = 0 print(sum) 이건데 어느 부분이 문제인지 모르겠어요! 답변 부탁드립니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드는 어떤가요??
채점기 돌려가면서 코드를 수정하여 이런 코드를 작성하였습니다. 혹시 이 코드가 잘못되거나 반례가 있을까요?? n = int(input())a = [list(map(int, input().split())) for _ in range(n)]m = int(input())for _ in range(m): s, b, c = map(int, input().split()) tmp = [0] * n for i in range(n): if b == 0: if c > n: tmp[n - c + i] = a[s - 1][i] else: tmp[i - c] = a[s - 1][i] if b == 1: t = i + c if t < n: tmp[t] = a[s - 1][i] else: tmp[t - n] = a[s - 1][i] a[s - 1] = tmps = 0e = nresult = 0for i in range(n): for j in range(s, e): result += a[i][j] if i < n // 2: s += 1 e -= 1 else: s -= 1 e += 1print(result)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 질문 있습니다.
n_list = [list(map(int, input().split())) for _ in range(7)] print(n_list) cnt = 0 for i in range(3): for j in range(7): tmp = n_list[j][i : i + 5] if tmp == tmp[::-1]: cnt += 1 for k in range(2): if n_list[i + k][j] != n_list[i + 5 - k - 1][j]: break else: cnt += 1 print(cnt) 여기 중 for k in range(2): if n_list[i + k][j] != n_list[i + 5 - k - 1][j]: break 여기까진 이해가 가는데 만약 else면 if n_list[i + k][j] != n_list[i + 5 - k - 1][j]: 이 부분에 맞춰서 else도 for k in range(2): if n_list[i + k][j] != n_list[i + 5 - k - 1][j]: break else: cnt += 1 이런식으로 되어야 논리적으로 맞지 않을까 싶은데 왜 for else로 가는지 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
질문입니다
res = list(res) 에서 list() 가 리스트로 자료형을 변환시켜주는 역할을 하는건가요?? 저는 list() 가 리스트 생성만 있는줄 알았는데 list가 생성되어서 res가 원소로 들어가버리면 2차원 구조가 되는게 아닌가해서 질문드립니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
질문드립니다.
섹션 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값이 달라지는 이유가 어떠한 원리인지 알수가 없어서 질문드립니다. 답변 부탁드리겠습니다