월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
스토쿠 검사
input_list = [list(map(int, input().split())) for _ in range(9)] # 행 체크 for i in range(9): temp = [] for j in range(9): temp.append(input_list[i][j]) if len(set(temp)) != 9: print("NO") exit() # 열 체크 for i in range(9): temp = [] for j in range(9): temp.append((input_list[j][i])) if len(set(temp)) != 9: print("NO") exit() # 블럭 단위 체크 9번 temp = [] for i in range(3): for j in range(3): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3): for j in range(3, 6): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3): for j in range(6, 9): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3, 6): for j in range(3): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3, 6): for j in range(3, 6): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(3, 6): for j in range(6, 9): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(6, 9): for j in range(3): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(6, 9): for j in range(3, 6): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() temp = [] for i in range(6, 9): for j in range(6, 9): temp.append((input_list[i][j])) if len(set(temp)) != 9: print("NO") exit() print("YES") 이런 식으로 이중 for문으로 모두 처리하는 것은 좋은 풀이가 아닐까요?강사님 풀이가 훨씬 깔끔하긴 한데, 4중 for문 시간복잡도와 제 풀이 중 어느게 더 빠른지 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
1차원 다이나믹을 쓸 때 vs 2차원 다이나믹을 쓸 때
선생님 질문입니다. 사실 너무 많은 알고리즘과 문제가 있어서 질문자체의 범위가 큰 질문일수도 있지만, 질문 그대로 문제에 대해서 1차원으로 접근할건지 2차원으로 접근할건지에 대한 판단이 문제를 보고 잘 안섭니다.좋은 팁이 있을까요?(다른질문을 보니 물론 많이 풀어보면서 감을 익힐 수도 있겠지만 조언을 듣고싶습니다.)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이것도 맞는 알고리즘일까요?
제일 큰 수와 제일 작은 수를 더하는게 아닌 제일 큰 수와 m(limit)에 가장 가까운 수를 찾아 빼는 알고리즘입니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 혹시 이것도 답이될까요?
import sys n,k=list(map(int,input().split())) li=list(map(int,input().split())) li.sort(reverse=True) # li=list(set(li)) answer = 0 tmp = 1 for i in range(len(li)-2): for j in range(i+1,len(li)-1): for l in range(j+1,len(li)): if k != tmp: tmp+=1 else: answer += li[i] + li[j] + li[l] print(answer) sys.exit()한번에 list(set)하는식으로 해봤는데 이런식으로 코드 작성해도될까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
최대점수 구하기(DFS) 질문 드립니다.
안녕하세요, 해당 문제를 풀다가 질문 사항이 있어서 질문드립니다.import sys sys.stdin = open("C:\\Study\\algorithm\\input.txt", "r") def DFS(L, sum, time): global res if res[0] <= time <= m: if res[1] < sum: res[0] = time res[1] = sum for i in range(1, n+1): if time > m: break if ch[i] == 0: ch[i] = 1 DFS(L+1, sum+ls[i-1][0], time+ls[i-1][1]) ch[i] = 0 if __name__ == "__main__": n, m = map(int, input().split()) ls = [] ch = [0] * (n+1) res = [0] * 2 for i in range(n): a, b = map(int, input().split()) ls.append([a, b]) DFS(0, 0, 0) print(res[1])위 코드를 돌려보면 테스트 케이스 1,2번은 풀어지나 3번부터 timeOut이 뜨네요 (무한 루프가 도는거 같습니다)이전 문제에서 알려주신 비슷한 방식으로해당 문제를 1~n까지 DFS(n)전체를 탐색해서 최적의 점수를 도출할려고 했는데, 해당 유형의 문제가 나오면 이러한방식으론 해결이 불가능한걸까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
if __name__=="__main__" 사용 기준
강사님 안녕하세요 :) 유익한 강의 잘 듣고 있습니다!학습 중 궁금한 점이 있어서 질문드립니다.강사님께서 DFS문제 외에도 코드 시작 부분에 이 코드를 작성하실 때가 종종 있는데 혹시 강사님의 사용 기준이 있는지 궁금합니다.ex) [섹션 8] 회장뽑기(플로이드-와샬) 사용 O vs 위상정렬(그래프 정렬) 사용 X
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
txt 파일 input 문제
안녕하세요 1강 문제를 푸는데 계속 아래와 같은 에러가 뜹니다..txt파일과 py파일은 한 폴더 안에 존재합니다. (vscode를 이용 중입니다.)open('./input.txt', 'rt')open('./input', 'rt')open('input.txt', 'rt')open('input', 'rt') 등 다양한 방법으로 open해봐도 문제가 생기는군요..
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
해시맵을 사용해서 풀어보았습니다 혹시 예외나 틀린 부분이 있을까요
# 스도쿠 제대로 풀었는지 검사하는 알고리즘 import sys sys.stdin = open("./탐색&시뮬레이션/스도쿠.txt", 'r') n = 9 def solution(sudoku): for i in range(len(sudoku)): rawTable = {} colTable = {} for j in range(n): if sudoku[i][j] in rawTable or sudoku[j][i] in colTable: return False else: rawTable[sudoku[i][j]] = sudoku[i][j] colTable[sudoku[j][i]] = sudoku[j][i] # 이제 3*3 검사도 하자 for i in range(3): for j in range(3): matrixTable = {} for k in range(3): for s in range(3): if sudoku[i*3+k][i*3+s] in matrixTable: return False else: matrixTable[sudoku[i*3+k][i*3+s]] = sudoku[i*3+k][i*3+s] return True sudoku = [list(map(int, input().split())) for _ in range(n)] if solution(sudoku): print('Yes') else: print('No')
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
채점기 파일 오류
안녕하세요 강사님!강의 너무 잘 듣고 있습니다!다름이 아니라 채점프로그램을 실행하면 위와 같은 오류가 발생하는데 원인을 모르겠습니다..파이썬도 ORG에서 최신버전으로 PATH와 설정 체크까지 해서 설치하였고해당 폴더에 AA.py로 만들고 프로그램을 실행시켜도 위와 같은 오류가 발생합니다..ㅠㅠ 해결방법이 있을까요? k번째 큰 수 문제 코드입니다!import sys sys.stdin=open("input.txt", "rt") n, k = map(int,input().split()) a = list(map(int,input().split())) res=set() # set()=> 같은 값을 여러번 넣어도 한번만 들어감. for i in range(n): for j in range(i+1,n): for m in range(j+1, n): res.add(a[i]+a[j]+a[m]) res=list(res) res.sort(reverse=True) # 내림차순 print(res[k-1])
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션4-1번 문제 에러의 원인?
안녕하세요 강사님! [섹션4. 이분탐색&그리디 알고리즘]단원에 1번문제[이분검색]를 풀다가 궁금한점이 생겨서 질문 남기게되었습니다.저는 함수를 만들어서 코드를 구현했는데요, 여기서 에러가 뜨더라구요 .. 찾아보니까 'None' 타입인 값에 인덱스로 접근하려고 해서 발생한 에러라고 나오는데, 며칠 공부했는데도 제가 작성한 코드에서 어떻게 수정해야할지 모르겠어서 질문 드리게되었습니다. 아래는 제가 처음에 풀었던 풀이입니다. 답변 주시면 감사하겠습니다. def binary_search(target, array, s, e): array = array.sort() mid = (s+e)//2 if s > e : # 애초에 성립 불가한 경우 return None if array[mid] == target : # (1) 타겟값을 찾은 경우 return mid elif array[mid] > target : # (2) 중간값이 타겟값보다 큰 경우 return binary_search(target, array, start, mid-1) else: # (3) 중간값이 타겟값보다 작은 경우 return binary_search(target, array, mid+1, end) N, M = map(int, input().split()) array = list(map(int, input().split())) res = binary_search(M, array, 0, N-1) print(res+1)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
휴가 코드 질문
def DFS(L, sum): global res if L>n: return if L==n: if res<sum: res=sum else: DFS(L+pt[L], sum+p[L]) DFS(L+1, sum) n=int(input()) pt=list() p=list() for i in range(n): a,b=map(int, input().split()) pt.append(a) p.append(b) res=0 DFS(0,0) print(res) 강사님 휴가 코드를 이렇게 짰는데 출력은 정확히 나오는데, 제가 올린 형식으로 풀어도 상관없는걸 까요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
10. 역수열(그리디) 질문입니다.
10.역수열(그리디) 강의 5:25초에서 5의 경우 앞에 2개의 숫자가 필요한 상황인데, 그럼 4뒤에 뒤에(인덱스 번호2)에 들어가도 될 거 같은데 왜 2뒤에 넣는건지 궁금합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 4 -> 그리디 , 결정문제 질문
안녕하세요! 강의 정말 잘 듣고 있습니다.섹션 4를 풀다가, 어떤 문제를 그리디를 쓰고, 어떤문제를 결정알고리즘을 써야하는지 감이 잡히지 않아서 질문 드립니다. 답변해주시면 정말 감사하겠습니다!
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 문제에서 궁금한게있습니다.
ch[i] != 0라서 if문을 탐색하지않는다면 L에 해당하는 dfs함수는 뭘 반환하는건가요?? 반환하는게 안보일때는 return이 생략됐다고 생각하는건가요?
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요. 다른 풀이도 풀었는데 괜찮을까요?
정답은 제대로 나오긴 했는데 시간 초과라던가 하는 문제가 없을까요?4중 for문은 생각지도 못했네요..ㅠㅠ sudoku = [list(map(int, input().split())) for _ in range(9)] def solution(sudoku): length = len(sudoku) a, b, c, = list(), list(), list() # 행열 검사 for i in range(length): row, col = list(), list() for j in range(length): row.append(sudoku[i][j]) col.append(sudoku[j][i]) if len(set(row)) != 9 or len(set(col)) != 9: return "NO" # 3x3 격자판 검사 a.extend(row[0:3]) b.extend(row[3:6]) c.extend(row[6:]) if i == 2 or i == 5 or i == 8: if len(set(a)) != 9 or len(set(b)) != 9 or len(set(c)) != 9: return "NO" a, b, c, = list(), list(), list() return "YES" print(solution(sudoku))
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
1068번: 트리
제가 다음과 같이 코드를 작성했는데,100%까지 가다가 틀립니다.. 어떤게 문제일까요? 반례를 제시해주실 수 있나요?감사합니다. https://www.acmicpc.net/problem/1068 import sys input = sys.stdin.readline n = int(input()) g = list(map(int, input().split())) m = int(input()) cnt = 0 def DFS(x): g[x] = -1 for i in range(n): if g[i] == x: DFS(i) DFS(m) for i in range(n): if g[i] != -1 and i not in g: cnt += 1 print(cnt)
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 리뷰복습하다가, 발견했습니다
최근에 다시 자바스크립트로 돌리면서, 기존에 파이썬으로 했던 것들 다시 모두 자바스크립트로 풀어보면서 문제 풀어보니, 발견했습니다.이거 첫번째 가정을, 그리디로 접근하면 해결 안되는 문제인것같습니다. 이후 가정들은 당연히 그리디 관념으로 최적값 찾을 수 있는데, 첫번째 가정부터 그리디로 접근하면 해결되는 문제가 아니라서 어긋나기때문에, 그리디관념이 통하지 않는 문제인것같습니다.완전탐색해버리거나, 시간 더 줄이려면 백트래킹 가지치기 해야하는 문제인것같습니다. 입력입니다!7172 67183 65179 61178 62177 63170 72181 60 기존 풀이(무조건 183선발) 가 내주는 답 : 3감독 현수가 원할 것 같은 답 : 6그리디로 가장 키 큰 사람 무조건 선발하는 과정이 풀이에서 오류인것같습니다.183 선발 가정하고 cnt 값 구하고,그다음 181 선발 가정하고 cnt값 구하고,쭉 다음 순으로 선발 가정하고 cnt값 구하는데,만약 어떤 사람 선발 가정하고 cnt값 구하는데남은 사람 수 다 합해도 기존 Max cnt보다 적을 경우,백트레킹 가지치기로 break 혹은 return 끊어버리는게 맞는것같습니다. 풀이1. 이중포문const input = require("fs") .readFileSync("input.txt") .toString() .trim() .split("\n"); const n = parseInt(input[0]); const arr = Array.from(Array(5), () => []); for (let i = 0; i < n; i++) { arr[i] = Array.from(input[i + 1].trim().split(" ")).map((v) => parseInt(v)); } function solution(n, arr) { arr.sort((a, b) => b[0] - a[0]); let cnt = 0; let largest = 0; let res = 0; for (let i = 0; i < n; i++) { largest = arr[i][1]; cnt += 1; if (res >= n - i) { break; } for (let j = i + 1; j < n; j++) { if (arr[j][1] > largest) { largest = arr[j][1]; cnt += 1; } } res = Math.max(res, cnt); cnt = 0; } console.log(res); } solution(n, arr); 풀이2. DFSconst input = require("fs") .readFileSync("input.txt") .toString() .trim() .split("\n"); const n = parseInt(input[0]); const arr = Array.from(Array(5), () => []); for (let i = 0; i < n; i++) { arr[i] = Array.from(input[i + 1].trim().split(" ")).map((v) => parseInt(v)); } let cnt = 0; let res = 0; //const list = []; function DFS(s, weight) { if (s < 0) return; if (cnt + n - s <= res) { cnt -= 1; s -= 1; return; } for (let i = s; i < n; i++) { if (arr[i][1] > weight) { cnt += 1; //list.push(arr[i][1]); DFS(i + 1, arr[i][1]); //list.pop(); } } res = Math.max(res, cnt); //console.log(list); cnt -= 1; } function solution(n, arr) { arr.sort((a, b) => b[0] - a[0]); DFS(0, 0); console.log(res); } solution(n, arr);
- 해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS와 BFS
문제를 보고 DFS로 풀어야 할지, BFS로 풀어야할지빨리 구분하는 방법이 있나요?그리고, 어떤 경우에는 DFS에서 재귀함수 호출 제한이 뜨는 건가요?감사합니다.
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 함수가 왜 돌지 않는지 모르겠습니다
n = int(input()) def func(v): if v == 1: return 1 if v == 2: return 2 if dp[v] != 0: return dp[v] else: dp[v] = func(v-2) + func(v-1) dp = [0] *(n+1) func(n) print(dp[n]) dp[v]!=0이 아니면 return dp[v]를 반환해주는 조건을 했는데 왜 오류가 뜨는지 모르겠습니다. nontype 과 nontype은 더할 수 없다는데 디버깅을 해봐도 모르겠습니다 ㅠㅠ
- 미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 문제도 섹션6의 동전교환 문제처럼
DFS로 풀 수 있는 문제인가요??개념이 레벨로 답을 찾는게 비슷해보여서요