월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(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)); } }이 코드가 효율적인 코드인지 궁금해서 질문드립니다!!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
10. 마구간 정하기 [ 비슷하지만 다른 해답] 이래도 맞게 푼 걸까요??
채점사이트에서 출력은 "첫 줄에 가장 가까운 두 말의 최대 거리를 출력하세요." 라고 되어 있었습니다.제 생각대로라면 말들이 여러마리니까 가장 가까운 말들의 거리가 말들마다 다를수도 있겠다는 생각이 들어. 최대거리를 구하기 위해 코드를 조금 다르게 쳤습니다. 채점사이트에서는 정답처리 되었는데 확신이 안들어서 이 방식대로 풀어도 되는지 피드백주세요. 또한, 제가 한 방식과 원래 풀이가 어떤 차이가 있는지 궁금합니다.첨부1. 원래 풀이, 내가 생각한 풀이2. 문제 전체 소스코드 *강의 풀이 방식 count()public int count(int[]arr, int distance){ int ep=0, cnt=1; for(int i=1; i<arr.length; i++){ //배치가능 if(arr[i]-arr[ep] >= distance){ cnt++; ep=i; } } return cnt; }*내가 푼 방식 count()public int[] count(int[]arr, int distance){ int [] res = new int[2]; int ep=0, cnt=1; int min = Integer.MAX_VALUE; for(int i=1; i<arr.length; i++){ //배치가능 if(arr[i]-arr[ep] >= distance){ cnt++; min = Math.min(min,arr[i]-arr[ep]); // 말들의 최소거리 ep=i; } } res[0] = cnt; // distance로 배치되는 말의 수 res[1] = min; // 말들의 최소 거리 return res; }*강의 풀이 방식 solution()내부 이진탐색 while문while (lt<=rt){ int mid = (lt+rt) / 2; //mid최소거리만큼 배치했을때 m보다 더 배치할 수 있으므로 거리를 늘린다. if(count(arr,mid) >= m){ // mid : 말들의 최소거리 lt = mid+1; answer = mid; } else rt = mid-1; }*내가 푼 solution()내부 이진탐색 while문while (lt<=rt){ int mid = (lt+rt) / 2; int res[] = count(arr,mid); //mid최소거리만큼 배치했을때 m보다 더 배치할 수 있으므로 거리를 늘린다. if(res[0] >= m){ // mid : 말들의 최소거리 lt = mid+1; answer = res[1]; // answer = mid 가 아닌 count메소드에서 계산한 말들의 최소거리를 넣어준다. //(말들이 여러마리일때 가장 가까운말의 최대거리를 구하라고 문제에 명시되어있어서) } else rt = mid-1; } 전체 소스코드import java.util.*; public class Main { public int[] count(int[]arr, int distance){ int [] res = new int[2]; int ep=0, cnt=1; int min = Integer.MAX_VALUE; for(int i=1; i<arr.length; i++){ //배치가능 if(arr[i]-arr[ep] >= distance){ cnt++; min = Math.min(min,arr[i]-arr[ep]); // 말들의 최소거리 ep=i; } } res[0] = cnt; // distance로 배치되는 말의 수 res[1] = min; // 말들의 최소 거리 return res; } public int solution(int n ,int m, int[] arr){ int answer = 0; Arrays.sort(arr); int lt = 1; int rt = arr[n-1]-arr[0]; //arr[arr.length-1]로 끝내도 큰 차이 없음 while (lt<=rt){ int mid = (lt+rt) / 2; int res[] = count(arr,mid); //mid최소거리만큼 배치했을때 m보다 더 배치할 수 있으므로 거리를 늘린다. if(res[0] >= m){ // mid : 말들의 최소거리 lt = mid+1; answer = res[1]; // answer = mid 가 아닌 count메소드에서 계산한 말들의 최소거리를 넣어준다. //(말들이 여러마리일때 가장 가까운말의 최대거리를 구하라고 문제에 명시되어있어서) } else rt = mid-1; } return answer; } public static void main(String[] args) { Main M = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int m = kb.nextInt(); int [] arr = new int [n]; for(int i=0;i<n;i++)arr[i]= kb.nextInt(); System.out.print(M.solution(n,m,arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
9-4.최대 수입 수케쥴 문제 질문있습니다!!
9-4.최대 수입 수케쥴 문제 질문있습니다!!import java.util.ArrayList; import java.util.Collections; import java.util.PriorityQueue; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); ArrayList<Point> arrayList = new ArrayList<>(); for (int i = 0; i < N; i++) { int x = sc.nextInt(); int y = sc.nextInt(); arrayList.add(new Point(x, y)); } Collections.sort(arrayList); PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder()); int tmp = arrayList.get(0).y; int answer = 0; for (int i = 0; i < arrayList.size(); i++) { if (arrayList.get(i).y < tmp) { answer += priorityQueue.poll(); tmp = arrayList.get(i).y; } priorityQueue.add(arrayList.get(i).x); if (i == arrayList.size() - 1) { answer += priorityQueue.poll(); } } System.out.println(answer); int j=0; } } class Point implements Comparable<Point> { int x; int y; Point(int x, int y) { this.x = x; this.y = y; } @Override public int compareTo(Point o) { return o.y-this.y; } } 답이 잘 나오는데 왜 오답인지 궁금합니다 ㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
12번 암호문제 컴파일 에러가 나는 이유가 뭘까요?
package String; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class _01_12_암호_복습 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); String s = br.readLine().strip(); s = s.replace('#', '1').replace('*', '0'); StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i += 7) { String word = s.substring(i, i + 7); sb.append((char) Integer.parseInt(word, 2)); } System.out.println(sb); br.close(); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
피자 배달거리 DFS 시간초과 문제
import java.util.ArrayList; import java.util.Scanner; class Main { static int N, M, dis, min, sum, answer; static ArrayList<Point> houses, pizzas; static Point[] spizzas; static int[] ch; public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); N = sc.nextInt(); M = sc.nextInt(); spizzas = new Point[M]; houses = new ArrayList<>(); pizzas = new ArrayList<>(); answer = Integer.MAX_VALUE; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { int tmp = sc.nextInt(); if (tmp == 1) { houses.add(new Point(i, j)); } if (tmp == 2) { pizzas.add(new Point(i, j)); } } } ch = new int[pizzas.size()]; T.DFS(0); System.out.println(answer); } void DFS(int L) { if (L == M) { sum = 0; for (Point house : houses) { min = Integer.MAX_VALUE; for (Point pizza : spizzas) { dis = Math.abs(house.x - pizza.x) + Math.abs(house.y - pizza.y); if (Math.min(min, dis) == dis) { min = dis; } } sum += min; } if (Math.min(sum, answer) == sum) { answer = sum; } } else { for (int i = 0; i < pizzas.size(); i++) { if (ch[i] == 0) { ch[i] = 1; spizzas[L] = pizzas.get(i); DFS(L + 1); ch[i] = 0; } } } } } class Point { int x; int y; public Point(int x, int y) { this.x = x; this.y = y; } }선생님의 풀이와는 다르게 체크드리스트를 만들어 DFS구현을 하였고 답이 잘 나오긴 하는데 채점사이트에서는 시간초과 문제가 나오네요 ㅜㅜ 혹시 문제가 어떤 것인지 알 수 있을까요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
x.length()-1 질문
안녕하세요! 단어 뒤집기에서 x.length()-1 코드중 x의 길이를 사용하는게 이해가 안됩니다. ㅠㅜ str.length()-1을 사용하는게 아니라 x.length()-1를 사용하는 이유가 뭔가요?for(String x : str) { char[] s = x.toCharArray(); int lt=0, rt=x.length()-1; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간 초과
import java.util.*; class Main{ public int[] solution(int N, List<Integer> A, int M, List<Integer> B) { ArrayList<Integer> answer = new ArrayList<>(); Collections.sort(A); Collections.sort(B); for(int key : B) { if(A.contains(key)) { answer.add(key); } } return answer.stream() .mapToInt(Integer::intValue) .toArray(); } public static void main(String args[]) { Main T = new Main(); Scanner sc = new Scanner(System.in); int N = sc.nextInt(); List<Integer> A = new ArrayList<>(); for(int i = 0; i < N; i++) { A.add(sc.nextInt()); } int M = sc.nextInt(); List<Integer> B = new ArrayList<>(); for(int i = 0; i< M; i++) { B.add(sc.nextInt()); } for(int answer : T.solution(N, A, M, B)) { System.out.print(answer + " "); } } }안녕하세요. 이와 같이 코드를 짰는데, 케이스 4에서 시간초과가 나왔습니다. 이에 대해 저는 다음과 같은 가설을 세워봤습니다.Collections 클래스의 sort를 하는 시간이 Arrays 클래스의 sort 시간 보다 오래 걸린다.입력되는 배열을 ArrayList로 한 것이 배열보다 더 메모리를 많이 사용하므로 시간이 더 오래 걸린다.아직 자료구조에 대한 이해와 시간 복잡도에 대해서 기본이 부족한 것 같습니다..! 감사합니다.
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
split 사용 강의 중 질문_return 값에 answer가 안담깁니다.
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 를 받았을때 값이 아무 것도 안나옵니다 (공백출력) 원인을 못찾고 헤매고 있습니다. ㅠㅜ 조언 부탁드립니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
지역변수 질문이요
안녕하세요 강의 잘 듣고있습니다혹시 int cnt=0을 for(i)반복문 밑에 선언한것은 j,k 반복문이 끝나고 cnt를 0으로 초기화 하실려고 저 위치에 선언한게 맞으실까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11. 임시반장 정하기 질문
- 우선 채점사이트에서 정답처리 받은 코드이고요, 핵심부분입니다.int answer = 0, max=0 ; int cnt=0; for(int i=1; i<=n; i++){ // i학생이 cnt=0; for(int j=1; j<=n; j++){ //j학생들을 탐색하면서 for(int k=1; k<=5; k++){ //학년 돌면서 탐색 if(arr[i][k] == arr[j][k]){ cnt++; break; // 한번이라도 같은반인게 조건이기 때문에 } } if(max < cnt){ max = cnt; answer=i; } } }- 이 코드의 조건문 부분 코드if(arr[i][k] == arr[j][k]){이것을, 학생들을 탐색할때 자기자신을 탐색하지 않기 위해 아래와 같이 조건문을 바꾸었더니 오답처리 되었습니다. 오답처리 된 이유가 궁금합니다.if(i != j && arr[i][k] == arr[j][k]){ *참고용 전체 코드import java.util.*; public class Main { public int solution(int n, int [][] arr){ int answer = 0, max=0 ; int cnt=0; for(int i=1; i<=n; i++){ // i학생이 cnt=0; for(int j=1; j<=n; j++){ //j학생들을 탐색하면서 for(int k=1; k<=5; k++){ //학년 돌면서 탐색 if( i != j && arr[i][k] == arr[j][k]){ cnt++; break; // 한번이라도 같은반인게 조건이기 때문에 } } if(max < cnt){ max = cnt; answer=i; } } } return answer; } public static void main(String[] args) { Main M = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int [][] arr = new int[n+1][6]; for(int i=1;i<=n;i++){ for(int j=1;j<=5;j++){ arr[i][j] = kb.nextInt(); } } System.out.print(M.solution(n,arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
매출액의 종류 문제에서 시간초과 에러가 뜨는데요...
public static void main(String[] args){ Scanner in = new Scanner(System.in); int a = in.nextInt(); int b = in.nextInt(); int[] arr = new int[a]; for(int i = 0 ; i < a ; i++) { arr[i] = in.nextInt(); } String answer = ""; HashMap<Integer, Integer> map = new HashMap<>(); for(int i = 0 ; i <= (a - b) ; i++) { map.clear(); for(int j = i ; j < (i+b) ; j++) { map.put(arr[j], map.getOrDefault(arr[j], 0) + 1); } answer = answer + map.size() + " "; } System.out.println(answer); }저는 이렇게 짰는데요...아무리 봐도 강의에서 알려주신 것과 크게 차이를 못 느끼겠는데... 혹시 어떤 부분에서 문제가 되는걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
바둑이 승차 - bfs 시간초과
안녕하세요, 바둑이 승차를 bfs로 풀어보다가, 시간 초과 에러가 떠서 여쭤봅니다.!아래는 제 코드입니다.import java.util.*; public class Main { static class Node { int sum; int level; public Node(int sum, int level) { this.sum = sum; this.level = level; } } static int n; static int w; static int[] puppies; static int result; public int bfs() { Queue<Integer> Q = new LinkedList<>(); Q.offer(puppies[0]); Q.offer(0); int L = 0; while(!Q.isEmpty()) { int len = Q.size(); if(L==n) break; for(int i=0 ; i<len; i++) { int tmp = Q.poll(); if(tmp>w) continue; result = Math.max(tmp, result); if(L<n-1 ) { int next = puppies[L+1]; Q.offer(tmp + next); Q.offer(tmp); } } L++; } return result; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); w = sc.nextInt(); n = sc.nextInt(); puppies = new int[n]; for(int i=0; i<n; i++) { puppies[i] = sc.nextInt(); } T.bfs(); System.out.println(result); } } bfs, dfs 모두 모든 노드를 방문한다는 점에서, 같을 것 같은데, 왜 bfs는 시간 초과가 날까요.?제가 break을 놓친 부분이 있을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
1-1 왜 런타임 에러가 나오는지 모르겠습니다
package org.example; import java.util.Scanner; import static java.lang.Character.*; public class Main { public static int solution(String str, String ch){ int result = 0; for(int i = 0; i < str.length(); i++){ if(toLowerCase(str.charAt(i)) == toLowerCase(ch.charAt(0))){ result++; } } return result; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.next(); String ch = scanner.next(); System.out.println(solution(str, ch)); } }IDE에서는 정상적으로 실행되는데채점사이트에서는 런타임에러가 나네요 ㅠㅠ이유를 모르겠습니다
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요
for(int i = 0;i<s.length();i++){ if(s.charAt(i)>='a' && s.charAt(i)<='z'){ s.charAt(i) = s.charAt(i) - 32; System.out.print(s.charAt(i)); } else{ s.charAt(i) = s.charAt(i) +32; System.out.print(s.charAt(i)); } } 안녕하세요 위와 같이 풀었을때s.charAt(i) = s.charAt(i) - 32;이 코드에서 s.charAt(i) 인덱스에 직접 문자값을 저장할 수 없는 이유는 무엇인가요?? 리터럴이라서 그런건가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11. 임시반장 정하기 런타임 오류 피드백 부탁드립니다
비슷한 질문을 확인했는데, 제 경우에는 인덱스 범위를 맞게 설정한거 같고 인풋 아웃풋 결과도 문제가 없는거 같은데 채점 사이트에서만 런타임 오류라고 뜨네요 ㅠㅠ 왜그런지 봐주세요. 1학년부터 5학년까지라고 하셨지만 저는 5*5배열을 만들어서 해결하고 싶었습니다.아래 코드에서 어떻게 고치면 될까요?? import java.util.*; public class Main { public int solution(int n,int[][] arr){ int answer=0, max=Integer.MIN_VALUE; for(int i=0;i<n;i++){ int cnt=0; for(int j=0;j<n;j++) { for(int k =0;k<5;k++) { if(arr[i][k] == arr[j][k]){ cnt++; break; } } } if(max<cnt){ max=cnt; answer= i+1; } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int [][] arr = new int[n][n]; for(int i=0; i<n; i++) { for (int j = 0; j < 5; j++) { arr[i][j] = kb.nextInt(); } } System.out.print(T.solution(n,arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
제가 공부한 내용을 블로그에 기록하고 싶습니다.
안녕하세요 선생님. 제가 요즘 공부하는 것을 블로그(velog)에 기록하고 있는데 블로그 공유 관련 글을 찾아보니까 문제를 통으로 올리는 건 불가능하지만 소스코드를 올리는 건 괜찮다고 답변해 주신것을 보았습니다. 저 또한 문제를 올리지는 않고 문제 대충 설명한 후에 소스코드의 대한 해석을 기록하고자 하는데 괜찮을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
공주 구하기 문제 풀이 시간 복잡도 질문
안녕하세요 제가 푼 코드와 강의의 풀이가 차이가 있어서 질문 드립니다. 저는 아래와 같이 문제를 풀어 봤는데요. 강의와 제 풀이의 시간 복잡도가 어떻게 되는건지 궁금합니다. 제 풀이는 while문이 하나 있으니 O(n)으로 표시하면 되는 것일까요? 강의 풀이는 while문 안에 for문이 있는데 그럼 O(n^2) 인건가요? 아니면 K를 상수로 보고 O(n) 이라고 생각하면 되는 걸까요.. public int solution(int n, int k) { int answer = 0; Queue<Integer> queue = new LinkedList<>(); for (int i = 1; i <= n; i++) { queue.add(i); } int cnt = 1; while (queue.size() > 0) { if (cnt == k) { answer = queue.poll(); cnt = 1; } else { queue.add(queue.poll()); cnt++; } } return answer; } 두 코드 중 어떤 것이 더 효율적인 코드인지 궁금합니다. 실행 시간을 비교해서 더 짧게 나오는 것이 효율적인 코드라고 봐도 되는 걸까요?