월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
12. 단지 번호 붙이기(DFS) 코드 질문
import sys sys.setrecursionlimit(10**6) n = int(input()) arr = [] for _ in range(n): temp = input() arr.append([int(num) for num in temp]) dxs, dys = (-1, 1, 0, 0), (0, 0, -1, 1) def valid_coord(x, y): if 0 <= x < n and 0 <= y < n: return True else: return False # 1인 부분을 전부 탐색한 후 다 탐색하면 True를 return하는 함수 def dfs(x, y): global cnt if arr[x][y] == 0: return False if arr[x][y] == 1: arr[x][y] = 0 cnt += 1 for dx, dy in zip(dxs, dys): nx = x + dx ny = y + dy if valid_coord(nx, ny): dfs(nx, ny) return True return False cnt_arr = [] # arr[0][0] = 0 # 이 것이 문제 for i in range(n): for j in range(n): cnt = 0 if dfs(i, j): cnt_arr.append(cnt) print(len(cnt_arr)) cnt_arr.sort() for elem in cnt_arr: print(elem) 질문 1.정답은 똑같이 나오는데 위의 문제와 똑같은 문제인https://www.acmicpc.net/problem/2667위의 문제는 위의 코드로 통과가 되지 않습니다..ㅠㅠ계속 고민해봤지만 왜 그런지는 모르겠습니다 선생님--> 해결 되었습니다. arr[0][0] = 0 # 이 것이 문제 2번 질문또한, 아래 강사님 풀이의 DFS 함수는 return 조건이 없는데 이럴 경우, 어떻게 함수가 탈출을 하는지 이해가 안갑니다...보통 재귀 문제에서는 return 조건을 통해서 탈출을 하던데아래 문제에는 return이 없어서 혼동이 옵니다... def DFS(x, y): global cnt cnt+=1 board[x][y]=0 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: DFS(xx, yy) 아래는 전체 코드 입니다.import sys sys.stdin=open("input.txt", "r") dx=[-1, 0, 1, 0] dy=[0, 1, 0, -1] def DFS(x, y): global cnt cnt+=1 board[x][y]=0 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: DFS(xx, yy) if __name__=="__main__": n=int(input()) board=[list(map(int, input())) for _ in range(n)] res=[] for i in range(n): for j in range(n): if board[i][j]==1: cnt=0 DFS(i, j) res.append(cnt) print(len(res)) res.sort() for x in res: print(x)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드도 괜찮나요?
강사님 안녕하세요. 강의 잘 듣고있습니다. 감사합니다. 맥 환경이라 정답이 맞는지 모르겠네요.. 이렇게 코드 짜도 되나요?혼자서 풀면 풀리긴하는데.. 뭔가 알고리즘적 사고라기 보다는, 생각나는대로 풀기도하고, 강사님 코드보다 대부분 다 길어서.. 잘 공부하고 있는건지 모르겠습니다..
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
reverse 함수 관련 질문드립니다
n = int(input()) a = input().split() def reverse(x): x = str(x) return int(x[::-1]) def isPrime(x): for i in range(2, x+1): if x==i: return True elif x%i==0: return False for i in a: if isPrime(reverse(i)): print(reverse(i), end=" ")위처럼 슬라이싱으로 reverse함수를 작성해도 괜찮을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이분검색 while문 조건
안녕하세요 강사님 수업을 듣다가 궁금한 점이 생겨서 질문드립니다.while문의 조건이 lt<=rt: 인데 lt>rt가 되는 경우는 탐색이 완료되는 동안에는 없을것같아서 while문의 조건을 true로 하고 실행 시켜봤는데 채점프로그램을 돌려보면 오류가 발생합니다.true가 아니라 lt<=rt를 써야되는 이유가 어떤 상황일까요
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
증가 수열 만들기 ( deque 사용 ) 코드 질문
전 시간에 deque 구조를 배워서한번 이용해봤습니다 처음에 맨왼쪽과 맨오른쪽 비교하여 제일 작은 값을 구하고 (tmp) 1부터n까지의 수열이니까 제가 구한값 tmp 에 1씩 증가시켜 n까지 반복 코드의 효율성면에서 문제될 것이 있을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
options - configure idle 이 없습니다 ㅠ
새로 실행할때 마다 나오는 저장문구를 없애고 싶은데 강의 대로 options 을 눌러도 configure IDLE이 나오지 않습니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
최소힙 문제를 이분정렬로 풀어보았습니다. 코드 조언 부탁드릴게요!
from collections import deque List = [] List = deque(List) List2 = [] while(True): x = int(input()) if x != 0 and x != -1: m = 0 n = len(List) -1 answer = len(List) if List: while(m <=n): if x <= List[(m+n)//2]: answer = (m+n)//2 n = (m+n)//2 -1 else: m = (m+n)//2 + 1 List.insert(answer, x) else: List.append(x) elif x == 0: if len(List) == 0: List.append(-1) else: List2.append(List.popleft()) else: break for _ in List2: print(_)정답 출력을 위해 List2 로 정답들을 담았고pop 시간을 줄이기 위해 deque를 썼습니다.이렇게 풀어도 괜찮을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
교육과정설계 질문 드립니다
import sys from collections import deque sys.stdin = open("input.txt", 'r') e = input() n = int(input()) for i in range(1,n+1): cur = deque(input()) cnt = 0 idx = 0 while cur and idx <len(e): cur_pop = cur.popleft() if cur_pop == e[idx]: cnt += 1 idx += 1 if cnt == len(e): print("#%d YES" %i) else: print("#%d NO" %i)이렇게 코드 작성했더니 다른 case에 대해서는 다 맞지만 case2에 대해서 틀린 답이 나옵니다.어디가 잘못된 걸까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
동전교환 효율성
안녕하세요동전교환문제에서 저는 부분집합을 만들고 계산은 마지막에 하는 방식으로 풀어봤습니다.효율성 방식에서 상태트리로 쭉 나가는 강사님 방식이랑 비교하면 뭐가 더 나은가요?def DFS(L): money= m global minn cnt=0 if L==n: #계산은 여기서 for i in range(0,n): if ch[i]==1: cnt+=(money//p[i]) money%=p[i] if cnt<minn and money==0: minn=cnt else: # 깊이탐색해서 경우의 수 만들기 ch[L]=0 DFS(L+1) ch[L]=1 DFS(L+1)
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
gcd 최대공약수
안녕하세요 선생님정보 올림피아드같은 대회에서는 gcd같은 함수를 사용할 수 있을까요?만약 최대공약수를 구하는 문제가 나온다면gcd를 이용해서 풀어도 되는건가요? 아니면 최대공약수를 구하는 코드를 작성해야 하나요? 그리고, 혹시 파이썬 내장함수 math의 gcd 함수가 작동되는 원리를 알고계신가요?? 감사합니다.
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이항계수
안녕하세요 선생님 https://www.acmicpc.net/problem/11050제가 이항 계수1 이라는 문제를 풀고 있는데, 이항 계수가 뭔지 잘 모르겠어서 질문 올립니다.이항정리에 대해서 검색도 해보았는데,를 어떻게 구해야 할까요?감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
약수K, 시간 복잡도
요렇게 하면 시간 복잡도를 줄일 수 있을 것 같아욤. def input_function(line_string: str): n, k = map(int, line_string.split(' ')) half_value: float = n ** 0.5 temp_results: list[int] = [] for value in range(1, int(half_value) + 1): if n % value == 0: temp_results.append(value) final_results: list[int] = [] for i in temp_results: final_results.append(i) for i in temp_results[::-1]: final_results.append( 6 // i) if k > len(final_results): return -1 return final_results[k-1]
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
exit_code1 오류코드
안녕하세요후위연산 채점 프로그램을 돌리면 exit_code1 오류코드가 나옵니다. 이 오류가 뭔지 알 수 있을까요?직접 int1~5까지 돌려을때는 정답 일치 하는데 프로그램 돌리면 exit_code1가 뜹니다.그나마 의심가는게 eval같은데 혹시 eval함수는 사용하면 안되나요?코드 첨부합니다. import sys #채점할떄는 주석 #sys.stdin=open('코딩테스트\input.txt','rt') n=sys.stdin.readline() stack=[] for i in n: if i.isdigit(): stack.append(int(i)) elif not i.isdigit(): b=stack.pop() a=stack.pop() stack.append(eval(f'{a}{i}{b}')) print(stack[0])
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
함수 질문입니다!
강사님 강의가 너무 도움이 많이 됩니다. 감사합니다!구글 검색을 해도 잘 모르는 부분이라 이렇게 질문을 남깁니다.if __name__== ~~max_h=0 ;이렇게 1번 같은 구문으로 시작점을 알린다는 건 알겠는데 이걸 임포트 구문 다음에 바로쓰면 되는게 아닌가요? 어떤 상황에서 사용하는지 잘 모르겠습니다. 2번은 파이썬에서 ; 세미콜론은 굳이 사용하지 않는다고 배웠는데 왜 사용하신건지 궁금합니다! 명절 잘 보내세요!! 감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
격자판 회문수 풀이
a=[list(map(int, input().split())) for _ in range(7)] res=0 def check(a): res=0 for i in range(3): temp=a[i:i+5] temp.reverse() if temp==a[i:i+5]: res+=1 else: res+=0 return res for i in range(7): temp=list([0]*7) temp2=list([0]*7) for j in range(7): temp[j]=a[i][j] temp2[j]=a[j][i] res+=check(temp) res+=check(temp2) print(res) 이렇게 풀어도 괜찮을까요??
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
효율성
안녕하세요 저는 정렬을 사용하지 않고 min,max를 이용해서 풀었는데 정렬로 푸는게 더 효율적일까요?코드 첨부합니다.while squre: if len(squre)==1: boat+=1 break if max(squre)+min(squre)>m: squre.remove(max(squre)) boat+=1 else: squre.remove(max(squre)) squre.remove(min(squre)) boat+=1
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
백준 10815번 list와 set차이
안녕하세요, 선생님항상 강의 잘 듣고 있습니다. https://www.acmicpc.net/problem/10815 제가 백준을 푸는데, 이 10815번 문제가 list로 찾으면 시간 초과가 뜨고, set으로 바꿔서 찾으면 시간 초과가 안뜨더라고요..set이 순서가 없고, 중복이 안된다는것은 알고있습니다.하지만 왜 set으로 바꿔서 속도가 빨라지는건지 궁금합니다. list를 사용한 코드 - 시간 초과N = int(input()) a = list(map(int, input().split())) M = int(input()) b = list(map(int, input().split())) for i in b: if i in a: print(1) else: print(0) set을 사용한 코드N = int(input()) a = set(map(int, input().split())) M = int(input()) b = set(map(int, input().split())) for i in b: if i in a: print(1) else: print(0) 감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
블로그 포스팅 문의
안녕하세요 강사님?혹시 제공해주시는 문제랑 풀이를 블로그에 포스팅해도 괜찮을까요? 개인 공부 기록을 목적으로 합니다.강의 잘 듣고 있습니다. 항상 건강 유의하시길 바랍니다.공익규 드림.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
if 와 elif의 차이가 무엇인가요?
안녕하세요 선생님! 선생님께서 언제는 elif를 쓰실 때도 있고 지금처럼 if를 두번 쓰시는 경우가 있는데 혹시 두 경우의 차이가 어떻게 되는가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
얕은 복사 해결법
안녕하세요 좋은 강의덕분에 실력 향상을 느끼고 있는 학생입니다.궁금한점이 있어 질문드립니다.스도쿠 문제를 풀면서 3*3의 9개 사각형을 체크하기 위해 리스트를 만들었습니다. 아래와 같은 방식을 사용했더니 한 값만 삭제해도 나머지도 같이 삭제가 되더라구요. 얕은 복사로 인해 같은 메모리를 공유해서 그런거 같은데 한 값만 삭제되는 깊은 복사가 되게 추천하시는 방법이 있나요?사각형=[[i for i in range(1,10)]]*9 del 사각형[0][0] print(사각형) >>> [[2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9]]