묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
- 
      
        
    미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
HashMap에서 map.KeySet() 정렬관련 질문있습니다.
입력 순서가 BACDE 이면 HashMap을 배열로 생각하였을 때, 순서대로 저장된다면 KeySet()의 배열은 [B, A, C, D, E]가 되는게 맞지 않나요? for(char x : keySet())의 출력 값이 ABCDE로 나오는 것을 보면 별다른 sort과정 없이 HashMap에서 Key 값을 정렬해서 출력해주는 것으로 보입니다. HashMap에 존재하는 Key값들이 자동적으로 정렬이 되고 있다고 봐도 될까요?
 - 
      
        
    미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
DP 풀이방법에 있어 탑바텀, 바텀업 풀이 방식의 선택 방식
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 ^^강의 너무 잘 듣고 있습니다. DP 문제를 풀다보면.., 시작하기 전에 해당 문제를 바텀업으로 풀어야할지, 탑바텀으로 풀어야할지 어떻게 결정할 수 있을까요?제 느낌은 바텀업풀이가 점화식을 유도할 수 있다면 코드 자체가 간단하여(재귀호출x) 구현 난이도가 쉬운데, 점화식을 생각하는 과정이 경우에 따라 매우 어려운것 같습니다. 탑바텀 풀이는 완전탐색과 동일한 상태에서 메모이제이션 을 잘 정의함으로써 문제를 풀 수 있는데, DP배열의 상태정의를 어떻게 하느냐에 따라, 테스트케이스는 맞지만 제출시 틀리는 결과가 나오는 경우가 종종있습니다 (구현에서 실수 잦음) 어떤 식으로 DP의 풀이를 결정하고 문제를 들어가는지 질문드려요. 감사합니다.!!
 - 
      
        
    미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
송아지 찾기2 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 아래와 같이 작성했는데, 4번째 테스트 케이스에서 답이 출력 되지 않습니다. 어디가 잘 못된건지 궁금합니다.import java.io.*; import java.util.*; public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); int s=sc.nextInt(); int e=sc.nextInt(); int k=sc.nextInt(); int[] ck = new int[10001]; for(int i=0; i<k; i++) { //웅덩이 체크 int a=sc.nextInt(); ck[a]=1; } Queue<Integer> q = new LinkedList<>(); q.add(s); int L=0; while(!q.isEmpty()) { int len = q.size(); for(int i=0; i<len; i++) { int now = q.poll(); if(now==e) { System.out.print(L); System.exit(0); } for(int nx : new int[] {now-1,now+1,now+5}) { if(nx>=1 && nx<10001 && ck[nx]==0) { //이동할 수 있는 범위이고, 아직 방문 안했고, 웅덩이가 아니라면 ck[nx]=1; q.add(nx); } } } L++; } } }
 - 
      
        
    미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1 - G 질문입니다!
#include <bits/stdc++.h> using namespace std; int cnt; string pattern, input; vector<string> split(string s, string d) { long long pos; vector<string> ret; string token; while ((pos = s.find(d)) != string::npos) { token = s.substr(0, pos); ret.push_back(token); s.erase(0, pos + d.length()); } ret.push_back(s); return ret; } int main() { cin >> cnt; cin >> pattern; vector<string> p = split(pattern, "*"); string str; string front_str, end_str; for (int i = 0; i < cnt; i++) { cin >> str; front_str = str.substr(0, p[0].length()); cout << str.length() << " " << p[1].length() << '\n'; cout << str.length() - p[1].length() << '\n'; if (str.length() - p[1].length()) { // str.length() - p[1].length() 부분이 이상한 양수값을 반환하여 // if값으로 걸러져야할 상황에도 if문 안으로 들어오고 있습니다ㅜㅜ // end_str = str.substr(str.length() - p[1].length(), str.length()); } // cout << front_str << " " << end_str << '\n'; } return 0; }//input값입니다! 1 a*dddddd abcd 선생님 제가 반정도 짠 코드인데 주석에서도 언급하듯이 str.length() - p[1].length()부분이 p[1].length()가 더 큰경우 이상한 값을 반환합니다! 이럴때 어떻게 해야하나요?
 - 
      
        
    미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이런 방법도 가능한가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.사과나무 문제에 대해서 좌표를 잡은 다음에 즉 중앙갑을 (2,2)라는 값을 두고 abs 즉 절대값 함수를 이용하여 거리가 n/2를 이용하여 2 이하인 값의 범위 까지만 더해서 해도 괜찮은 가요? 즉 거x,y축 까지의 거리가 2 이하인 블록의 합을 구하는 방식입니다.
 - 
      
        
    미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
정사각형 그리기 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. dp를 작성하는 else 부분에서 배열의 범위가 벗어났다고 뜨는데, 어디가 잘 못 된건가요??? import java.io.*; import java.util.*; public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); int[][] map = new int[n][m]; int[][] dp = new int[n][m]; for(int i=0; i<n; i++) { String s=sc.next(); for(int j=1; j<=m;j++) { map[i][j]=s.charAt(j)-'0'; } } for(int i=0; i<n ; i++) { for(int j=0; j<m; j++) { if(map[i][j]==0) dp[i][j]=0; else { //에러 부분(배열 범위 벗어남) int a=map[i-1][j]; int b=map[i][j-1]; int c=map[i-1][j-1]; int k = Math.min(a, Math.min(b, c)); dp[i][j] = k; } } } } }
 - 
      
        
    미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
구현 알고리즘이 부족한데 계속 진도를 빼도 괜찮을까요?
안녕하세요 선생님.구현 알고리즘에 대해 취약한 것 같아 질문 드립니다.현재 1-O까지 풀면서 답안을 안 보고 푼건은 2번 정도인 것 같습니다. 구현 유형의 알고리즘이 약하다고 생각됩니다. 이런 와중에 2주차 그래프이론을 바로 학습하는게 맞을지, 아니면 구현 관련 알고리즘을 좀 더 찾아서 풀어보는게 맞을지 잘 모르겠습니다.
 - 
      
        
    해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 문제 질문있습니다
안녕하세요 선생님,올려주신 강의 잘 듣고 있습니다.BFS를 이용하여 3-D 문제를 풀고 있습니다. http://boj.kr/c6c17d2eb9a749febe75792df0897cafTree 깊이가 변할 때마다 fire() 라는 함수를 사용하여 불의 위치를 업데이트하는 방법으로 구현했습니다.예제는 잘 통과하는데, 성공하지 못했습니다. 혹시 반례를 알 수 있을까요?감사합니다.
 - 
      
        
    해결됨코딩테스트 [ ALL IN ONE ]
코테 볼때 언어제한
파이썬 이외의 언어로 제한해서 보는 기업이 많을까요?
 - 
      
        
    해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-x_1480 질문 있습니다
재귀를 이용해서 dp를 하는 방식이 아닌 선생님께서 배낭채우기 할 때 처럼 표를 완성하여 dp를 했는데 무엇이 문제 인지 잘 모르겠습니다. 이 문제에서는 표에 넣을 수 있는 보석의 인덱스를 저장을 했고표가 완성되면 넣어준 보석을 보석목록에서 제거하고 다음 가방을 완성하는 방식으로 코드를 작성했는데 무엇이 문제인지 잘 모르겠습니다.http://boj.kr/2b01ce15326a43c9ad3c8f340157eab3
 - 
      
        
    해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
바텀업 DP 수업 자료
안녕하세요! 강의 수강하고, 탑다운을 바텀업으로 변경하는 부분이 잘 이해가 가지 않아, 정답 코드를 보며 이해해보려고 하는데 수업자료에 코드가 없습니다.수업자료에 정답 코드 추가해주실 수 있으신가요?수업 재미있게 듣고 있습니다! 항상 감사합니다.
 - 
      
        
    해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-E 질문 있습니다.
현재 큰돌 강사님이 풀어주신 문제 해설은 이해 됐습니다. 그런데 scv갯수가 주어지고 한 개체를 한번에 여러번 공격을 못하기에 (모든 scv의 총 체력/한번에 줄 수 있는 데미지)이렇게 해서 구할 수도 있지 않을까 했습니다. 이를 바탕으로 코드를 썻으나 틀렸다고 나오는데 이게 왜 되지 않는지 몰라서 질문드립니다. 다음은 해당 코드입니다. http://boj.kr/dab5e07b909146eba418c449e7c219f9
 - 
      
        
    미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
TimeLimit 문의 드립니다
로직은 다르지만 의미는 강의와 비슷하게 구현한듯 한데 타임리밋이 발생하여 문의 드립니다. 어떤 부분이 잘못된 걸까요?public class 송아지찾기 { int count = 0; boolean visited[] = new boolean[10001]; public int BFS(int s ,int e) { Queue<Integer> queue = new LinkedList<>(); queue.add(s); while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { Integer poll = queue.poll(); visited[poll] = true; if (poll + 1 < 1000 && !visited[poll + 1]) { if (poll + 1 == e) { return count + 1; } queue.add(poll + 1); } if (poll + 5 < 10000 && !visited[poll + 5]) { if (poll + 5 == e) { return count + 1; } queue.add(poll + 5); } if (poll - 1 > -1 && !visited[poll - 1]) { if (poll -1 == e) { return count + 1; } queue.add(poll - 1); } } count++; } return count; }
 - 
      
        
    미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-A break 질문
http://boj.kr/2824498d59514215a51a4c55417f5914제가 쓴 코드입니다 선생님! j로 순회하고있는 for loop안에서 break를 했음에도 i로 순회하는 밖에 있는 for loop까지 나올 수 있는 이유가 무엇인가요?
 - 
      
        
    미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
호텔연결
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.테스트케이스 4번, 5번에서 에러가 뜹니다.어디가 잘 못 된건지 궁금합니다.import java.io.*; import java.util.*; class Node implements Comparable<Node>{ int v1; int v2; double c; Node(int v1, int v2, double c) { this.v1=v1; this.v2=v2; this.c=c; } @Override public int compareTo(Node o) { //double형은 이렇게 한다. if(this.c<o.c) return -1; else return 1; } } public class Main { public static int n,m; public static int[] unf; public static ArrayList<Node> graph = new ArrayList<>(); public static ArrayList<Integer> x = new ArrayList<>(); public static ArrayList<Integer> y = new ArrayList<>(); public static int find(int v) { if(v==unf[v]) return v; else return unf[v] = find(unf[v]); } public static void union(int a, int b) { int fa = find(a); int fb = find(b); if(fa!=fb) unf[fa] = fb; } public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); n=sc.nextInt(); m=sc.nextInt(); unf = new int[n]; for(int i=0; i<n; i++) unf[i] = i; for(int i=0; i<n; i++) { int a=sc.nextInt()-1; int b=sc.nextInt()-1; x.add(a); y.add(b); } for(int i=0; i<n; i++) { //점과 점 사이의 거리를 구하는 구문 for(int j=i+1; j<n; j++) { double dis = Math.sqrt((x.get(j)-x.get(i)) *(x.get(j)-x.get(i)) + (y.get(j)-y.get(i)) * (y.get(j)-y.get(i))); graph.add(new Node(i,j,dis)); } } for(int i=0; i<m; i++) { //이미 연결되어 있는 점들은 union해준다 int a=sc.nextInt(); int b=sc.nextInt(); union(a-1,b-1); } Collections.sort(graph); double answer=0; for(int i=0; i<graph.size(); i++) { //크루스칼 int fa = find(graph.get(i).v1); int fb = find(graph.get(i).v2); double cost = graph.get(i).c; if(fa!=fb) { //union(fa, fb); unf[fa] = fb; answer+=cost; } } System.out.format("%.2f", answer); //소수점 출력은 System.out.format으로 } }
 - 
      
        
    해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-G 질문드립니다!!
안녕하세요 선생님.예제도 다 맞는데 4%에서 틀렸습니다.가 나옵니다 ㅠㅠ제 코드에 어느 부분이 문제인지 모르겠어서 질문드립니다..아래는 제가 제출한 코드입니다.#include<bits/stdc++.h> using namespace std; typedef long long ll; ll x, y, z, lo, hi, ret = -1; bool check(ll mid) { ll change_z = (double)(y + mid) / (x + mid) * 100; return change_z > z; } int main() { cin >> x >> y; // x : 게임 횟수, y : 이긴 횟수, z : 승률(y / x * 100) z = (double)y / x * 100; lo = 1; hi = 1e9; while(lo <= hi) { ll mid = (lo + hi) / 2; if(check(mid)) { hi = mid - 1; ret = mid; } else lo = mid + 1; } cout << ret << "\n"; }
 - 
      
        
    미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
makePermutation 질문합니다
재귀함수에는 기저사례가 있어야 재귀가 풀리는것은 이해를 했습니다. 제 궁금증은 왜 r값이 depth값과 같으면 재귀가 풀리는지 이해가 가지않습니다. r값과 depth값의 상관관계가 궁금합니다!
 - 
      
        
    미해결코딩테스트 실전 모의고사(with C++) : 대기업 대비
중복된 문자 제거 코드
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.c++코드를 자바로 변형했는데, 해시맵 오류가 뜹니다.잘못 변형한 곳이 어디인지 궁금합니다.import java.io.*; import java.util.*; public class Main { public static void main(String[] argvs) { Scanner sc = new Scanner(System.in); String s=sc.next(); s=s.toUpperCase(); LinkedList<Character> res = new LinkedList<>(); HashMap<Character, Integer> map = new HashMap<>(); for(char x : s.toCharArray()) { map.put(x, map.getOrDefault(x, 0)+1); } for(char x : map.keySet()) { System.out.println(x+": "+map.get(x)); } HashMap<Character, Integer> ch = new HashMap<>(); for(char x: s.toCharArray()) { map.put(x, map.get(x)-1); if(ch.get(x)==1) continue; while(res.size()!=0 && res.peekLast()>x && map.get(res.peekLast())>0) { ch.put(res.peekLast(),ch.get(res.peekLast()-1)); //if(ch.get(res.peekLast())==0) ch.remove(res.peekLast()); res.pollLast(); } res.addLast(x); ch.put(x, ch.get(x)+1); } for(int i=0; i<res.size(); i++) System.out.print(res.get(i)); } }
 - 
      
        
    미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
강의 공부 순서
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 강사님 이번에 처음 구매했는데, 공부순서를 어떻게 하면 좋을까요 ? 교안을 먼저 보고 교안에 있는 내용들을 충분히 숙지한 후에 동영상강의를 듣는게 맞을까요? 그리고 저는 C를 어느정도 공부한 후 C++은 문법만 살짝 맛봤는데, 강의 내용이 처음부터 알고리즘에 관한 내용이 나와서 어려운 부분이 꽤 많습니다 ㅠㅠ 추천해주실만한 공부순서 있으면 부탁드립니다.
 - 
      
        
    미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
트리 레벨 체크로는 안되는건가요??
예전 BFS 영상에서 최단 경로 길이를 구하기 위해서는 트리 레벨 체크를 활용하는 것을 보고 이번에도 큐 사이즈 만큼 반복을 돌아서 트리 레벨을 체크 하는 방식으로 구현하였는데프로그램에선 12로 잘 나오지만, 채점에선 오류가 떠서 이 방식으론 안되는지 궁금합니다.. 또, 강의를 들으면서 배열에 +1씩 추가하는 아이디어를 보고 기존의 배열에서 +1씩 해주어 수정한 결과는 통과하였는데, DIS배열을 하나 더 만든 이유도 궁금합니다! 추가로 젤 윗 이야기인 큐 사이즈 만큼 반복하여 레벨을 체크하는 상황과 배열에 +1씩 하여 넓혀가는 상황의 구별을 어떻게 할 수 있을지도 궁금해졌습니다... 감사합니다 import java.awt.*; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class In_8_11 { static int[][] matrix = new int[8][8]; static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, 1, 0, -1}; static int level; public static int BFS(int x, int y) { Queue<Point> Q = new LinkedList<>(); // 가장 처음 큐에 넣기 Q.offer(new Point(x,y)); matrix[1][1] = 1; // 출발지점 꼭 걸어줘야함. // 시작 while( !Q.isEmpty()){ for (int j = 0; j < Q.size(); j++) { Point P = Q.poll(); System.out.println("( "+P.x + " , " + P.y+" )"); if (P.x == 7 && P.y == 7){ //return matrix[7][7] -1; return level; } for (int i = 0; i < 4; i++) { int nx = P.x + dx[i]; int ny = P.y + dy[i]; if (1 <= nx && nx <= 7 && 1 <= ny && ny <= 7) { if (matrix[nx][ny] == 0) { matrix[nx][ny] = 1; //matrix[nx][ny] = matrix[P.x][P.y] +1; // 뺄 필요 없을 거 같은데? Q.offer(new Point(nx, ny)); } } } }level++; } return -1; } public static void main(String args[]) { Scanner sc = new Scanner(System.in); for(int i = 1; i <= 7; i++){ for(int j = 1; j <= 7; j++) { matrix[i][j] = sc.nextInt(); } } System.out.println( BFS(1, 1) ); } }