월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
라이브러리 사용 제한
정보 올림피아드나 NYPC에서는 itertools를 사용해서 순열을 구할 수 있나요?math같은 라이브러리도 사용할 수 있나요?
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
봉우리 - 가장자리 0으로 채우기
이렇게 (N+2)*(N+2) list를 만들고 안에다가복사해서 붙여넣어버리는 방법은 별로인가요? N = int(input()) input_list = [list(map(int, input().split())) for _ in range(N)] n_list = [[0] * (N + 2) for _ in range(N + 2)] for i in range(N): for j in range(N): n_list[i + 1][j + 1] = input_list[i][j]
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드는 어떤지 궁금합니다!!
from collections import deque n,m = map(int, input().split()) data = list(map(int, input().split())) data = deque(data) cnt = 0 check = True data[m] = str(data[m]) find = data[m] while data: tmp = data.popleft() for i in data: if int(i) > int(tmp): data.append(tmp) break else: cnt += 1 if tmp == find: check = False if check == False: break print(cnt) m에대한 값만 str로 바꾸어 해결하였습니다!
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
선생님! 제 질문도 답변해주세요..
11일 전쯤에 질문 2개를 올렸는데, 2개 다 답변이 안와있어요.. 제 질문에 답변 부탁드립니다~~
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
print()부분에서 어느부분이 틀린지 이해가 가지않습니다.
n,m = map(int, input().split()) data = list(map(int, input().split())) sum = 0 cnt = 0 data.sort() lt = 0 rt = len(data)-1 print(data) while lt<=rt: if data[lt] + data[rt] <= m: cnt += 1 lt += 1 rt -= 1 else: rt -= 1 print(len(data)-(cnt*2) + cnt) print는 전체 data갯수에서 2명끼리 탄사람들의 개수를 뻬면 보트를 혼자타는 사람들의 갯수가 나오겠다고 생각했습니다. 그다음 2명이서타는 cnt의 개수를 더해주면 답이 될것이라고 생각하였는데 답이 되지않습니다. 왜틀린걸까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
추가 공부에 대하여
안녕하세요 선생님. 먼저 좋은 강의 정말 감사합니다 ! 이번에 두번 완강을 했는데 궁금한 것이 있습니다 ! 혹시 기업 코테를 준비할 때 빈출 알고리즘 유형을 알고 싶은데 어떤 것을 위주로 공부하면 좋을까요 ? 그리고 강의에서 하진 않았지만 더 알아야 할 알고리즘이 있다면 말씀해주시면 감사하겠습니다 !
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
예시 1번이 이해가 가지않습니다.
선생님께서 주신 1번 자료에서 [22,23]이라는 값이 있습니다. 이값때문에 [12,23], [21,23], [22,23]만 뽑히는거 아닌가요??어떻게 6개가 나오는지 이해가 되지않습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 선생님. 코드 질문이 있어서 질문 남겨봅니다.
선생님께서 풀어주신 dp 1차원 테이블 코드 말고도 2차원 dp 테이블로 풀어보았는데 해당 코드가 어떤 문제가 있는지 모르겠습니다.import sys sys.stdin = open("input.text", "rt") input = sys.stdin.readline sys.setrecursionlimit(10**6) data = [] n, limit = map(int, input().split()) #보석 종류, 무게 한계값 for _ in range(n): a,b = map(int, input().split()) data.append((a,b)) #무게, 가치 data.insert(0,(0,0)) #0번 인덱스 사용안함 dp = [[0] * (limit+1) for _ in range(n+1)] for i in range(1,n+1): for j in range(1,limit + 1): weight = data[i][0] # 현재 물건 무게 value = data[i][1] # 현재 물건 가치 if j < weight: #현재 물건 담을 수 없으니 이전꺼 가져와야함 dp[i][j] = dp[i-1][j] else: #현재 물건 담을 수 있음 dp[i][j] = max(dp[i-1][j-weight] + value, dp[i-1][j]) print(dp[n][limit])해당 문제를 백준 배낭 냅색 알고리즘 문제에 제출하면 100점이 뜨는데 여기 문제에 예시를 출력해보면 28이 아닌 26이 나옵니다.. 어떤 것이 문제인지 모르겠고 dp 2차원을 최적화해서 1차원으로 만든 것인데 문제가 어디 부분인지 감이 안옵니다. 미리 답변 감사합니다 !
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
수들의 합
해당 코드는 강사님 풀이와 비교했을 때 어떤지 궁금합니다. N, M = map(int, input().split()) list = list(map(int, input().split())) cnt = 0 for i in range(N): sum = list[i] temp = i while True: if sum == M: cnt += 1 break if sum > M: break if temp == N - 1: break temp += 1 sum += list[temp] print(cnt)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
자바스크립트에서는 항상 맨날 힙 구현해서 풀어야했는데..
실시간 정렬해야되는 문제들 보면 거의 무조건 힙구조도 같이 이용해야하는 문제들이여서..자바스크립트로 풀때는 최소 빨라도 3~4분정도는..요로코롬Min이나 Max 힙 구조 만드는데 소요해야하고,class MaxHeap { constructor() { this.heap = [null]; } push(value) { this.heap.push(value); let currentIndex = this.heap.length - 1; let parentIndex = Math.floor(currentIndex / 2); while (parentIndex !== 0 && value > this.heap[parentIndex]) { const temp = this.heap[parentIndex]; this.heap[parentIndex] = value; this.heap[currentIndex] = temp; currentIndex = parentIndex; parentIndex = Math.floor(currentIndex / 2); } } pop() { if (this.heap.length === 1) return; if (this.heap.length === 2) { return this.heap.pop(); } const returnValue = this.heap[1]; this.heap[1] = this.heap.pop(); let currentIndex = 1; let leftIndex = 2; let rightIndex = 3; while ( this.heap[currentIndex] < this.heap[leftIndex] || this.heap[currentIndex] < this.heap[rightIndex] ) { if (this.heap[leftIndex] < this.heap[rightIndex]) { const temp = this.heap[currentIndex]; this.heap[currentIndex] = this.heap[rightIndex]; this.heap[rightIndex] = temp; currentIndex = rightIndex; } else { const temp = this.heap[currentIndex]; this.heap[currentIndex] = this.heap[leftIndex]; this.heap[leftIndex] = temp; currentIndex = leftIndex; } leftIndex = currentIndex * 2; rightIndex = currentIndex * 2 + 1; } return returnValue; } } 심지어 문제 구조에서, 힙에 들어가야하는게 객체요소이면서, 객체의 어떤 Key 값에 따라서 실시간 정렬해야할 경우엔 여기서 또 out of index , key값 더 생각해서, class MinHeap { constructor() { this.heap = [null]; } isEmpty() { return this.heap.length === 1; } _swap(a, b) { [this.heap[a], this.heap[b]] = [this.heap[b], this.heap[a]]; } push(value) { this.heap.push(value); let currentIndex = this.heap.length - 1; let parentIndex = Math.floor(currentIndex / 2); // while (parentIndex !== 0 && this.heap[parentIndex].key > value.key) { this._swap(parentIndex, currentIndex); currentIndex = parentIndex; parentIndex = Math.floor(currentIndex / 2); } } pop() { if (this.isEmpty()) return; if (this.heap.length === 2) return this.heap.pop(); const returnValue = this.heap[1]; this.heap[1] = this.heap.pop(); let currentIndex = 1; let leftIndex = 2; let rightIndex = 3; while ( (this.heap[leftIndex] && this.heap[currentIndex].key > this.heap[leftIndex].key) || (this.heap[rightIndex] && this.heap[currentIndex].key > this.heap[rightIndex].key) ) { if (this.heap[rightIndex] === undefined) { this._swap(leftIndex, currentIndex); currentIndex = leftIndex; } else if (this.heap[rightIndex].key < this.heap[leftIndex].key) { this._swap(rightIndex, currentIndex); currentIndex = rightIndex; } else if (this.heap[rightIndex].key >= this.heap[leftIndex].key) { this._swap(leftIndex, currentIndex); currentIndex = leftIndex; } leftIndex = currentIndex * 2; rightIndex = currentIndex * 2 + 1; } return returnValue; } } 요로코롬 이렇게 힙구조 작성하는데만 4~5분 먹고, 그담 문제 풀이 본격적으로 시작할 수 있습니다..파이썬의 deque 같은경우는 자바스크립트에선 Queue 구조 1분. 먹고왜 사람들이 파이썬 코테로 많이 쓰는지 알겠네요..ㄷㄷ;;import heapq , 단 1초면 모듈 가져오고, 끝이네요.코테에서 import 모듈 제한 없다면 진짜 무조건 파이썬이네요 ;;
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
열부분 슬라이싱 질문
행부분을 temp = board[j][i+5]로 슬라이싱하셨는데열부분은 temp = board[j:j+5][i]로는 슬라이싱이 안되나요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
시간복잡도 기준 질문
전 강의(수의 합)에서는 시간복잡도 때문에 for문 한번만 작성해야하고 어느문제는 그냥풀어도 되는건지 그 기준이 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
두 리스트 합치기 문제 질문합니다.
while(p1<n and p2<n2): if arr1[p1] <= arr2[p2]: newArr.append(arr1[p1]) p1+=1 print(newArr)위 while문에서 and를 써야만 동작되는 이유가 있을까요?저는 문제를 풀 때 and가 아니라 or로 작성하여 에러가 발생하였습니다. 둘 중 하나만 도달하면 되는데 and로 쓰는 이유를 알 고 싶습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
다른풀이법 / 무엇이 더 효율적인지 ?
저의 풀이입니다 제가 채점 프로그램을 사용할 수 없는 환경이라서 다른 테스트를 못해보았습니다 sum에 하나씩 더해 갈때 cnt 를 증가시키고 만약 더한 뒤에 money 보다 크다면 증가했던 cnt 를 다시 back 시키기 위해 -1 했습니다 sum == money 경우 전역변수 flag 를 True 하여 나머지 재귀함수들을 바로 종료시키도록 하였습니다 질문1) 괜찮은 풀이인가요? 그리고 전에 배운 그리디 알고리즘으로도 풀 수 있는 거 같은데 질문2) 어떤 풀이가 더 효율적인 풀이인가요? 강의 잘보고 있습니다 항상 친절한 답변 주셔서 감사합니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
말그대로 역수열 원리 그자체로 구현했는데 코딩테스트에서는 못쓸것같습니다
문제에서 사람이 처음 생각하는 그 원리 그자체로 구현했습니다.print 중간 중간에 계속 찍고, 오류 수정하고 , 찍고 오류 수정하고, 디버깅하고 수정하고 또 하고 수정하고,처음부터 완벽하게 하는거 if, for문 조건 틀리지않게 하는거 아니면,코딩테스트 시간적으로는(10분 15분 사이로는) 힘들것같습니다.풀이, 강의듣는데 코딩테스트에서는 저런 사고를 많이 늘려야할것같습니다. 많이 배우고 있습니다. 4일안으로 완강해보겠습니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
자료구조_교육과정 설계
안녕하세요 선생님 항상 강의 잘 듣고 있습니다.강의 문제 푸는 과정 중 궁금점이 있어 글 남깁니다! 자료구조 중 ‘교육과정설계’ 문제의 입력 설명 조건 중 가장 마지막에“수업 설계는 같은 과목을 여러 번 이수하도록 설계해도 됩니다.” 라는 조건이 있습니다.저는 이 조건을 FBCSBA 이런식으로 설계해도 된다고 해석했는데요 CBA1FBCSBA이렇게 테스트 케이스를 돌리면 NO라는 결과가 나와서요! 문제에 대해 조건 이해가 부족했던건지 궁금해서 글 남깁니다. 항상 강의 잘 듣고 있습니다! 선생님 덕분에 코딩테스트 실력도 향상되고 알고리즘에 대해 이해도 갖출 수 있었습니다.좋은 강의 너무 감사합니다. 항상 좋은 하루 보내세요! 감사합니다~
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
sum == total // 2 질문 , 파이썬의 형변환 , 타입 질문
저의 풀이입니다 . 강의에서sum == total // 2이 코드에서 예외가 발생할 수 있다고 하셨는데 몫을 구하지말고바로 나누기로 해서 풀면 되지않을까요? 그리고 궁금한점이파이썬에서는 타입이 달라도 ( 16 정수타입 과 16.0 실수타입 )같다고 인식되나요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
문제 끝까지 안읽고 K번째 큰수.. 말장난에 당해버렸습니다..
K번째 큰 수가 그거였군요..처음에 키워드가 딱 조합,순열 문제길래초반인데 뭐지 했습니다.근데 입력제한이 N이 100이하더군요그래서 바로 삼중포문 돌려서 풀었는데 ,case#1만 success 뜨고 나머진 다 wrong answer 떠서뭘 잘못했나? 하고, 결국 조합까지 구현해서 풀었는데도 오류 뜨길래 1시간넘게 고민하다가 문제 다시 보고 해결했습니다...문제 마지막줄 22 안읽고 그냥 풀다가..., 추가로이제껏 문제들 다 자바스크립트로 푸는게 익숙해서 파이썬으로 알고리즘 문제 푸는게 안 익숙하네요..특히 자바스크립트에서 항상 쓰던, 전개연산자랑 특히, 고차함수랑 구조분해..(map,filter,sort,reduce,forEach, flatmap 같은 것들 많이 썻는데)파이썬에서의 위와 같은 기능으로서 존재하는것들을 사용해서, 구현하고자 싶어하는걸 구현하는게 진짜 적응이 안됩니다 그런데 파이썬도 자바스크립트처럼, 혹시 순열,조합, 트라이 구조나 힙 등.. 구현하기 귀찮은것들.. 구조 이용해서 풀려면 다 구현해놓고 써야하나요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
윈도우11은 작동오류나는거 해결했습니다
기존에 쓰던거 지우고, 파이썬 3.11 Latest 받고돌렸을때 계속 그대로여서,컴터 한대 때리니, 블루스크린 떳습니다. 그리고 다시 컴터 키고 비주얼 코드 키고 다시 실행하고 복사해서 옮긴뒤 채점기 실행하니 Success 잘 뜨네요.. 휴,..흠
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
15. 토마토(BFS : Breadth First Search) 질문
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다.라고 해서 m, n 을 입력 받았는데 왜 틀린지 모르겠습니다.강사님 풀이에서 n, m이라고 받으신 이유도 모르겠습니다....아래 코드에서 제대로 array 받아오는 것 같은데 이유를 틀리는 이유를 모르겠습니다...!강사님이 제공해주신 테스트 케이스는 다 통과하지만 백준에서는 틀리는 이유를 모르겠습니다... 6 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 # 받아온 array [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 0] [0, 0, 0, 0, 0, 1] 8import sys sys.setrecursionlimit(10 ** 6) # sys.stdin=open("in5.txt", "r") def valid_coord(x, y): if 0 <= x < m and 0 <= y < n: return True else: return False def print_array(array): for elem in array: print(elem) def bfs(): while queue: # tmp_len = len(queue) # for _ in range(tmp_len): temp = queue.popleft() temp_dis = dis[temp[0]][temp[1]] for dx, dy in zip(dxs, dys): nx = temp[0] + dx ny = temp[1] + dy # 익지 않은 상태이거나 유효한 좌표일 때 if valid_coord(nx, ny) and arr[nx][ny] == 0: queue.append((nx, ny)) arr[nx][ny] = 1 dis[nx][ny] = temp_dis + 1 if __name__ == '__main__': from collections import deque n, m = map(int, input().split()) arr = [] for _ in range(m): arr.append(list(map(int, input().split()))) dis = [] for _ in range(m): dis.append([0] * n) dxs = (-1, 1, 0, 0) dys = (0, 0, -1, 1) # print_array(arr) # print('----') # print_array(dis) queue = deque() for i in range(m): for j in range(n): if arr[i][j] == 1: queue.append((i, j)) bfs() # print_array(dis) # arr에서 0을 발견하면 flag = False로 설정 flag = True for i in range(m): for j in range(n): if arr[i][j] == 0: flag = False result = 0 if not flag: print(-1) else: result = max(max(dis)) print(result)