안녕하세요. 자바 문법 배워보고자 강의 영상을 보고 있습니다. 인텔리제이를 사용하시는 것 같은데, VS code 환경에서도 스크린샷과 같은 기능을 이용할 수 있을까요? 저도 ctrl+c,v로 BOJ1000 파일을 복사했는데 선생님처럼 팝업은 안뜨고 무정하게 copy로 이름만 바뀐 놈이 나옵니다.... 혹시 아신다면 추천 부탁드립니다. 그리고 자바 환경 IDE로 이클립스를 추천받았는데 그냥 VS code로 수업 진행해 도 괜찮겠죠?
i 는 1부터 시작해서 n까지 누적합을 구하는공식은 이해가됐는데그 이후에 for(int i=k; i<n; i++){ret = max(ret, psum[i] - psum[i - k]; 이부분에 대해서 그림으로 그려보려고 해도 잘 이해가 되지 않습니다..개념 강의를 참고해도 쉽지않네요혹시 이부분에 대해서 그림으로 설명 부탁드려도 될까요 -학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요! 선생님 덕분에 매일 알고리즘 푸는 법을 재밌게 배우고 있습니다 🙂 문제의 제한 사항에 "password의 길이는 200,000을 넘지 않습니다." 라서 효율성을 생각하고 풀어야 된다고 하셨는데, 인접한 숫자를 찾는 과정에서 삼중 for문을 사용하는 것이 괜찮은지 궁금합니다!
http://boj.kr/253158ae77474d9d831ca2fbb09b171e 강의 앞부분만 살짝보고 조합으로 푸는 방법을 생각해서 풀어봤습니다. 답은 예제도 통과못하는 오답입니다. 제가 궁금한 점은 현재처럼 출력을 하면 빠르게 주르륵 나오게 되는데 for (int i = sy; i < n; i++) { for (int j = sx+1; j <m; j++) { if (lab[i][j] != 0) continue; //cout << "in fors"; v.push_back(make_pair(i, j)); wall(i, j, v); v.pop_back(); } //여기서 sx = -1을 하면 너무 오래걸립니다 ㅠㅠ } 해당 부분에서 문제의 1번 예시를 적용하자면 (0,1) / (0,2) / (0,6) 다음 찾아져야 할 조합은 (0,1) / (0,2) / (1,0) 인데 로직 상 sx보다 큰 값이 x에 들어가져서 (0,1) / (0,2) / (1,3)으로 들어갑니다. 이것을 해결하기 위해서 sx = -1을 해당 주석 위치에 넣었지만 그렇게 하게 되면 답은 나오나 너무 오래걸립니다. 혹시 소생 불가능한 코드인지 여쭤봅니다 ㅠㅠ
안녕하세요 🙂 큰돌님! 새로 교안 업그레이드를 해주시면서 getline()에 대한 설명을 읽어보았는데요, getline()의 경우 cin과 달리, '\n'까지 입력받는 것은 이해하였는데, 밑의 출력 예시를 보면 getline()이 입력받은 뒤에 오는 개행문자를 삭제한 것 같은데, 제가 잘못 이해한 것인지 질문드리고 싶습니다! 다른 질문글에 답변 주신 것도 읽어보았는데 잘 이해가 안되어서요ㅜㅜ
package basic; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; class longWords_split { public String solution(String str){ String answer =" "; int m = Integer.MIN_VALUE; String[] s = str.split(" "); for(String x: s){ int len = x.length(); if(len > m) { m = len; answer = x; } } // System.out.println(answer); return answer; } public static void main(String[] arg) throws IOException { longWords_split T = new longWords_split(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); T.solution(input); } } 이 코드에서 System.out.println(answer); 로 확인하면 가장 긴 단어가 출력되는데, return answer 를 받았을때 값이 아무 것도 안나옵니다 (공백출력) 원인을 못찾고 헤매고 있습니다. ㅠㅜ 조언 부탁드립니다.
안녕하세요 선생님, 먼저 답변 감사드립니다. 이 부분에 대해 완벽히 이해했습니다. 다만, 배열 범위 밖의 인덱스를 참조했음에도 컴파일 오류가 발생하지 않았던 이유가 궁금합니다.(Dev C++을 사용하는데, 잘 동작했고 테스트 케이스도 통과했습니다.) 그리고 왜 백준 사이트에서 컴파일 에러가 아닌, 시간 초과로 표시가 되었는지도 궁금합니다. 좋은 강의 늘 감사드립니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 원격으로 부탁드립니다... 이메일 전달드립니다. lahatko1202@gmail.com 감사합니다. 0
안녕하세요. 71번 문제의 출력엔 E D F A C B로 되어 있습니다. 그 앞에 깊이 우선 탐색을 그림으로 해설 하실때에도 E D F A C B로 설명해주시는데 하지만 정답 코드로는 E A B C D F 로 나오는데 해설에는 단지 출발 방향만 다르지 같다고 하시는데 이해가 되질 않아 문의드립니다.
안녕하세요 강사님. 문제를 풀고 백준에 제출했을 때 계속 오답으로 나와 질문 드립니다.. 제가 봤을 때 강사님 코드랑 거의 비슷하게 수정까지 한 것 같은데.. 어떤 부분이 잘못되었는지 확인 한번 부탁드립니다. import java.io.*; import java.util.StringTokenizer; public class Main { final static int MAX = 50 + 10; static boolean map[][]; static boolean visited[][]; /* static int dirY[] = {1, 1, 1, 0, 0, -1, -1, -1}; static int dirX[] = {-1, 0, 1, -1, 1, -1, 0, 1};*/ static int dirY[] = {-1, -1, 0, 1, 1, -1, 0, -1}; static int dirX[] = {0, 1, 1, -1, 0, -1, -1, -1}; static int N, M; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); while (true) { StringTokenizer st = new StringTokenizer(br.readLine()); M = Integer.parseInt(st.nextToken()); // 너비 x N = Integer.parseInt(st.nextToken()); // 높이 y if (N == 0 && M == 0) break; map = new boolean[MAX][MAX]; visited = new boolean[MAX][MAX]; // 1. map 정보 반영 for (int i = 1; i <= N; i++) { st = new StringTokenizer(br.readLine()); for (int j = 1; j <= M; j++) { map[j][i] = Integer.parseInt(st.nextToken()) == 1; } } // 2. dfs int result = 0; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { if (map[i][j] && !visited[i][j]) { dfs(i, j); result++; } } } // 3. 출력 bw.write(String.valueOf(result)); bw.newLine(); } bw.close(); bw.close(); } private static void dfs(int y, int x) { visited[y][x] = true; for (int i = 0; i < 8; i++) { int newY = dirY[i] + y; int newX = dirX[i] + x; if (map[newY][newX] && !visited[newY][newX]) { dfs(newY, newX); } } } }
안녕하세요, 문자열 슬라이싱 관련 질문이 있습니다. 문자열 a = 'abcde'가 있다고 할 때, print(a[::-1]) 을 실행하면 'edcba'로 문자열이 반대로 나오지만 print(a[1:4:-1])처럼 [ : :-1]에서 시작하는 칸과 끝나는 칸에 그 어떤 수를 넣어도 프린트가 되지 않습니다. 유사하게 -1대신 -2, 등 음수는 되지 않는다는 것을 확인하였습니다. print(a[1:4:2])는 되는데 print(a[1:4:-1])이 되지 않는 이유는 무엇인가요? [ : : ] 에서 마지막에 음수를 넣으면 그 앞 두 칸에는 숫자를 넣을 수 없는 것인가요?
안녕하세요 선생님, http://boj.kr/748e160790bc4f178f9f9ec8afbd0054 테스트 케이스는 통과했지만, 시간 초과가 떴습니다. 선생님의 코드와 비교했을 때, 대충 제 코드의 'find' 함수에서 맵 순회 부분이 매우 비효율적이라는 것 정도를 짐작할 수 있었습니다. 다만, 확실히 짚고 넘어가고 싶어 이렇게 질문을 드립니다. 아래의 두 코드에서 시간복잡도 측면에서 어떤 차이가 있는지, 왜 선생님의 코드가 더 빠른지 정확히 알고싶습니다. 위가 제 코드이고, 아래가 선생님의 코드입니다. 1. 제 코드는 특정 값을 찾기위해 모든 맵을 순회하고 있는데, 선생님처럼 코드를 짜면 특정 값을 찾기위해 맵을 순회할 필요가 없나요? 2. 제 코드는 모든 맵을 순회하면서 맵의 first값, second 값 모두를 비교합니다. 이부분도 시간복잡도가 커질 수 있는 여지가 있나요? 혹시 시간초과가 난 다른 이유가 있다면 알려주시면 감사하겠습니다! 좋은 강의 늘 감사합니다:)