묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 결과가 잘 출력되는데 틀렸다고 결과가 나옵니다
http://boj.kr/116102baf98342ddbbb0c1926c191911안녕하세요. 문제 보고 코드를 작성하였고, 실행 시켰을때 결과도 문제에서 요구하는대로 잘 출력되는데 백준에서 채점 결과는 왜 틀렸다고 뜨는지 잘 모르겠습니다. 혹시 코드에서 잘못된 부분이 있는지 한번 봐주실 수 있나요?감사합니다.
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
5개의 데이터 중 3개가 이미 선택이 완료된 경우 점화식에 대해 질문드립니다.
선생님 안녕하세요좋은 강의를 만들어주신 덕분에 잘 보고 있습니다.조합으로 점화식을 도출해내신 것을 보고 궁금한 점이 생겨서 가르쳐주시면 감사하겠습니다. 강의 12분 540초에서5C3 = 4C2+4C3 점화식을 도출해내신 것을 보고제가 제대로 이해했는지 확인하기 위해 다른 시도를 해봤습니다. 위의 점화식은 5개의 데이터 중 4개를 이미 선택이 완료된 데이터로 가정했을 때 도출이 되는 식입니다. 그래서 저는 5개의 데이터 중 3개를 이미 선택이 완료된 데이터로 가정했을 때로 점화식을 도출해봤습니다.그래서D[5][3] = D[3][3] + (D[3][2] * 2) +D[3][1]라고 도출해봤는데, 혹시 제가 제대로 이해했는지 봐주시면 감사하겠습니다.
-
미해결자바 코딩테스트 - it 대기업 유제
교육과정 질문드립니다.
answer에 답을 받으면서 출력하면 정답이 맞게 나오는데, 답을 받기만 하면 이상하게 나오네요뭐가 다른거죠???import java.util.*; import java.io.*; class Main { public static ArrayList<Integer>[] graph; public static int[] ind; public String[] solution(String[] subjects, String[] course){ String[] answer = {}; HashMap<String, Integer> map = new HashMap<>(); for(int i=0; i<subjects.length; i++) { map.put(subjects[i], i); } int n=subjects.length; ind = new int[n]; graph = new ArrayList[n]; for(int i=0; i<n;i++) graph[i] = new ArrayList<>(); for(int i=0; i<n; i++) { String[] list = course[i].split(" "); int a = map.get(list[0]); //사후 과목의 밸류값 받기 int b = map.get(list[1]); //사전 과목의 밸류값 받기 graph[b].add(a); ind[a]++; } Deque<Integer> q = new LinkedList<>(); for(int i=0; i<n; i++) { if(ind[i]==0) q.offer(i); } ArrayList<Integer> list = new ArrayList<>(); while(!q.isEmpty()) { int now = q.poll(); list.add(now); for(int next : graph[now]) { ind[next]--; if(ind[next]==0) q.offer(next); } } answer = new String[list.size()]; for(int i=0; i<list.size();i++) { answer[i] = subjects[list.get(i)]; System.out.print(answer[i]+ " "); } return answer; } public static void main(String[] args){ Main T = new Main(); System.out.println(T.solution(new String[]{"english", "math", "physics", "art", "music"}, new String[]{"art math", "physics art", "art music", "physics math", "english physics"})); //System.out.println(T.solution(new String[]{"art", "economics", "history", "chemistry"}, new String[]{"chemistry history", "economics history", "art economics"})[0]); //System.out.println(T.solution(new String[]{"math", "science", "music", "biology"}, new String[]{"science music", "math music", "math science", "biology math"})); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
출력 부분 질문
안녕하세요, 큰돌님!이번 문제를 풀 때, 저는 출력을cout.precision(4) cout << ret;이렇게 cout.precision()을 사용해서 제출을 했더니 틀렸다고 나오고printf("%0.3lf", ret); printf를 사용했을 때는 정답이라고 나와서 질문드립니다.입력을 cin으로 받았기 때문에 cout으로 출력을 하고 싶었는데두개의 차이가 무엇인지 궁금합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
궁금한 점이 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 왜 moves 탐색시 for...of가 아니라 forEach를 쓰시는건가요?? for...of도 사용할 수 있지 않나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다!
안녕하세요 큰돌님https://www.acmicpc.net/submit/5430/62168272 위 코드가 시간 초과가 납니다.다른 질문글을 봤을때, 문자열을 split에서 최악의 경우 시간 복잡도가 n^2가 된다고 하였는데 어떤 경우에서 시간 복잡도가 n^2이 되는지 궁금합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution() { let answer; let calStack = []; for(let i of cal) { if(isNaN(i)) { let num1 = calStack.pop(); let num2 = calStack.pop(); let val = 0; switch(i) { case '+': val = num1 + num2; break; case '-': val = num2 - num1; break; case '*': val = num1 * num2; break; case '/': val = num2 / num1; break; } calStack.push(val); } else calStack.push(Number(i)); // i는 문자이기 때문에 숫자로 바꾸어 stack에 push 해야함 } answer = calStack[0]; return answer; } let cal = "352+*9-"; console.log(solution()); switch 문을 이용해서 문제를 풀었는데 괜찮은 코드인가요? 효율성면에서 if문이 switch문보다 좋은지도 궁금합니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
[Min Cost Climbing Stairs] DP 문제 전반부 부분 수업자료 문의
앗 강사님 Min Cost Climbing Stairs 이 부분. 문제를 설명해주시는 부분과 leetcode 링크 주소가 일치하지 않는 것 같습니다! leetcode에서는 다른 문제가 나옵니다ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-p14502 질문입니다
안녕하세요 선생님벽을 3개를 세우라고 해서 조합을 먼저 떠올렸고 영역을 구해야 한다는 부분에서 dfs를 떠올렸습니다그래서 조합과 dfs를 사용해 벽을 3개 세울때마다 dfs 및 visited배열을 매번 초기화 해주고 2차원 배열 arr을 돌면서 2(바이러스)가 나올때마다 동서남북으로 0또는 2인 곳으로 탐색해가며 영역의 크기를 구하게 해주었습니다. 예제는 분명히 다 맞는데 틀리는 이유가 뭘까요? 0또는 2로 한게 잘못된 걸까요?http://boj.kr/5d0f072fce1a471fb02deec85b4d906d
-
미해결Do it! 알고리즘 코딩테스트 with JAVA
7강 1940 런타임 에러
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk = new StringTokenizer(br.readLine()); int N = Integer.parseInt(tk.nextToken()); int M = Integer.parseInt(tk.nextToken()); int[] nums = new int[N + 1]; for (int i = 1; i < N + 1; i++) nums[i] = Integer.parseInt(tk.nextToken()); Arrays.sort(nums); int start = 1, end = N, answer = 0; while (start != end) { int sum = nums[start] + nums[end]; if (sum < M) start++; else if (sum > M) end--; else { answer++; start++; end--; } if (start > end) break; } System.out.println(answer); } }안녕하세요 ~항상 좋은 강의를 만드시기 위해 노력해주셔서 감사합니다!강사님의 강의를 참고해 위 코드로 재출을 했는데 인텔리제이에서는 정상적으로 실행되지만,백준에 재출했을 때 런타임 오류가 발생하는 이유를 모르겠어서 질문드립니다 ㅠㅠ오류 코드는 아래와 같습니다.Error: Main method not found in class Main, please define the main method as: public static void main(String[] args)제대로 main 객체와 메서드가 있는데 왜 인식을 못하는지 모르겠네요 ㅠㅠ감사합니다 :)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
질문있습니다.
처음에 문제를 풀고 문제가 틀렸다고 나와서 강의까지 다봤습니다.우선순위 큐를 사용하지 않아도 풀 수 있을거 같다고 생각했고 실제로 예제도 통과 했고 다른 분이 반례가 있다고 올리셨던 것도 통과 했는데 어느 부분이 잘못되었는지 알고싶습니다.http://boj.kr/4f9206a6cf05456a8fa340a8e2fad5c4코드공유드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
||(or)연산자를 쓰시는 이유가 있나요?
dfs나 bfs문제를 푸실때 if(ny < 0 || ny >= n || nx < 0 || nx >= n) continue; if(a[ny][nx] == 0) continue; if(visited[ny][nx]) continue; 와 같이 or연산을 써서 조건문을 쓰시는데요. and연산자를 쓰지 않고 or연산을 쓰시는 이유가 따로 있으신가요?http://boj.kr/09a17090441545d8ad3b0b7bcac3fb4b 에서 14번 라인과 같이 and연산자로 매번 코드를 짜는데 제가 놓지고 있는게 있나 싶어 여쭈어 봅니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6 - G 반례 질문
안녕하세요 선생님. 6 - G 제가 짠 코드에 대해서 질문 드립니다. 코드를 짜고나서 굉장히 놀랐는데 선생님과 코드가 거의 비슷하더라고요. 헐 내 실력이 여기까지 올랐나? 했는데 제 코드는 틀렸습니다ㅠㅠㅠ선생님 코드와 다른 점은 lo를 입력된 b+1로 한 것 밖에 없는데 왜 이거는 백준에서 3% 틀렸습니다가 나오는지 잘 이해가 안되서 질문드립니다! #include<bits/stdc++.h>using namespace std;typedef long long ll;ll x, y, ret = -1;int main(){ cin >> x >> y; ll z = (y * 100) / x; ll l = y+1, h = 1e9; ll mid; while(l <= h){ mid = (l+h)/2; if(mid * 100 / (x+mid-y) > z){ ret = mid - y; h = mid - 1; } else l = mid + 1; } cout << ret << "\n";}
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-o 시간초과
http://boj.kr/246379b4039146d9bb6c8660ce6e5dfd입력을 콘솔로바꿨을뿐인데 시간초과가납니다 무슨이유일까요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
우선순위 큐를 사용하지 않고 그냥 제가 풀었습니다.
#include<iostream>#include <vector>#include<algorithm>#include<unordered_map>using namespace std;int n;int deadline, lamen;int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); unordered_map<int, int> check; cin >> n; vector<pair<int, int>> in(n); for (int i = 0; i < n; i++) { cin >> deadline >> lamen; in[i].first = lamen; in[i].second = deadline; } sort(in.begin(), in.end(),greater<pair<int,int>>()); for (int i = 0; i < n; i++) { int cnum = in[i].second; while (cnum >= 0) { if (check[in[i].second] >= in[i].first) { cnum--; continue; } check[cnum] = in[i].first; } } int result = 0; for (auto& a : check) { result += a.second; } cout<<result; return 0;} 이런식으로 풀어봤는데 어디가 잘못되었는지 잘 모르겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-H: 13144 답(ret) 관련 문의
안녕하세요!5-H 13144 문제 답을 구하는 코드가 이해되지 않아 문의드립니다. ㅠㅠ 예제 : n= 5, 1 2 3 2 1 를 넣어서 값을 구해보았는데 e=3, s=0, ret=3 / e=4, s=1, ret =6 / e=5,s=2, ret=12이렇게 나오긴 하던데 ret 코드를 이해하진 못했어요..그리고 연속한 1개 이상의 수를 뽑는 경우,예제: n =5, 1 2 3 2 1 1개 뽑을 때 1,2,3 -> 3가지2개 뽑을 때 1,2 / 1,3 / 2,3 -> 3가지3개 뽑을 때 1,2,3 -> 1가지총 7가지 .. 아닌가용...ㅠㅠ그럼 시간되실 때 답변 부탁드려요.. long long s, e, cnt[100001], n, a[100001];long long ret;int main(){ scanf("%d", &n); for(int i = 0; i < n; i++){ scanf("%lld", a + i); } while(e < n){ if(!cnt[a[e]]){ cnt[a[e]]++; e++; }else{ ret += (e - s); cnt[a[s]]--; s++; } } ret += (long long)(e - s) * (e - s + 1) / 2; printf("%lld\n", ret); return 0;}
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요! 2 - L NBA 문제 질문이 있습니다.
안녕하세요 선생님 제가 짠 코드에 로직 상 문제가 없다고 생각이들고, 테스트 케이스에 대한 답도 정확히 나오는데 제출 시 틀렸다고 나옵니다. 혹시 제가 놓치고 있는 반례가 있는지 질문드립니다. http://boj.kr/5b06a7f086ee4f499f316de05b95f90a
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요. 4-B 질문 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 큰돌님 강의 잘듣고 있습니다.해당문제 관련해서 질문이 있는데요.일단 비트마스킹을 이용한 풀이법은 숙지했습니다.근데 비트마스킹을 안쓰고 풀었을때 처음에 틀렸었는데 제가 아래 올린코드에서 Reverse함수의 기저사례 단락에서 "--->이부분!" 이라고 주석표시한 부분 관련해서 궁금한게 있습니다.문제에서 동전의 뒤집기 갯수가 2보다 작을수는 없다고 해서, 전 처음에 이게 문제가 답에대한 제한조건을 걸었다고 생각해서 저렇게 2보다 큰 경우에만 min값을 갱신하도록 코드를 짰었는데요.저 부분을 없애야 정답이더라구요.큰돌님 풀이에서도 2에 대한 제한조건을 거는 부분은 없는것 같은데, 문제에서 해당 예제에관한 설명이 답의 범위에 대해서 제한을 걸어놓은게 아니라 그냥 " 뒷면갯수가 2보다 작은게 불가능하다" 라고 설명해주는 부분인데 제가 잘못이해한건가요??#include <iostream> #include <vector> #include <string> #include <thread> #include <mutex> #include <limits.h> using namespace std; int n; int coin[21][21]; int minVal=INT_MAX; void Change(int i, int j) //요소 하나 바꾸기 { if (coin[i][j] == 1) coin[i][j]= 0; else coin[i][j]= 1; } void ChangeAll(int length, char hw ,int fix) // 한줄 바꾸기('h' : 행 고정 / 'w' : 열 고정) { if (hw == 'h') for (int i = 0; i < length; ++i) Change(fix, i); if (hw == 'w') for (int i = 0; i < length; ++i) Change(i, fix); } void Reverse(int length, char fix, int fixPos) // 행 다 모든 경우의수로 다 뒤집고 열 하나씩 뒤집어보기 { if (fixPos == length) { int ret = 0; for (int i = 0; i < length; ++i) { int sum = 0; for (int j = 0; j < length; ++j){ sum += coin[j][i]; } if ((length - sum) > sum) ret += sum; else ret += (length - sum); } if(ret>=2) //------------------> 이부분! minVal = min(minVal, ret); return; } if (fix == 'h'){ for (int i = 0; i < 2; ++i){ ChangeAll(length, fix, fixPos); Reverse(length, fix, fixPos + 1); } } if (fix == 'w') { for (int i = 0; i < 2; ++i){ ChangeAll(length, fix, fixPos); Reverse(length, fix, fixPos + 1); } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n; for (int i = 0; i < n; ++i) { string s; cin >> s; for (int j = 0; j < n; ++j) { if (s[j] == 'H') coin[i][j] = 'H' - 'H' + 1; else coin[i][j] = 'T' - 'T'; } } Reverse(n, 'h', 0); cout << minVal << '\n'; }
-
미해결자바 코딩테스트 - it 대기업 유제
미로의 최단거리 탐색(L)질문 드립니다.
아래와 같이 작성했는데, 답이 0이 나옵니다.잘못된 부분이 있을까요?? import java.util.*; import java.io.*; class Main { public static int n,m,L; public static int[][] map ,dist; public static boolean[][] visit; public static int[] dx = {0,0,1,-1}; public static int[] dy = {1,-1,0,0}; public int solution(int[][] board){ int answer = 0; n=board.length; m=board[0].length; map = new int[n][m]; dist = new int[n][m]; visit = new boolean[n][m]; L=0; for(int i=0; i<n;i++) { for(int j=0; j<m; j++) { map[i][j] = board[i][j]; } } bfs(0,0); return answer; } public static int bfs(int r,int c) { Queue<int[]> q =new LinkedList<>(); q.offer(new int[] {r,c}); //0,0대입 visit[r][c] = true; while(!q.isEmpty()) { L++; int len = q.size(); for(int i=0; i<len; i++) { int[] tmp = q.poll(); int nowx = tmp[0]; int nowy = tmp[1]; for(int j=0;j<4;j++) { //상하좌우 탐색 int nx = nowx+dx[j]; int ny = nowy+dy[j]; if(nx>=0 && ny>=0 && nx<n && ny<m) { //맵 범위안이고 if(!visit[nx][ny] && map[nx][ny]==0) { //다음 노드가 방문안햇고, 방문할 수 있다 dist[nx][ny]=L; q.offer(new int[] {nx,ny}); visit[nx][ny] = true; } } } } } return dist[n-1][m-1]; } public static void main(String[] args){ Main T = new Main(); int[][] arr={{0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 1, 0, 0, 0}, {1, 1, 0, 1, 0, 1, 1}, {1, 1, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 1, 0, 0}, {1, 0, 1, 0, 0, 0, 0}}; System.out.println(T.solution(arr)); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-칠무해 메모리 초과 질문
http://boj.kr/f0d087e04e7b4e30bdf6e3d226471308제한이 256MB 인데 왜 메모리 초과가 되는 건지 궁금합니다!천만 개 다 저장한다고 해도 40MB 아닌가요?