월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
10. 미로탐색 (DFS)
package Ex08; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class ex10 { static int[][] arr; static int answer; public static void main(String[] args) throws IOException { ex10 T = new ex10(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); arr = new int[7][7]; for (int i = 0; i < 7; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for (int j = 0; j < 7; j++) { int tmp = Integer.parseInt(st.nextToken()); arr[i][j] = tmp; } } T.DFS(0, 0); // 시작점을 (0, 0)으로 수정 System.out.println(answer); } public void DFS(int dx, int dy) { if (dx == 6 && dy == 6) { // 종료 조건 수정 answer++; } else { int[] dxs = {-1, 0, 1, 0}; // 위, 오른쪽, 아래, 왼쪽 순으로 이동 int[] dys = {0, 1, 0, -1}; for (int i = 0; i < 4; i++) { int x = dx + dxs[i]; int y = dy + dys[i]; if (x >= 0 && x < 7 && y >= 0 && y < 7) { if (arr[x][y] == 0){ arr[x][y] = 1; // 방문한 곳을 1로 표시 DFS(x, y); arr[x][y] = 0; // 백트래킹: 이전 상태로 돌아감 } } } } } }이 코드가 항상 정답값의 두배가 나오는데 어느 로직이 잘못된건지 모르겠습니다ㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요
import java.util.Scanner; public class lecture02 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); String s=scanner.next(); char [] t=s.toCharArray(); String s1=""; System.out.println(); for (int i = 0; i < t.length; i++) { if(Character.isLowerCase(t[i])) { s1+=Character.toUpperCase(t[i]); } else if(Character.isUpperCase(t[i])) { s1+=Character.toLowerCase(t[i]); } } System.out.println(s1); } }이 코드가 정상적으로 구현한것 같은데 , 채점 사이트에서 컴파일 오류가 아닌 , 오답으로 처리 되고 있어서 어떤 부분이 잘못 된 것인지 궁금합니다 ( 예시 출력이나 몇개의 예시로는 올바르게 출력이 되는것 같아서 질문합니다)
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11. 미로의 최단거리 통로(BFS)
dis L이라는 변수를 따로둬 배열 없이 풀어봤습니다. 일단 채점 사이트에는 정답으로 나왔는데 이렇게 풀어도 되는지 궁금해서 여쭤봅니다 ..미로가 막혀있다면 정답 직전까지 q.offer가 불가능해서 접근 불가능 하다고 생각 했습니다. 이럴 정답에 접근 불가니 -1를 리턴하면 된다고 생각했습니다. 더이상 누적되는 큐도 없으니 메소드도 끝난다고 생각 했습니다 .import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Pointer{ int x,y; public Pointer(int x, int y) { this.x = x; this.y = y; } } public class Main { static Scanner sc = new Scanner(System.in); static Main T = new Main(); static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, 1, 0, -1}; static int[][] miro; static int n; static int answer; public static void main(String[] args) { n = 7; miro = new int[n + 1][n + 1]; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { miro[i][j] = sc.nextInt(); } } miro[1][1] = 1; answer = T.searchMiro(1, 1); System.out.println(answer); } private int searchMiro(int x, int y) { Queue<Pointer> q = new LinkedList(); q.offer(new Pointer(x, y)); int L = 0; while (!q.isEmpty()) { int size = q.size(); for (int i = 0; i <size ; i++) { Pointer poll = q.poll(); for (int z = 0; z < 4; z++) { int nx = poll.x + dx[z]; int ny = poll.y + dy[z]; // 접근 가능하다면 바로 리턴 if (nx == n && ny == n) {return L + 1;} if (nx >= 1 && ny >= 1 && nx <= n && ny <= n && miro[nx][ny] == 0) { miro[nx][ny] = 1; q.offer(new Pointer(nx,ny)); } } } L++; } return -1; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요. 코테 플랫폼 질문드립니다.
코드 제출하고 Submitting에서 넘어가지 않으면 시간초과인가요?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
크레인 인형뽑기 테스트 케이스
크레인 인형뽑기 테스트케이스 5번 잘못된거 아닌가요. 문제에는 바구니 아래부터 차곡차곡 쌓여있다고 되어 있는데 테스트 케이스는 인형 중간에 빈칸이 있네요.
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
4. 단어 뒤집기 풀이방식 질문
선생님 안녕하세요. 풀이 방식에 질문이 있어 질문드립니다.선생님이 강의에서 풀어주신 방법과 다르게 저는 아래 코드처럼 작성을 했는데요. 저랑 풀이 방식이 크게 다른거 같아 제 풀이가 문제에서 원하는 풀이 방식이 아닌가 싶어 질문드립니다. 🙂 import java.util.Scanner; public class Main { // 문자열 뒤집는 메서드 public String solution(String str) { String answer = ""; char[] ch = str.toCharArray(); // 반복문 역순으로 돌리기 for (int i = ch.length - 1; i >= 0; i--) { answer += ch[i]; } return answer; } public static void main(String[] args) { Main main = new Main(); Scanner scanner = new Scanner(System.in); int number = scanner.nextInt(); while (number > 0) { System.out.println(main.solution(scanner.next())); number--; } } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
투포인터 슬라이딩 방식이 아니면 어떻게 구현해야 하나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 기존에 남겨주신 코드들 보면 합계를 이용해서 rt를 하나 증가시키고 lt도 합계에 따라 증가시키는 방식으로 이해습니다. 궁금한 부분이 lt에서 rt까지의 합이 아닌 lt와 rt 두 포인터의 합의 최소값으로 구현하려고 하니까 구현 방식이 greedy와 다를게 없어져서 어떻게 구현해야할지 잘 모르겠는데 어떻게 해야하나요? 현재 아래와 스니펫처럼 어떻게든 구현해보려고 하는데 구현하신 방식대로 하려고 하니 잘 풀리지 않습니다. for(int rt = 1; rt < arr.length; rt++){ sum = arr[lt] + arr[rt]; if(Math.abs(sum) < gap){ gap = Math.abs(sum); answer[0] = arr[lt]; answer[1] = arr[rt]; } while(lt + 1 < rt){ lt++; sum = arr[lt] + arr[rt]; if(Math.abs(sum) < gap){ gap = Math.abs(sum); answer[0] = arr[lt]; answer[1] = arr[rt]; } } lt++; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
lt.rt가 잘 이해가 가지 않습니다.
tree.root.rt = new Node(3);tree객체에서 root를 참조하고, root 객체의 rt 변수의 값을 3으로 설정하는 것은 이해했습니다.그런데, tree.root.rt.lt는 rt변수에서 lt를 접근하는 건가요..??변수에서 변수를 참조하는 것이 잘 이해가 되지 않습니다.감사합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
채점 사이트에서 런타임 에러가 발생하여 질문드립니다.
강의보기전 짜본 코드입니다. 이클립스에서 실행할때는 답이 맞게 나오는데 채점 사이트에서는 에러가 출력되어 질문드립니다. package codingTest; import java.util.*; public class Main { public int Solution(int n, int[] ns) { int answer = 0; int reward = 0; for (int i = 0; i < n; i++) { if (ns[i] == 1) { reward++; answer += reward; } else if (ns[i] == 0) { reward = 0; answer += reward; } } return answer; } public static void main(String[] args) { // TODO Auto-generated method stub Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[] ns = new int[n]; for (int i = 0; i < n; i++) { ns[i] = kb.nextInt(); } System.out.println(T.Solution(n, ns)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임에러라고 뜨는데 어디서 잘못된 걸까요?
board의 값을 map으로 저장했습니다. map<몇번째 칸, 저장된 인형들>map의 key에 해당하는 value는 stack으로 저장했습니다.찾아보니 테스트 케이스 5번이 N번 째 줄의 인형을 쌓을 때 0 0 0 1 2 3 이런 식으로 쌓이는 경우뿐 아니라 0 1 0 2 3 같은 경우도 있다고 하네요. 하지만 이건 문제에 따로 명시되지 않은 부분이고 보통 인형 쌓기라고 하면 공백 없이 차곡차곡 쌓이는 걸로 생각해서 코드를 짰습니다.위의 테스트 케이스를 제외하고는 그럼 통과가 돼야 하는데 아예 런타임에러로 뜨는 이유를 못 찾고 있습니다..어떤 문제 때문인지 알려주시면 감사하겠습니다!package programmers.level0; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.Stack; import java.util.StringTokenizer; public class Main{ private static int solution(int size, int[][] board, int moveSize, int[] moves) { int answer = 0; // 삭제된 인형 수 Map<Integer, Stack<Integer>> map = new HashMap<>(); // 인형뽑기 기계(몇번째줄에 어떤 인형이 있는지 저장) // 입력받은 2차원 배열을 col별로 stack으로 저장해서 map에 저장 // 0값은 stack에 저장X for (int col = 1; col <= size; col++) { Stack<Integer> stack = new Stack<>(); for (int row = size; row > 0; row--) { if (board[row][col] == 0) break; stack.push(board[row][col]); } map.put(col, stack); } Stack<Integer> basket = new Stack<>(); for (int i = 0; i < moveSize; i++) { Stack<Integer> stack = map.get(moves[i]); if (!stack.isEmpty()) { if (!basket.isEmpty() && stack.peek() == basket.peek()) { basket.pop(); stack.pop(); answer += 2; } else { basket.push(stack.pop()); } } } return answer; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int size = Integer.parseInt(st.nextToken()); int[][] board = new int[size + 1][size + 1]; for (int i = 1; i <= size; i++) { st = new StringTokenizer(br.readLine()); for (int j = 1; j <= size; j++) { board[i][j] = Integer.parseInt(st.nextToken()); } } int moveSize = Integer.parseInt(br.readLine()); int[] moves = new int[moveSize]; st = new StringTokenizer(br.readLine()); for (int i = 0; i < moveSize; i++) { moves[i] = Integer.parseInt(st.nextToken()); } System.out.println(solution(size, board, moveSize, moves)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
어느 부분에서 오답인지 잘 모르겠어요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 영상보기 전 혼자 풀었었던 답인데 어떤 부분에서 오답인지 모르겠습니다. 도와주세요 ㅜ import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int N = scan.nextInt(); int M = scan.nextInt(); int[] nums = new int[N]; int index1 = 0; int index2 = 1; int answer = 0; for (int i = 0; i < N; i++){ nums[i] = scan.nextInt(); } int sum = nums[index1] + nums[index2]; while(index2<N-1){ // index2가 2일 때 if(sum==M){ // answer++; // anser은 +1이 됨. 이 때 index2는 2 sum -= nums[index1++]; sum += nums[++index2]; // 인덱스 위치 옮겨줌. index2는 3이 됨. if(sum == M && index2 == N-1){ answer++; } continue; } if(sum<M){ sum += nums[++index2]; continue; } if(sum>M){ sum -= nums[index1++]; continue; } } System.out.println(answer); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제6번 컴파일에러 질문 드립니다!
안녕하세요!입력에 대한 출력값은 문제의 요구사항에 맞게 나오는데 계속 컴파일 에러가 뜹니다.import java.util.Scanner; public class Main { public String solution(String str){ if (str == null || str.isBlank()){ return str; } StringBuilder sb = new StringBuilder(); for (char c : str.toCharArray()) { if (sb.indexOf(String.valueOf(c)) == -1) { sb.append(c); } } System.out.println("sb :" + sb.toString()); return sb.toString(); } public static void main(String[] arg){ Main T = new Main(); Scanner kb = new Scanner(System.in); String str = kb.nextLine(); System.out.println(T.solution(str)); } } 어느 부분이 문제가 되는건지 알려주시면 정말 감사하겠습니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
8-6 순열구하기 이러한 방식으로 풀어도 괜찮을까요?
이전 값을 DFS 매개변수로 넘겨서 이전값이 아니면 더 깊이 들어가는 방식으로 풀이를 혼자 했었습니다. 괜찮은 풀이 방법일까요?public class P6_순열 { static int n, m; static int[] arr; public static void DFS(int L, int prev, String answer) { if(L==m){ System.out.println(answer); }else{ for(int i=0; i<n; i++){ if(arr[i]!=prev) DFS(L+1, arr[i], answer+arr[i]+" "); } } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); n=sc.nextInt(); m=sc.nextInt(); arr=new int[n]; for(int i=0; i<n; i++){ arr[i]=sc.nextInt(); } DFS(0,0,""); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
BFS 자료구조
BFS 문제를 PriorityQueue가 아닌 LinkedList로 풀던데 이유가 있을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
제 블로그에 코드 올려도 되나요?
강사님 강의 듣고제 블로그에 기록용으로 코드 올려도되나요?설명들은거 주석으로 기재한거 포함해서 제 이클립스에서 돌려본걸로 코드 가지고 있는데요 그걸 제 블로그에 올려도 괜찮을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
송아지 찾기 시간초과 질문
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class FindCow { static int personPos; static int cowPos; static int[] idx = {5, 1, -1}; public static int solution(int n) { boolean[] visit = new boolean[10_001]; Queue<Integer> queue = new LinkedList<>(); visit[n] = true; queue.offer(n); int level = 0; while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { Integer curPos = queue.poll(); for (int k = 0; k < 3; k++) { int nextPos = curPos + idx[k]; if (nextPos == cowPos) { return level + 1; } if (nextPos < 10_001 && nextPos > 0 && !visit[nextPos]) { queue.offer(nextPos); visit[nextPos] = false; } } } level++; } return 1; } public static void main(String[] args) { Scanner in = new Scanner(System.in); personPos = in.nextInt(); cowPos = in.nextInt(); System.out.println(solution(personPos)); } }안녕하세요! 좋은 강의 항상 감사드립니다.강의 중, 송아지 찾기(BFS)에서 시간 초과가 떠서 확인해 보니, 강의에서 올려주신 코드와 딱히 다른 부분이 없어 보이는데 시간초과가 납니다. 왜 그럴까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
오답 원인 문의
import java.util.Scanner; public class 단어뒤집기 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int num = sc.nextInt(); String text1 = sc.next(); String text2 = sc.next(); String text3 = sc.next(); text1 = sb.append(text1).reverse().toString(); sb.setLength(0); text2 = sb.append(text2).reverse().toString(); sb.setLength(0); text3 = sb.append(text3).reverse().toString(); sb.setLength(0); System.out.println(text1); System.out.println(text2); System.out.println(text3); sc.close(); } }단어 뒤집기 강의 듣기전 제가 짠 소스인데, 출력결과는 문제와 동일하게 나왔는데, 제출 시 오답나와서 어떤 예외가 있는건지 몰라 문의드립니다. 혹시 불필요한 소스가 있는지도 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문자 찾기 코드 평
import java.util.Scanner; public class 문자찾기 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String text = sc.next(); String ch = sc.next(); int cnt = 0; for(char rs : text.toCharArray()) { if(ch.toUpperCase().equals(String.valueOf(rs).toUpperCase())) { cnt++; } } System.out.println(cnt); sc.close(); } }문자찾기 위 코드로 강의 전 스스로 푼건데 불필요한 소스부분이 있는지 평가 요청드립니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
미로탐색 코드 질문있습니다.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; class Main { static int n = 7; static int[][] map; static int count = 0; static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, -1, 0, 1}; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); map = new int[n][n]; for (int x = 0; x < n; x++) { StringTokenizer st = new StringTokenizer(br.readLine()); for (int y = 0; y < n; y++) { map[x][y] = Integer.parseInt(st.nextToken()); } } dfs(0, 0); System.out.println(count); } public static void dfs(int x, int y) { if (x == n - 1 && y == n - 1) { count++; } else { for (int i = 0; i < 4; i++) { int d_x = dx[i] + x; int d_y = dy[i] + y; if (d_x >= 0 && d_x <= n - 1 && d_y >= 0 && d_y <= n - 1 && map[d_x][d_y] == 0) { map[d_x][d_y] = 1; dfs(d_x, d_y); map[d_x][d_y] = 0; } } } } }저와 같은 경우는 1부터 시작하지 않고 0부터 시작해서 n전까지를 구해서 진행했는데 인덱스 차이만 있는데 답은 두배씩 나오는지 모르겠습니다.정답이 8이라고 하면 16으로 나오더라구요. 인덱스를 하나씩 빼줘서 했을 뿐인데 어디가 문제인지 못찾겠네요ㅠ 아니면 놓친부분이 어디에 있는지 모르겠습니다ㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
연속부분수열
import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public int solution(int n, int m, int arr[]) { int answer = 0; int sum = 0; int lt = 0; int rt = 1; // 초기 합 설정 sum += arr[lt] + arr[rt]; while (rt < n - 1) { if (sum < m) { sum += arr[++rt]; } else if (sum == m) { answer++; sum -= arr[lt++]; } else { sum -= arr[lt++]; } } // while문에서 rt가 마지막 인덱스일 때 합은 검증을 못해서 검증 로직 추가 if (sum == m) answer++; return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int arr[] = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } System.out.println(T.solution(n, m, arr)); } }이 코드가 효율적인 코드인지 궁금해서 질문드립니다!!