묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[3-G 질문] 오버플로우 다르게 확인 하는 법..
안녕하세요 큰돌님!덕분에, 코테도 준비하며 강의도 잘 보고 있습니다. http://boj.kr/320a351402cb451d8aff7a538e73189d3-G 문제를 공부하면서 질문이 있습니다.Q1. 오버플로우 확인 할 때, 이렇게 작성하면 어떤 문제가 생기나요? visited[next] == visited[here]+1 과 같이, 소모되는 시간이 같은 경우도, 동일한 cnt[]에 누적해야 한다는 로직은 이해했지만 코드로 옮기기 어려워서 질문드립니다 ㅠ*링크 내의 아래와 같이 적힌 부분이 질문입니다.if(next < 0 || next >= MAX || visited[next]) continue;visited[next] = visited[here] + 1;cnt[next] += cnt[here];...if(visited[next] == visited[here]+1) cnt[next] += cnt[here];
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
해시맵을 사용해서 풀어보았습니다 혹시 예외나 틀린 부분이 있을까요
# 스도쿠 제대로 풀었는지 검사하는 알고리즘 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')
-
해결됨코딩테스트 [ ALL IN ONE ]
Daily Temperatures 시간복잡도 질문
input = [73,74,75,71,69,72,76,73] cnt =0 cntarr=[0] * len(input) for x in range(len(input)): for y in range(x+1, len(input)): cnt +=1 if input[y] > input[x]: cntarr[x] = cnt cnt=0 break else: continue else : cnt=0 cntarr[x] = cnt print(cntarr)문제에 대해서 위와같이 풀었을때(1)input = [73,74,75,71,69,72,76,73]cntarr=[0] * len(input) 리스트 넣는 시간복잡도가 O(n)(2)for x in range(len(input)): for y in range(x+1, len(input)):이중반복문 시간복잡도가 (n-1)! 이니까 O(n)(3)if input[y] > input[x]:리스트의 요소 비교의 시간 복잡도가 O(1) 첫 번째 질문으로 이 식의 시간복잡도가 O(n) 인것이 맞는지 궁금합니다.두 번째는for x in range(len(input)): for y in range(x+1, len(input)):위와 같은 이중반복문도 완전탐색이라고 하는 지 궁금합니다.답변주시면 정말 감사하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-E 쿼드트리 질문
string qurad(int y, int x, int size){ if(size == 1) return string(1, a[y][x]); char b = a[y][x]; string ret = ""; bool flag = 0; for(int i = y; i < y + size; i++){ for(int j = x; j < x + size; j++){ if(b != a[i][j]){ ret += '('; ret += quard(y, x, size / 2); ret += quard(y, x + size / 2, size / 2); ret += quard(y + size / 2, x, size / 2); ret += quard(y + size / 2, x + size / 2, size / 2); ret += ')'; return ret; } } } return string(1, a[y][x]); }안녕하세요 선생님 항상 좋은 강의를 올려주셔서 감사합니다. 위에 있는 코드에서 변수 flag는 사용되지 않았는데 혹시 flag를 변수를 선언할 때 어떤 의도로 선언했는지 알려주실 수 있나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K문제 cnt배열크기 재질문입니다.
http://boj.kr/06440aeccbb045b8829d9cdadf5f6a33이 링크는 답지 12행에 있는 if(cnt[i])가 아니라 while(cnt[i)로 바꾸고 이에 맞춰, 18-20행을 바꿔보았습니다.제출하게되면, 시간초과가 나는데 while을 이용한 제 코드의 시간복잡도는 얼마인가요..? http://boj.kr/1cb106485f6b478ab640c60a6dda5cc0전에 제가 cnt배열크기를 26이 아닌 200으로 설정한 이유를 여쭤봤었는데, 답변으로 26으로 설정해도 되며 강사님께서 200으로 설정한 이유는 크게 잡기 위해서라고 하셨습니다.하지만, 링크를 실행하게되면 배열크기를 26, 30으로 잡고했더니 시간초과가 뜹니다.배열크기를 60, 70으로 설정하면 메모리 초과로 뜹니다. 배열크기를 100으로 해야 정답입니다 라고 뜹니다. 이렇게 배열의 크기가 26이 아닌것 같아서 어떤 근거로 배열 크기를 설정 해야하는지 재 질문 드립니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
완전탐색 시간초과
안녕하세요 큰돌님덕분에 알고리즘을 재미있게 공부하고 있습니다!질문사항이 있는데요완전탐색으로 풀이를 해보았는데 시간초과가 났습니다.그래서 방법을 바꿔 visited를 사용하지 않고 풀어보았는데 통과했습니다.시간초과가 발생한 정확한 이유를 모르겠어서 디버깅을 해보았는데 두코드간의 함수호출 횟수가 분명 차이가 있었습니다.하지만 그 원리를 이해하지 못해서 질문드립니다.디버깅을 하면 할수록 머리가 더 복잡해지는것 같습니다...시간초과 코드http://boj.kr/9ca3908dd4624835a28aca2db266321e정답 코드http://boj.kr/18bd16121a7d46ada6f06e4313594796
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
배열 2개로 푸는 것도 괜찮은 방법인가요 ?
import java.util.*; import java.io.*; public class P03_결혼식 { public static void main(String[] args) throws Exception { // 초기 세팅 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); int[] starts = new int[73]; int[] ends = new int[73]; for (int i=0; i<N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int start = Integer.parseInt(st.nextToken()); int end = Integer.parseInt(st.nextToken()); starts[start]++; ends[end]++; } // 로직 int max = 0; int count = 0; for (int i=0; i<starts.length; i++) { count += starts[i]; count -= ends[i]; max = Math.max(max, count); } // 출력 System.out.println(max); } } 저는 이렇게 풀었는데 따로 정렬하는 Class 안 만들고 이렇게 하는것도 괜찮나여 ? 방대한 데이터가 들어왔을 경우에도 문제없는 코드인지 궁금합니다 !
-
해결됨코딩테스트 [ ALL IN ONE ]
not stact의 위치 질문입니다.
s= "[({" def re(): arr=[] for i in s: if i =="[": arr.append("]") elif i == "{": arr.append("}") elif i == "(": arr.append(")") elif not arr or arr.pop() != i: print(arr) return False if not arr: return True else: return False print(re())s= "[({" 이라고 할때 not arr의 위치 질문입니다. 마지막 elif문에 not arr조건은 가지 못하니까(for문이 이미 끝났기 때문에) 마지막 elif문이 아니라 for문이 끝나고 arr이 비어 있는지 확인해야 하는거아닌가요??s= "[({" def re(): arr=[] for i in s: if i =="[": arr.append("]") elif i == "{": arr.append("}") elif i == "(": arr.append(")") elif arr.pop() != i: return False if not arr: return True else: return False print(re())위에 식처럼 해야하는 거 아닌지 궁금합니다.답변주시면 정말 감사하겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간 초과가 발생하는 이유를 모르겠습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/bcf7e7b1fc404527a3b9fca4f41fd607선생님께서 가르쳐 주신 내용 그대로 했음에도 불구하고 시간 초과가 발생했습니다. 제가 어떤 부분을 놓쳐서 시간 초과가 발생한 것일까요? ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-N 예외처리 추가
선생님 안녕하세요! 우선 충격적인 풀이 방법 너무 잘 들었습니다. 계속 생각하다보니 예외처리를 먼저해주면 좋을 것 같은 게 있어서 질문 남깁니다.반드시 나누어 떨어지는 경우를 생각해 보았는데, C == 1인 경우와 A%C == 0인 경우는 항상 나누어떨어질 것 같아서 선생님 풀이와 함께 미리 예외처리를 해주었습니다.코드 링크: https://www.acmicpc.net/source/57650740질문은 다음과 같습니다.해당 예외처리가 유효한 것인지1의 질문에서 만약 유효하다면, 이전 영상에서 '속도'에 관한 풀이를 하실 때, 예외처리를 먼저 해주셨는데, 이번에는 그렇지 않아서 판단의 기준은 어떻게 잡아야 하는지예외에 걸려서 main/함수를 종료할 때 exit(0)을 써야할지 return을 써야할지제 머리로는 이 문제를 처음 봤을 때 아무리 고민해도 풀 수가 없었는데 문제를 많이 풀면서 해결할 수 있는 부분인지궁금합니다.항상 좋은 강의 감사합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-M 순열 재귀, next_permutation
안녕하세요 큰돌님!문제를 보고 괄호추가하기와 같은 패턴으로 풀면 될것같아서 풀어보았습니다. 재귀를 사용해서 순열을 만들어 풀이한것이 통과가 되어서 next_permutation으로 만들어봤습니다. 그런데 생각대로 잘 되지가 않네요...ㅠㅜnext_permutation으로 풀려면 어떤 방식으로 접근해야할까요?? 좋은 강의 해주셔서 감사합니다:)http://boj.kr/dd36ea0097404bbf8cdb802ca843eacd
-
미해결코딩테스트 [ ALL IN ONE ]
커리큘럼 질문
강의 진행이 잘 이해가 안되는데 디스코드에 올라온 문제는 모두 커리큘럼에 풀이영상이 올라오는 것은 아닌건가요? 디스코드에 있는 문제가 어떤 강의를 듣고 풀어야 하는지 잘 모르겠습니다. (7주차부터)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-G 문제의 풀이방식이 궁금해서 질문 드립니다
안녕하세요! 7-G 문제 공부 후에 프로그래머스의https://school.programmers.co.kr/learn/courses/30/lessons/154538숫자 변환하기를 풀어 보았습니다!딱 문제를 보자마자, 여러번(무제한) 쓸 수 있고dp 문제라는 생각이 들어 7-G 문제 접근 방식이 생각나서 아래와 같이 처음에 접근 했었습니다!arr[x] = 0; for(int i=n; i<= y; i++) { arr[i] =min(arr[i],arr[i-n]+1) ; } for(int i = 3*x; i<= y; i++) { if(i%3 == 0) arr[i] = min(arr[i],arr[i/3] +1); } for(int i=2*x; i<=y; i++) { if(i%2 == 0) arr[i] = min(arr[i],arr[i/2]+1); } 이렇게 for문을 나누어서 왼쪽부터 오른쪽으로 더해가면서 구하게 하였습니다. 그랬는데 틀렸다는 메세지가 나와서 혹시나 싶어서 for문을 하나 사용하여 모든 조건을 동시에 검사하게 하였더니 즉arr[x] = 0; for(int i= x; i<=y; i++) { if(i%3 == 0) arr[i] = min(arr[i], arr[i/3]+1); if(i%2 == 0) arr[i] = min(arr[i],arr[i/2]+1); if(i-n >=0) arr[i] =min(arr[i],arr[i-n] +1) ; } 위와 같이 제출 하였더니 이번엔 정답 처리되었습니다!아무리 생각을 해 보아도 최솟값을 구하는 것이기 때문에, 같이 검사하나 따로따로 검사하나 문제가 없을 것이라고 생각하였는데, 곱하기나 나누기의 경우라서 다른 걸까요 아니면 비슷한 문제이지만, 접근 방식이 아예 다른 걸까요?? 위의 두가지 방식에서 달라지는 반례를 찾아보려고 계속 생각해 봤는데, 제 머리로는 잘 모르겠어서 고민 끝에 질문 드립니다!감사합니다!혹시나 몰라 아래에 정답으로 제출된 코드 전부 첨부했습니다!#include <string>#include <vector>#include <bits/stdc++.h>using namespace std;int arr[1000002] ={0};int solution(int x, int y, int n) { fill(arr,arr+1000002,987654321); arr[x] = 0; for(int i= x; i<=y; i++) { if(i%3 == 0) arr[i] = min(arr[i], arr[i/3]+1); if(i%2 == 0) arr[i] = min(arr[i],arr[i/2]+1); if(i-n >=0) arr[i] =min(arr[i],arr[i-n] +1) ; } cout<< arr[y]<<endl; if(arr[y]== 987654321) return -1; else return arr[y];}
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K팰린드롬 문제. 맞는 것 같은데 틀렸어요
안녕하세요 1-k 1213 팰린드롬 문제를 풀었는데요, devc++로 코드 작성해서 테스트 해봤을 때 맞는 것 같아요. 그런데 백준에 제출하면 틀렸다고 뜨는데 어디가 틀린건지 모르겠어요. 도와주세요ㅠㅠ#include<bits/stdc++.h> using namespace std; string name, ret; int alpha[27]; int odd, oddnum; int main() { cin>>name; for(int i=0; i<name.size(); i++) { alpha[name[i]-'A'+1]++; } for(int i=1; i<=26; i++) { if(alpha[i]) { if(alpha[i]%2 ==1) { odd++; oddnum = i; if(odd>=2) { cout<<"I'm Sorry Hansoo\n"; break; } else for(int j=0; j<alpha[i]/2; j++) ret += (char)(i+'A'-1); } else { for(int j=0; j<alpha[i]/2; j++) ret += (char)(i+'A'-1); } } } for(int i=0; i<ret.size(); i++) cout<<ret[i]; if(oddnum && odd<2) cout<<(char)(oddnum+'A'-1); for(int i=ret.size()-1; i>=0; i--) cout<<ret[i]; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G 최단거리 개수
안녕하세요 큰돌님, 저는 선 위에서 bfs를 돌린다 생각하고,아래와 같이 코드를 썻습니다.최단 거리는 올바르게 나오는 것 같은데,개수가 항상 틀리게 나오네요 ㅠㅠ 어디부분에 문제가 생긴지 모르겠습니다,,, http://boj.kr/a7027def8ceb49f88acccd4d15373a37
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요. 3 - I 질문 있습니다.
안녕하세요 큰돌 선생님.늘 양질의 강의 감사드리며, 제 코드에 어느 부분이 도대체 문제가 되어 틀렸다고 하는지 찾아낼 수 없어다시 한번 질문 올리게 되었습니다. 저는 동생의 위치를 1부터 n까지의 합 공식을 이용하여 별도의 queue에 저장했고,수빈이가 움직일 수 있는 3가지 경우마다 push, pop을 이용해수빈이의 위치와 동생의 위치가 같은지 체크했습니다. 그리고 다음 숫자(next)가 이미 방문했던 숫자여도 현재 동생의 위치와 같다면 바로 그 당시의 위치를 출력하도록 처리했습니다. 나름 예외처리를 위해 신경썼는데, 고민하다가 결국 갈피를 못 잡았습니다.답변 기다리고 있겠습니다. 항상 감사합니다. http://boj.kr/76e171772b6743b7a0cd05913ce5a894
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 플러드필 사용 안할경우 시간초과
안녕하세요 큰돌님3-K를 강의듣기전에 풀어봤습니다.플러드필을 사용하지 않고 풀어봤는데요예제는 잘 통과하지만 시간초과가 났습니다. 그 이유를 생각해봤을때 얼음을 녹이고 다시 얼음을 녹이러 갈때 녹인 위치부터 탐색을 시작하는게 아니라 처음부터 탐색을 시작하기 때문인거같은데제가 생각한게 맞을까요?? http://boj.kr/429e585816d54c2dafaa022e77f4c286
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
못풀겠는 문제는 그냥 강의 넘어가고 다시오는게 나을까요 강의 듣는게 나을까요
못 풀겠는 문제가 좀 많아서;; 강의 듣고 나중에 다시 와서 풀까요 아니면 그냥 다음 주차 강의로 가는게 나을까요? 지금은 문제 맞췄을때만 강의 보는데 문제당 고민은 30분 정도 합니다. 1.아예모르겠는경우 2.어떻게 풀지감은 잡았는데 구현을 못하겠는경우 3.맞는데 왜틀리는지 모르겠는경우 어느때 못풀었어도 강의를 듣는게 나을까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
이 문제는 DP로는 해결이 안될까요??
제목과 같은 질문입니다! :)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-K 문제 선생님 코드에 질문이 있습니다.
go 함수에서 cnt가 한번이라도 음수가 돼서 ret이 음수 인덱스를 참조해서 에러가 날 것 같았는데아무 에러가 없이 통과되는 이유가 궁금합니다.예를 들면 i가 0일 때, 오락실을 통과하면 cnt가 -1이 되고, dp[y][x][cnt][prev]에 접근할 때 오류가 날 거라고 생각하는데, 아무 거리낌 없이 통과가 되는데..글쓰는 도중 너무 궁금해서 디버깅 해본 결과 인덱스가 음수여도 접근이 되네요 ㅇㅁㅇ.. 그래서 이 궁금증은 해결됐는데..cnt가 음수여도 정상적으로 답이 잘나오는 이유는 아직 잘모르겠습니다 ㅜㅜ