묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 코딩테스트 - 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 아닌가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-2 인접행렬
안녕하세요. 4-2 인접행렬 코드 관련 질문 있습니다. 우선 main 에 이중 for문을 두시고 내부에 go 라는 이름의 재귀함수를 쓰셨는데, 이중포문과 재귀함수의 역할이 동일한 것 같습니다. 아래처럼 go 함수에 재귀 부분을 지우니 똑같이 1,2,3,4 가 잘 출력되는데, 혹시 제가 놓친 부분이 있을까요?void go(int f) { visited[f] = 1; cout << f << '\n'; // for (int i = 0; i < n; i++) { // if (visited[i]) continue; // if (v[f][i]) go(i); // } } int main() { for(int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (v[i][j] && visited[i] == 0) go(i); } } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
수업질문
62187478번 소스 코드 (acmicpc.net) 선생님 제가 짜본 코드인데기존 해설에는 회의시간 끝을 사용해 sort를 하는데저는 강의 듣기 전에 일단 회의시간 시작을 사용해 코딩을 했습니다.시간복잡도는 회의시간 끝을 사용한게 훨씬 좋은거 같긴하네요.근데 제가 짠 코드가 예제들을 돌려도 맞는데어디가 틀린지 모르겠습니다.채점 시 : "틀렸습니다" 로 명시됩니다.감사합니다.