월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이런 방식도 괜찮은건가요?
안녕하세요. 강의를 매우매우 잘 듣고 있습니다.다름 아니라 강사님께서 알려주신 dfs 푸는 방법들 중에서 s(start)를 사용해서 쓰는 부분이 너무 인상 깊고 편해서 그런지 이 방법을 사용할 수 있는 문제인것같으면 죄다 이 방법을 사용해서 풀게되는데 괜찮은건가요?이 문제도 그렇고 s(start)로 푸는걸 고집하지말고 강사님이 푸시는 방법처럼 다른 방식으로 풀어봐야될까요?밑에는 s(start)방식을 사용해서 푼 코드입니다(judge 성공한 코드입니다)import sys sys.stdin=open("input.txt","rt") def dfs(t,p): global max if t>n: return if max<p: max=p for i in range(t,n): dfs(i+a[i][0],p+a[i][1]) if __name__=="__main__": n=int(input()) a=[] for i in range(n): t,p=map(int,input().split()) a.append((t,p)) max=0 dfs(0,0) print(max)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
9. 증가 수열 만들기(그리디)
질문 드립니다최대 증가 수열이라면3 2 10 1 5 4 7 8 9 63->6->9break가 아니라문자열을 초기화한 후다시 새로 수열을 쌓아서기존에 쌓은 수열의 길이와 비교해보아야하지 않나요? n = int(input()) a = list(map(int, input().split())) lt = 0 rt = n - 1 last = 0 string = '' temp = [] while lt <= rt: if a[lt] > last: temp.append((a[lt], 'L')) if a[rt] > last: temp.append((a[rt], 'R')) temp.sort() # 이 부분 질문 if len(temp) == 0: break else: last = temp[0][0] # print(last) tmp = temp[0][1] string += tmp if tmp == "L": lt += 1 else: rt -= 1 temp.clear() print(string) print(len(string))
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
시간초과 관련 질문이요
# 수들의 합 N, M = list(map(int, input().split())) num = list(map(int, input().split())) cnt = 0 for i in range(len(num)): if num[i] == M: cnt += 1 continue tot = num[i] for j in range(i+1, len(num)): tot += num[j] if tot == M: cnt += 1 break if tot > M: break print(cnt)수업 듣기 전 작성한 코드인데요. 이중포문을 사용했습니다. 틀린 풀이인가요? 5번에서 시간초과가 나오던데 이렇게 풀면 안되는 이유가 뭔가요? 또 다른 글에 답변 달아주신 것 보니 이 문제는 O(n)의 시간복잡도로 풀어야 한다고 하셨는데요. 문제를 보고 이 문제는 O(~~)의 시간복잡도로 풀어야겠다는 계산은 어떻게 하는건가요? 그냥 풀어보고 시간초과 오류가 나면 O(n)의 풀이로 다시 푸는건가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이런 풀이도 괜찮나요?
import sys sys.stdin = open("input.txt", "rt") # 카드 역배치 num_list = [x+1 for x in range(20)] #print(num_list) for i in range(10): gugan = list(map(int, input().split())) #print(gugan) num_list[gugan[0]-1:gugan[1]] = reversed(num_list[gugan[0]-1:gugan[1]]) for i in num_list: print(i, end = ' ') num_list 생성할 때 x+1 을 해서 1부터 20까지 리스트를 만듦s, e를 gugan이라는 리스트로 받아서, gugan[0](=s) -1 : gugan[1] 까지의 값을 reversed 시킴
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
너무 복잡하게 풀어버렸네요ㅠㅠ
# 점수 계산 N = int(input()) l = list(map(int, input().split())) score = [0] * N for i in range(len(l)): if l[i] == 1: score[i] = 1 #print(score) for i in range(1, len(score)): idx = i if score[i] == 1: while (score[i-1] != 0) and (i != 0): score[idx] += 1 i -= 1 print(sum(score)) 점수 리스트 그대로 채점 리스트 score 생성첫번째 점수는 가중치 값이 없으니까 1부터 score배열의 길이까지 for문을 돌면서만약에 채점내용이 1점이라면, while문 통해서 그 앞의 점수가 0이 아니고, i가 0이 아닐 때까지 현재 채점점수에 가중치 값 1을 더해주는 과정을 했습니다. 선생님 풀이 보니 너무 간단하게 푸셨네요ㅠㅠ 간단한 문제를 너무 어렵게 푸는 경향이 있는 것 같아요. 일단 풀었다는거에 의의를 두고 강의보며 간단한 풀이법을 익히면 될까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
풀이 피드백, res 구하는 것 질문이요
# 뒤집은 소수 def reverse(x): result = list(str(x)) result = list(reversed(result)) num = '' for i in result: num += i return int(num) def isPrime(x): if x == 1: return False for i in range(2, x): if x % i == 0: return False return True N = int(input()) num = list(map(int, input().split())) for i in num: reverse_num = reverse(i) if isPrime(reverse_num): print(reverse_num, end = ' ') reverse 함수 선생님꼐서 하신 계산식이 간단하긴 한데.. 과정은 이전에 설명해주셨다고 했는데 설명을 못들은 것 같아서요! 과정을 모르고 저 식만 보니까 잘 이해가 안갑니다.. 설명을 해주실 수 있나요?그리고 저는 list 활용해서 뒤집고, int(num)해서 무효의 0은 없애는 과정을 취해줬는데 이렇게 하는 풀이는 어떤가요? 마지막으로 isPrime(x)에서 for문의 범위를 2부터 x로 두면 x//2+1 보다 불필요한 계산을 하긴 하지만 2부터 x-1 Ex) x가 16이면 2부터 15까지 나누어 떨어지는지 검증 하기 떄문에 문제는 없는걸까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
3. 후위 표기식 만들기
코드는 간략하게 필요한 부분만 쓰겠습니다.for x in a:1. if x.isdecimal():res+=xelse:2. if x=='(':stack.append(x)3. elif x=='*' or x=='/':while stack and (stack[-1]=='*' or stack[-1]=='/'):res+=stack.pop()stack.append(x)4. elif x=='+' or x=='-':while stack and stack[-1]!='(':res+=stack.pop()stack.append(x)5. elif x==')':while stack and stack[-1]!='(':res+=stack.pop()stack.pop() 질문3+5*2/(7-2) 에서가장 앞에 있는 +는 1, 2, 3, 4, 5 중에 어디에 들어 나가요? 정리x=3은 숫자이므로 1번 res에 들어갑니다. x= "+"일 때 (현재 stack은 텅 비어 있는 상태)+는 else:에 들어 갑니다.+는 '(' 가 아니므로 2번 pass+는 * 또는 /가 아니므로 3번 pass+는 +에 해당 하나 while stack 에서 stack에 데이터가 없으므로 while 조건 탈락 -> 4번 pass+는 ) 가 아니므로 5번 pass 코드 짜려고 구성했을 때 가장 먼저 막히는 것이비어 있는 stack에 첫 연산자를 어떻게 집어 넣느냐 였습니다.부득이하게 들여쓰기가 안되는 점은 양해를 구합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
min 값을 점수[0]으로 초기화 했을 때 테스트케이스 5번 exit_code1이었나 오류가 나는 이유가 뭔가요?
import sys sys.stdin = open('input.txt', 'rt') N = int(input()) score = list(map(int, input().split())) ave = int((sum(score) / N) + 0.5) min = score[0] for i,v in enumerate(score): value = abs(v - ave) #print(value) if value < min: min = value idx = i tmp_score = v elif value == min: if v > tmp_score: min = value idx = i tmp_score = v print(ave, idx + 1)작성한 코드입니다. in5 는 51 2 3 4 5 로 입력을 받는데 해당 케이스 통과를 못하네요.비쥬얼스튜디오에서 돌려보니 tmp_score가 정의되지 않았다고 뜨네요.min값을 초기화 할 때 리스트 0번쨰 인덱스로도 초기화 한다고 하셨는데 뭐가 문제인건가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
풀이 피드백 부탁드립니다
N = int(input()) score = list(map(int, input().split())) m = round(sum(score) / N) result_list = [] for x in score: result_list.append(x-m) min = abs(result_list[0]) idx = 0 for i, v in enumerate(result_list): #print(i, v) #print(idx, value) if abs(v) == min: if score[i] > score[idx]: min = abs(v) idx = i #print('같을 때 변경된 값', min, idx) elif abs(v) < min: min = abs(v) idx = i #print('변경된 값', min, idx) print(m, idx+1)선생님, 점수를 입력받고, result_list라는 리스트를 만들어서 평균과의 차이를 넣어주었습니다.그 후 해당 리스트에서 (평균-점수) 기준으로 문제를 풀어서 테스트케이스까지 통과를 했는데요.result_list를 만드는게 불필요한 과정을 수행한걸까요..? 이런 풀이는 어떻게 보시나요? 피드백 주시면 감사하겠습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
중복제거를 해야하는 이유?
안녕하세요. 강의 잘 듣고 있습니다. 중복제거를 위해서 set()을 사용한다고 하셨는데요. 3장을 뽑을 수 있는 모든 경우를 기록한다고 했는데 왜 중복을 제거해야하는건지 모르겠습니다. [1, 2, 3, 1, 5, 1] 이 있다고 하면1+2+3, 1+2+1, 1 +2+5, 1+2+1 중 1 + 2+1은 빼고 6, 8만 set에 들어가게 되잖아요?근데 두번째로 1, 2, 1 을 뽑은 경우와 마지막에 1, 2, 1을 뽑은 경우가 다른거 아닌가요? "3장을 뽑을 수 있는 모든 경우를 기록한다" 대신 "같은 수의 조합으로 3장을 뽑은 경우는 제외한다." 라는 말이 있었으면 set()을 사용하는게 이해가 가지만요. 왜 list에 합을 기록하면 안되는건가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제에 '공집합은 출력하지 않는다'라는 조건을 만족 못하지않나요?
공집합이라 숫자가 안보일뿐이지 빈라인으로 한줄이 더 생기게 되는걸 보면 공집합도 출력하고있는데 dfs(1)일때 조건을 추가해야하는게 아닌가요?확실히 알기위해 숫자만 출력하지않고 리스트 자체로 출력해봐도 공집합이 나오는게 보입니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS에 대해 궁금증이 있습니다.
안녕하세요!저는 DFS가 어떤 그래프?를 탐색하는 방법으로 알고있었는데부분집합구하기 문제풀이를 볼때 숫자가 들어있는 정점이 아니라D(1) D(2)이런 함수를 탐색하는걸로 보이더라고요. 함수도 정점인가요?이런것도 DFS인가요?? DFS가 정확히 뭔가요??
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
격자판 최대합
이런식으로 함수를 만들어서 코드를 짰습니다.실제로도 대각선, 세로, 가로 합, 최댓값 제대로 출력되는데 왜 채점에서는 wrong 으로 나올까요? import sys sys.stdin = open("input.txt", "rt") n = int(input()) arr = [] for i in range(n): arr.append(list(map(int, input().split()))) def sumHorizon(n): sum = 0 maxSum = 0 for i in range(n): for j in range(n): sum += arr[i][j] if (j == n-1): if maxSum < sum: maxSum = sum sum = 0 else: sum = 0 return maxSum def sumVertical(n): sum = 0 maxSum = 0 for i in range(n): for j in range(n): sum += arr[j][i] if (j == n-1): if maxSum < sum: maxSum = sum sum = 0 else: sum = 0 return maxSum def sumDiagonal(n): lsum = 0 rsum = 0 maxSum = 0 for i in range(n): lsum += arr[i][i] rsum += arr[i][n-i-1] if (i == n-1): if maxSum < lsum: maxSum = lsum lsum = 0 elif maxSum < rsum: maxSum = rsum rsum = 0 else: lsum = 0 rsum = 0 return maxSum result = max(sumDiagonal(5), sumVertical(5), sumHorizon(5)) print(result)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
채점 오류
이런 오류가 뜨는 이유가 뭘까요? 작성하신대로 코드 작성했습니다.
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
수업 후 공부 자료
선생님 안녕하세요! 수업 잘 보고 있습니다. 수업 후 정리한 자료를 티스토리에 올리려고 합니다.문제도 이런식으로 올리려고 하는데 괜찮은가요?혹시 저작권 이슈 등 문제가 있을까봐 문의합니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요! 직접 풀어본 코드인데, 혹시 예외나 시간 초과 문제가 있을까요?
안녕하세요, 항상 좋은 강의 감사드립니다.준비해주신 첫 강의부터 차근차근 풀어보고 있는데, 이번에 제가 작성한 코드가 유독 강사님 코드와 많이 달라 걱정스러운 마음에 글을 쓰게 되었습니다.맥북이어서 테스트 케이스에 대해서는 확인을 했지만 시간 초과 문제는 확인을 해보지 못해 여쭤 봅니다.혹시 시간 초과 문제나 통과하지 못할 케이스 등이 있을까요?감사합니다.sudoku = [list(map(int, input().split())) for i in range(9)] answer = True for i in range(9): if len(set(sudoku[i])) != 9: answer = False break if len(set(sudoku[i][j] for j in range(9))) != 9: answer = False break if len(set(sudoku[i//3*3][i%3*3:(i%3+1)*3] + sudoku[i//3*3+1][i%3*3:(i%3+1)*3] + sudoku[i//3*3+2][i%3*3:(i%3+1)*3])) != 9: answer = False break if answer: print("YES") else: print("NO")
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
elif a == c 의 생략
안녕하세요. 강사님, 코드에 관해 질문있어 글 남깁니다.3개의 입력 값을 sort한 상태이고, 두번째 elif 문에 도달한 경우, 가장 큰 값인 c와 가장 작은 값인 a는 동일할 수 없다고 판단했습니다. 예시처럼 elif문을 두 번 사용하지 않고 아래와 같이 코드를 작성해도 정답인지 여쭤보고 싶습니다.n = int(input()) max = 0 for i in range(n): tmp = input().split() tmp.sort() a, b, c = map(int, tmp) if a == b and b == c: res = a * 1000 + 10000 elif a == b or b == c: res = b * 100 + 100 else: res = c * 100 if res > max: max = res print(max)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
값이 다르게 나오는 이유가 뭘까요??
(사진)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
n값과 관련된 질문 드립니다.
안녕하세요, 강의 수강자입니다.먼저 좋은 강의 제작해주셔서 감사드립니다. 이번 해설에서 n값과 관련된 질문이 있습니다.T = int(input()) for t in range(T): n, s, e, k = map(int, input().split()) a = list(map(int, input().split())) a = a[s-1:e] a.sort() print("#%d %d" %(t+1, a[k-1]))이 과정에서 n값을 입력하긴 했지만,a를 선언할 때 사실상 이는 n값에 영향을 받지 않는 것으로 보입니다.예를 들면, n을 6이라고 입력했을 때 a값 리스트 안에 숫자가 10개를 입력 되더라도 프로그램이 문제가 없을 것으로 판단됩니다.그렇다면 n값은 굳이 입력하지 않아도 되는 것 아닌지 알고 싶습니다. 바쁘신 와중에도 감사합니다 :)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이썬 종료 return 사용법
안녕하세요,파이썬에서 원하는 값을 찾았을때 print를 하고 return으로 끝내고 싶은데,어떻게 해야하나요..while문으로 이진탐색중에 원하는 값을 찾아서 print하고 끝내고 싶은데,return을 어떻게 해야할지 모르겠습니다..