월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
4.19일부터 시작하는 코딩테스트 스터디원 구합니다.
김태원선생님 파이썬 코테 강의 스터디원 모집합니다. 링크는 아래와 같습니다. https://www.inflearn.com/studies/504882
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
스스로 작성한 코드 오류 질문드립니다.
선생님의 풀이처럼 토마토가 있는 경우를 모두 queue에 넣은 다음 bfs를 한번만 하는 것이아니라, 토마토가 있을 때마다 {queue에 넣고 bfs돌리고}를 반복하였습니다. 결과가 -1일때만 while문에 빠져서 답이 안나오는데 무엇이 문제일까요 ㅠㅠ 감사합니다~ import sys import copy from collections import deque from collections import defaultdict sys.stdin = open("input.txt","rt") def bfs(i,j): dq = deque() days[i][j]=1 #새로운 출발점 dq.append((i,j)) while dq: x,y = dq.popleft() for i in range(4): nx,ny = x+dx[i],y+dy[i] if 0<=nx<n and 0<=ny<m and nums[nx][ny]==0: #토마토 있음 if days[nx][ny] == 0: #아직 방문X days[nx][ny] = days[x][y]+1 dq.append((nx,ny)) elif days[x][y]+1 < days[nx][ny]: #기존보다 더 빨리 익을 수 있음 days[nx][ny]= days[x][y]+1 dq.append((nx,ny)) if __name__=="__main__": m, n = map(int,input().split()) nums = [list(map(int,input().split())) for _ in range(n)] #원래 토마토배열 days = copy.deepcopy(nums) #토마토 익는 데 걸리는 시간 dx = [0,0,-1,1] dy = [1,-1,0,0] answer = 0 for i in range(n): for j in range(m): if nums[i][j]==1: #원래 토마토있음 bfs(i,j) #정답계산 tmp = 0 for i in range(n): for j in range(m): if days[i][j]==0: #익지 않은 토마토 존재 print(-1) sys.exit() elif days[i][j]>tmp: #최대 횟수 tmp = days[i][j] if tmp ==1: #이미 다 익어있는 경우 print(0) else: print(tmp-1)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 선생님, 이 답도 통과가 될까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. edu=input() n=int(input()) stack=[] for x in edu: stack.append(x) def check(a): ans=[] for x in a: if x in stack: ans.append(x) ans=str(ans) return ans for _ in range(n): temp=input() if check(temp)==str(stack): print('yes') else: print('no') 안녕하세요 선생님 늘 수업 잘 듣고있습니다! 선생님, 문제를 보자마자 스택생각안하고 푼 문젠데..이 답도 통과가 될까요? (코드를 돌렸을 땐 정상으로 출력이 됩니다) popleft()를 썼을 때와 아닐 때의 시간이 많이 차이나는 지 궁금합니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 문제가 이해되지 않는 부분이 있어서 질문드립니다.
입력예제 1 을 보면 2 6 2 5 3 5 2 7 3 8 9 15 3 10 3 4 15 8 16 6 6 17 3 10 11 18 7 14 7 15 이렇게 되어있는데 이것의 의미가 2 >TC 2개 생성 6 2 5 3 > 6개의 문자열 중에서 2번째에서 5번째까지의 수를 오름차순하여 3번째 수를 출력하라 5 2 7 3 8 9 > 문자열 6개 !!!!! 15 3 10 3 > 15개의 문자열 중에서 3번째에서 10번째의 수를 오름차순 하여 3번째 수를 출력하라 4 15 8 16 6 6 17 3 10 11 18 7 14 7 15 > 문자열 15개 !!!!! !!!!가 있는 부분의 숫자는 어떻게 나오는 기준이 뭘까요 그냥 랜덤으로 돌리는거까지 하라는 걸까요
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
for구문에서 질문이 있습니다.
for i in range(3): for j in range(7): tmp = a[j][i:i+5] if tmp == tmp[::-1]: cnt += 1 for k in range(2): if a[i+k][j] == a[i+5-k-1][j]: cnt += 1 else: break print(cnt) 위와 같이 for k 구문을 반대로 바꿔보았는데 예를 들어 회문이 맞을 때, cnt를 하나 증가시키고 이외의 경우에는 break하도록 했는데 이 경우 오답이 나오는데 혹시 이유가 있을까요? 논리적으로는 가능하다고 생각했는데, 답은 아닌 것 같습니다...
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
혹시 11. 등산 경로(BFS) 코드 알려주실 수 있을까요?
dx=[0,1,0,-1] dy=[-1,0,1,0] n = int(input()) board = [ [0]*n for i in range(n) ] dq = deque() MAX = -999 MIN = 999 cnt = 0 for i in range(n): # 한 줄씩 입력 받기 tmp = list(map(int,input().split())) for j in range(n): board[i][j] = tmp[j] if tmp[j] < MIN : MIN = tmp[j] sx =i sy =j dq.append([sx,sy]) elif tmp[j]>MAX: MAX = tmp[j] ex = i ey = j while dq: tmp = dq.popleft() # if tmp[0] == ex and tmp[1]==ey: cnt+=1 for a in range(4): X = dx[a]+tmp[0] Y = dy[a]+ tmp[1] if 0<=X<n and 0<=Y<n and board[X][Y] > board[tmp[0]][tmp[1]] : # board[X][Y] = 0 dq.append([X,Y]) print(cnt) ''' 해당 코드에서 뭐가 잘못된건지 집어주시면 감사하겠습니다. '''
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요, 강사님. 코드 관련해서 질문있습니다.
항상 양질의 강의 감사합니다. 다름이 아니라, 강사님께서 구현해주신 코드 중에 정렬하는 sort()가 포함되어 있는데 혹시 이것이 반드시 필요한 이유가 있을까요? 감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
조합결과를 인덱스로 사용하는 방법
안녕하세요 기존의 조합처럼 1부터 n까지의 조합결과를 구한다음에 그 값을 a 리스트의 인덱스로 사용하여 sum값을 구해도될까요? 테스트는 통과했습니다 def DFS(L, s): global tmp, cnt if L == k: tmp = 0 for i in range(L): tmp += a[res[i]-1] if tmp % m == 0: cnt += 1 else: for i in range(s, n+1): res[L] = i DFS(L+1, i+1)if __name__ == "__main__": n, k = map(int, input().split()) a = list(map(int, input().split())) m = int(input()) tmp = 0 cnt = 0 res = [0] * (k+1) DFS(0, 1) print(cnt)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
중복 제거 set함수 이용
안녕하세요 순열을 구할때 중복순열의 코드에서중복을 제거할때 set함수를 이용해도 될까요 ?테스트는 통과했습니다 def DFS(L): global res, cnt if L == m: if len(res) != len(set(res)): pass else: for i in res: print(i, end = ' ') print() cnt += 1 else: for i in range(1, n+1): res[L] = i DFS(L+1)if __name__ == "__main__": n, m = map(int, input().split()) res = [0] * m cnt = 0 DFS(0) print(cnt)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
cutting edge 시간 복잡도 관련
안녕하세요. 소스코드를 보면 지금까지 잔돈의 총 합이 T보다 크면 가지를 치게 구현이 되어있는데, 만약 제가 짠 코드처럼 저런 경우에 추가적으로 앞으로 남은 모든 잔돈의 총 합을 현재 합에 더해도 T보다 작은경우까지 가지를 치게 되면 sum(tot[L:]) 이 파트가 매 재귀함수마다 계산을 하게 되면서 오히려 시간복잡도가 늘어나는지 궁금합니다. (사실 리스트 인덱싱 및 내장함수 sum을 실행할때 시간복잡도 빅o로 어떤지가 궁금하기도 합니다.) t = int(input()) k = int(input()) ary = [list(map(int,input().split())) for _ in range(k)] cnt = 0 tot = [ x[0]*x[1] for x in ary ] def DFS(L,al): global cnt if al == t: cnt +=1 return if L == k: return if al + sum(tot[L:]) < t or al > t: return else: for i in range(ary[L][1]+1): DFS(L+1,al + ary[L][0]*i) DFS(0,0) print(cnt)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
string으로 문제 풀기
import sys sys.stdin = open('input.txt','rt') n = int(input()) writed = '' for _ in range(n): writed+=input() for _ in range(n-1): word = input() writed = writed.replace(word,"") print(writed) 이런식으로도 한번 풀어봤는데 이렇게 계속 string을 변화시키면서 풀이하는 방법은 시간 효율이 낮은 편인가요??
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS 조건
DFS 종료 조건에 L==n 그리고 sum==f라고 적시해주셨는데요, L==n은 충족하지만 sum==f조건이 충족하지 않을 시 프로그램은 종료하지 않고 무한 루프에 빠지지 않을까라는 생각이 듭니다... L==n은 충족하지만 sum==f는 충족하지 않는 결과를 해당 코드가 처리하는지 여쭙고 싶습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
교수님 질문 있습니다!
문제 조건 중에 '정답이 여러 개일 경우 오름차순' 으로 되어있는데 따로 조건을 안 걸어도 괜찮을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이썬 실전 모의고사 강의 업로드 일정
안녕하세요 실전 모의고사 파이썬용 업로드 애타게 기다리고 있습니다. 3월 안에 강좌가 열리게 될까요? 감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
7번 교육과정(큐) 질문드려요
7번 교육과정설계 답안을 보면 for i in range(n): for x in plan: if x ~~~ if x! ~~~~~ print() else: ~~~~ 이런식의 파이썬 코드인데 else 위치에 대해 궁금한점이 있습니다. 결국 for x in plan 을 돌면서 밑의 조건들을 수행하고 else부분은 이러한 for문 밑의 조건들과 반대가 되어 이렇게 파이썬 코드가 진행 되는 것 같은데 제가 생각한 부분이 맞나요? 보통 else문은 if문과 반대가 되었을때 쓰이는 것으로 알고 있어 else문의 위치가 많이 어색합니다. 혹시 else문을 if문의 반대에 쓰이는 것 뿐만 아니라 위 코드처럼 for문 전체에 반대가 되는 조건일 때도 쓰이는지 여쭤보고 싶습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
그냥 웃겨서 올려봐요
길죠..? 헛웃음나오네요 열심히 배우겠습니다 화이팅! n = int(input()) arr = [list(map(int, input().split())) for _ in range(n)] cnt = 0 for i in range(n): for j in range(n): a = arr[i][j] if 0 <i<n-1 and 0 < j <n-1 : if a > arr[i-1][j] and a > arr[i+1][j] and a>arr[i][j-1] and a > arr[i][j+1]: cnt +=1 elif i == n-1 or j == n-1: if i == n-1 and j ==n-1: if a > arr[i-1][j] and a>arr[i][j-1]: cnt+=1 elif i == n-1: if j>0: if a > arr[i-1][j] and a>arr[i][j-1] and a > arr[i][j+1]: cnt +=1 if j == 0 : if a > arr[i-1][j] and a > arr[i][j+1]: cnt +=1 elif j == n-1: if i > 0: if a > arr[i-1][j] and a > arr[i+1][j] and a>arr[i][j-1]: cnt+=1 if i == 0 : if a > arr[i+1][j] and a>arr[i][j-1]: cnt +=1 elif i== 0 or j == 0 : if i == 0 and j == 0: if a > arr[i+1][j] and a>arr[i][j+1]: cnt+=1 elif i == 0: if j <n-1: if a > arr[i+1][j] and a>arr[i][j+1] and a > arr[i][j-1]: cnt +=1 elif j == n-1: if a > arr[i+1][j] and a > arr[i][j-1]: cnt +=1 elif j == 0: if i <n-1: if a > arr[i+1][j] and a > arr[i-1][j] and a>arr[i][j+1]: cnt+=1 elif i == n-1: if a > arr[i-1][j] and a > arr[i][j+1]: cnt +=1 print(cnt)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
본 강의에 정렬(sort) 파트가 없는 이유가 무엇인가요?
기업 면접을 위해 알고리즘을 공부하던 중 힙 소트라는 것을 알게 되었는데 본 강의에서는 다루고 있지 않더라구요 하지만 C/C++ 알고리즘 강의에서는 정렬을 다루고 있었습니다. 그 이유가 궁금합니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
BFS 토마토
혹시 토마토 상자가 3차원 배열인 경우에는 어떤식으로 이동할 지 알 수 있을까요? 이동 좌표는 아래와 같은데 층 이동을 어떻게 하는지 모르겠습니다. 총 2층인 3차원 배열 중 만약 익은 토마토가 있는 곳에서 시작되는 층이 0층인 경우 -1층을 할수가 있는건가요?ㅠ 그리고 만약 0층에서 1층으로 올라갈 경우 좌표가 어디서 시작하는지도 궁금합니다. dx=[-1,0,1,0,0,0] :행 dy=[0,1,0,-1,0,0] :열 hh=[0,0,0,0,-1,1] : 높이 이것저것 자료를 찾아봐도 명확하게 알기가 어려워 그림으로 간단하게 알려주실수 있으신지 문의드립니다.. 입력값은 아래와 같습니다. 5=가로 3=세로 2=높이 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
뒤집은 소수
reverse 함수를 구현할 때 이렇게 구현했는데 이렇게 해도 상관없나요? def reverse(x): x = str(x) x = int(x[::-1]) return x 브루트포스 방법으로 하나하나를 확인하면 시간복잡도가 늘어나서 소수 판별시 범위를 줄이고자 중간값까지만 하셨는데 그 과정에서 몫이 아니라 math모듈을 사용해서 이렇게 해도 상관없나요? for i in range(2, int(math.sqrt(x))+1):
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
수행시간 차이
for i in range(1,N+1): for j in range(1,N+1): if all(a[i][j]>a[i+dy[k]][j+dx[k]] for k in range(4)): cnt+=1 """for i in range(1,N+1): for j in range(1,N+1): up= a[i+1][j] down=a[i-1][j] right=a[i][j+1] left=a[i][j-1] if a[i][j]>up and a[i][j]>down and a[i][j]>left and a[i][j]>right: cnt+=1 여기서 위에 for문은 3중 for문으로 수행시간이 O(n^3), 밑에 for문은 2중 for문으로 수행시간이 O(n^2)인가요? 그렇게 되면 3중 for문의 수행시간이 더 오래 걸리는데, 둘 중에 효율성이 뭐가 좋을까요?