월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 강사님 질문 드립니다
n, m = map(int, input().split())princies = deque([x+1 for x in range(n)])cnt = 1while len(princies) > 1: if cnt == m: princies.popleft() cnt = 1 else: princies.append(princies.popleft()) cnt += 1print(princies[0]) 제가 작성한 코드와 강의 코드를 비교해 제 코드가 너무 단촐하여 질문드립니다. 5개의 in, out 정답은 맞는데 제가 맥 환경이라 채점을 할 수가 없네요.. 이렇게 구현해도 되는지 문제가 있다면 어떤부분이 문제인지 질문드립니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
a 리스트는 어떻게 발생하게 된건가요?
N개의 숫자로 이루어진 숫자열이 주어지면 해당 숫자열중에서 s번째부터 e번째 까지의 수를 오름 차순 정렬했을 때 k번째로 나타나는 숫자를 출력하는 프로그램을 작성하세요. - 입력 설명 1.1 첫 번째 줄에 테스트 케이스 T(1<=T<=10)이 주어집니다. 각 케이스별 1.2 첫 번쨰 줄은 자연수 N(5<=N<=500), s, e, k가 차례로 주어진다. 1.3 두 번쨰 줄에 N개의 숫자가 차례로 주어진다. - 출력 설명 2.1 각 케이스별 k번째 수를 아래 출력예제와 같이 출력하세요. - 입력 예제 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 - 출력 예제 \# 1 7 \# 2 6 입력예제1 해설: 2 7 3 8의 숫자 중 3번째로 작은 수는 7이다. import sys sys.stdin=open("k번째.txt", 'rt') T = int(input()) # T의 값에 2? print('T:',T) for t in range(T): n, s, e, k = map(int, input().split()) print(f"n, s, e, k: {n}, {s}, {e}, {k}") a = list(map(int, input().split())) print(f"a: {a}") a = a[s-1:e] print(f"a 리스트의 s번째부터 e까지: {a}") a.sort() print(f"sorting된 a 리스트: {a}" ) print("#%d %d" %(t+1, a[k-1])) ```sh T: 2 n, s, e, k: 6, 2, 5, 3 a: [5, 2, 7, 3, 8, 9] a 리스트의 s번째부터 e까지: [2, 7, 3, 8] sorting된 a 리스트: [2, 3, 7, 8] #1 7 n, s, e, k: 15, 3, 10, 3 a: [4, 15, 8, 16, 6, 6, 17, 3, 10, 11, 18, 7, 14, 7, 15] a 리스트의 s번째부터 e까지: [8, 16, 6, 6, 17, 3, 10, 11] sorting된 a 리스트: [3, 6, 6, 8, 10, 11, 16, 17] #2 6 ``` 1. 입력 설명부분에서 첫번째 테스트 케이스가 2를 넣고 2. 두번재 줄은 N개의 숫자라면 2개의 숫자가 차례로 주어지는건가요? 3. 질문이 헷갈리네요. 특히 입력 설명 부분이 첫째줄이 어디이고 두째줄이 어디인지 모르겠습니다. 4. a의 변수값을 stdin으로 받을때는(예. 5 2 7 3 8 9) 두번째줄 6 2 5 3의 e번째 값을 첫 값으로 5 2 7 ..로 받아 3번째 줄을 나열해야하는데 이때 6을 첫 값으로 받았기에 6개의 자연수가 나열되어야 하는 규칙 맞는건가요? 그리고 입력예제의 4번째 줄은 어떻게 해서 생성된건가요? 생성된게 아니라 이전 6, 2, 5, 3과 같이 문제가 시작되는 지점인건가요? 그래서 4번째 줄의 15번째의 1번째 값이 15라서 5번째 줄의 나열된 수가 15개가 되는거고요? 결론적으로 s번째부터 e번째까지 수를 오름차순으로 정렬하고 k번쨰를 출력해야하는데
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
4, 5번 예제 질문
while lt <= rt: mid = (lt+rt)//2 cnt = count(mid) if cnt >= c: if cnt == c: result = mid lt = mid+1 else: rt = mid-1 제 풀이는 선생님께서 풀이하신 거에 하늘색 부분의 조건이 하나 더 있는데 이렇게 풀면 4, 5번 예제에서 답이 나오지 않습니다. 말이 위치할 수 있는 위치의 갯수와 c가 일치하지 않는 경우에도 답이 될 수 있는 이유가 궁금합니다..!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 코드도 괜찮은 풀이인지 궁금합니다!
import re s = input() s = re.sub(r'[^0-9]','',s) def divisorcnt(value) : ans = 0 for i in range(1,(int(value)+1)) : if (value % i)==0 : ans+= 1 print(ans) print(int(s)) divisorcnt(int(s) 강의 잘 보고 있습니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
카드 역배치 질문
for _in range(10)의 범위값이 왜 a가 아닌 10인지 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
희문문자열 검사
마지막 esle 부분을 들여쓰기 해서 if/else 구문으로 끝내면 결과 출력이 아래와 같이 됩니다. range를 설정했는데도 왜 중복으로 도는것이 생기는 걸까요? (강의에서 나온 for/else로 끝내는것과 어떤 차이인지 궁금합니다) #1 YES #1 YES #2 NO #3 YES #3 YES #4 NO #5 YES #5 YES
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
인덱스가 너무 헷갈립니다
안녕하세요 선생님, 해당 문제에서 인덱싱하는게 너무 헷갈려 질문드립니다. a = list(range(21)) 에서 0~20까지 리스트를 만드셨는데요. 우선 문제에서 1-20까지 카드로 시작합니다. 예를 들어 s, e = 2 ,4 를 했다고 가정했을때요. 문제에서는 2번째 카드와 4번째 카드인 2와 4를 바꾸는 것인데, 짜주신 코드에서는 0이 앞에 잇으므로, 1과 3을 바꾸는 것이 되버립니다. 이부분을 어떻게 이해해야할까요? 그리고 그냥 추가적인 질문은 res를 자주 쓰시는데 res는 무엇의 약자일까요? 감사합니다,
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 풀이도 맞을까요?
import sys sys.stdin = open("input.txt","r") n = int(input()) arr = [] for i in range(n) : arr.append(list(map(int,input().split()))) answer = 0 max_ans = 0 for val in arr : dice = [0] * 7 for i in val : dice[i] +=1 max_val = 0 for idx, value in enumerate(dice) : if max_val < value : max_val = value index = idx if max_val == 3 : tmp = 10000 + index*1000 if max_ans < tmp : max_ans = tmp elif max_val == 2 : tmp = 1000 + index*100 if max_ans < tmp : max_ans = tmp else : max_dice = 0 for j in val : max_dice = max(max_dice, j) tmp =max_dice * 100 if max_ans < tmp : max_ans = tmp print(max_ans) 안녕하세요 강사님 강의 잘 듣고 있습니다. 이렇게 풀이하여도 괜찮을까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
슬라이싱 문의
a리스트의 s번째부터 e번째 까지의 슬라이싱 표현이 강의에서는 a[s-1:e] 라고 하셨는데 이해가 잘안되어서 혹시 자세한 설명과 함께 a[s-1,e-1] 이 될수는 없는지요
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
lagest max질문입니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 13:55초쯤에 largest = max(largest,tmp)라고해서 배열중에서 가장큰값을 꺼내오려고 코드짜신걸로알고있는데 굳이 lagest=0하고 배열에있는원소랑 값을 비교하는이유가 혹시 어떤건가요?? 코드작성시 largest=0으로 안하고 largest=max(Line)으로 해도 답은 200이나오는데 굳이 largest=0으로 초기화하는이유가뭔지 궁금합니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
RecursionError가 발생합니다
재귀함수 없이 코드를 돌렸을 때는 def Qsort(lt, rt): pos = lt pivot = arr[rt] for i in range(lt, rt): if arr[i] <= pivot: arr[i], arr[pos] = arr[pos], arr[i] pos += 1 arr[rt], arr[pos] = arr[pos], arr[rt] if __name__ == '__main__': arr = [45, 21, 23, 36, 15, 67, 11, 60, 20, 33] print('Before sort : ', end = ' ') print(arr) Qsort(0, 9) print() print('After sort : ', end = ' ') print(arr) Before sort : [45, 21, 23, 36, 15, 67, 11, 60, 20, 33] After sort : [21, 23, 15, 11, 20, 33, 36, 60, 45, 67] 로 결과가 잘 나왔습니다. 그런데 def Qsort(lt, rt): pos = lt pivot = arr[rt] for i in range(lt, rt): if arr[i] <= pivot: arr[i], arr[pos] = arr[pos], arr[i] pos += 1 arr[rt], arr[pos] = arr[pos], arr[rt] Qsort(lt, pos-1) Qsort(pos+1, rt) 재귀함수를 추가하니까 RecursionError: maximum recursion depth exceeded in comparison RecursionError가 발생했고 import sys sys.setrecursionlimit(10**6)을 추가해주니 Before sort : [45, 21, 23, 36, 15, 67, 11, 60, 20, 33] 만 나오고 After sort에 대한 결과가 안나옵니다ㅠㅠ 그냥 컴퓨터 문제일까요..?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
추후 보실 분들을 위해 남깁니다. 행번호를 -> y좌표에 대입 오류
이 문제 해설에서 sx, sy, ex, ey가 사용되진 않았지만 i행번호가 sx, ex 등 x좌표에 할당하고 있네요. j열번호도 마찬가지로 반대로 할당되고 있어서 다른 응용문제 풀땐 반대로 할당해서 풀어야 풀립니다~! 지금은 0,0 4,4가 시작/끝이라서 xy가 반대로되었는데도 올바르게 추력됩니다. 추후 보실 분들을 위해 남깁니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
BFS 풀이
안녕하세요. 해당 문제 BFS로 풀어봤는데요 import sys sys.stdin = open('input.txt','r') from collections import deque dx = [0,1,0,-1] dy = [1,0,-1,0] n = int(input()) board = [list(map(int, input().split())) for _ in range(n)] Q = deque() res = [] for k in range(100): aa = board.copy() print(aa[0]) print(board[0]) print() cnt = 0 for i in range(n): for j in range(n): if aa[i][j] > k: aa[i][j] = 0 Q.append((i, j)) while Q: tmp = Q.popleft() for l in range(4): a = tmp[0] + dx[l] b = tmp[1] + dy[l] if 0<=a<n and 0<=b<n and aa[a][b] > k: aa[a][b] = 0 Q.append((a, b)) cnt += 1 res.append(cnt) if cnt == 0: break print(max(res)) 한 번 돌때마다 aa = board.copy()로 복사해서 풀어주려고 했는데 답이 안나와서 print(aa[0])와 print(board[0])로 상태를 보니 [6, 8, 2, 6, 2] [6, 8, 2, 6, 2] [0, 0, 0, 0, 0] [0, 0, 0, 0, 0] 이런식으로 바뀌었더라구요. aa가 변경되더라도 board는 변하면 안될거 같은데 왜 board까지 영향을 받은 걸까요..?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
res의 크기는 m+1개만 만들면 되지 않을까요??
왜 n+1인지 모르겠습니다
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
ch 를 0부터 시작하게하여 체크리스트를 1개 더 잡는 이유가
dfs의 level과 상응하게 하기위해 하는 것인가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
res 의 크기설정 질문드립니다.
def dfs(L): global cnt if L==m: for i in range(L): print(res[i],end=' ') print() cnt+=1 else: for i in range(1,n+1): if ch[i]==0: ch[i]=1 res[L]=i dfs(L+1) ch[i]=0 n,m=map(int,input().split()) cnt=0 res=[0]*(m+1) #여기res의 크기는 n이아니라 m+1 이 들어가야 맞는게 아닌가 질문 드립니다! n=3,m=2 에서 3개중에 2개를 넣는 것이니까 들어갈 수는 m+1이 되었을 때 출력 되게 하는 것이 맞다고 생각합니다. ch=[0]*(n+1) # 또 여기 ch가 왜 0을 포함해서 만들어야하는지 이해가 가지 않습니다.123 중하나니까 체크리스트를 1부터 만들어야 하는 것 아닌가요..ㅠ dfs(0) print(cnt)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
BFS 개인적으로 작성해본 코드에서 질문이 있습니다.
import sys from collections import deque #sys.stdin=open("input.txt", "r") dx=[-1, 0, 1, 0,] dy=[0, -1, 0, 1] sys.setrecursionlimit(10**6) n,m = map(int, input().split()) graph =[list(map(int, input().split())) for _ in range(m)] q = deque() answer = [] count = 0 flag = 1 def bfs(): global count while q: size = len(q) for j in range(size): now = q.popleft() for i in range(4): x = now[0] + dx[i] y = now[1] + dy[i] if 0 <= x < m and 0 <= y < n and graph[x][y] == 0: q.append((x,y)) graph[x][y] = 1 count += 1 def chk(graph): global flag for i in range(m): for j in range(n): if graph[i][j] == 0: flag = 0 for i in range(m): for j in range(n): if graph[i][j] == 1: q.append((i,j)) bfs() chk(graph) if flag == 0: print(-1) else: print(count-1) 위와 같이 코드를 작성하였을때 모두 통과가 됩니다. 하지만 저는 궁금한점이, 왜 마지막 출력을 할때 count-1 을 해야 찾고자 하는 결과와 같아 질까요?? 전 한개의 레벨을 마치면 count 를 올려주는 식으로 코드를 짜봤습니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션2 코드 구현 능력 기르기 4번
안녕하세요! 섹션 2 코드 구현 능력 기르기의 대표값 문제(4번) 아래와 같은 방식으로 풀면 오답인가요? 채점기를 돌렸을 때는 모든 부분 오답이라고 뜨는데, visual studio에서는 잘 실행 되더라구요! (해당 예시만 실행했을 때) 어느 부분이 잘못된 것인지 질문합니다. import sys #sys.stdin=open("input.txt","rt") N = int(input()) math=list(map(int, input().split())) avg=round(sum(math)/N) res=0 for i in range(N): for j in range(i+1, N): res=i if abs(avg-math[i])>abs(avg-math[j]): res=j print(avg, res-1)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
아나그램 질문(다른 풀이)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강사님! 아나그램 코드와 성능 관련하여 질문이 있어 글 남깁니다. s1 = input() s2 = input() hs = dict() for x in s1: hs[x]=hs.get(x,0)+1 for x in s2: hs[x]=hs.get(x,0)+1 for i in hs.keys(): if hs.get(i)%2!=0: print("No") break else: print("Yes") 저 같은 경우에는 dictionary를 하나만 생성하여 두 문자열에서 각 알파벳(key)에 해당하는 value들을 통으로 합했습니다. 이에 따라 (만약 각 문자열에서 해당하는 알파벳의 개수가 서로 일치하면) 통으로 합하여 2로 나눈 나머지가 0이 되겠다는 아이디어에 착안하여 위와 같이 풀이했습니다. 프로그램은 정상적으로 작동했는데 시간 복잡도나 성능상에 있어 좋은 코드인지 아닌지가 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션3에서 곶감문제
안녕하세요! 곶감 문제 코드에서 a[h-1]가 왜 행을 기준으로 되는지 궁금합니다 열을 기준으로 표현도 되지않나요? h=2일떄 2행이니 a[h-1]라고 표현하셨는데 a[h-1]이 2열을 표현할수도 있지않나요? 감사합니다