월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2-10 봉우리
안녕하세요 선생님2차원 배열 복습하는데 그 마지막 부분 쯤에 범위 설정하는 if문이 나오잖아요먼저 범위를 설정해 주시고 그리고 나서 배열의 값을 비교해 주시는 부분을nx >= 0 && nx < n && ny >= 0 && ny < n 는 격자판의 범위이며 이 범위 내에 속한 상태 에서 arr[nx][ny] >= arr[i][j] 이러한 결과가 나온다면 flag = false; 로 바꿔주고 break; 로 반복문 다시 확인스스로 잘 이해해 보려고 이렇게 정리해 봤는데 이게 맞나요?그 범위 내에서 속한 상태에서 비교를 한다고 생각하고 정리한 게 맞는 건지 궁금합니다 감사합니다!! 그리고 새해 복 많이 받으세요!!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
마구간 질문드립니다
안녕하세요 선생님, 마구간 문제 관련하여 잘 이해가 되지 않는 부분이 있어 이렇게 글 남겨드립니다. count 함수를 통하여 말의 개수를 셀 때, 좌표의 가장 왼쪽, 즉 좌표 배열을 arr이라고 하면,선생님께서는 count 함수에서 말의 개수를 세실 때, arr[0]을 ep로 두어 for문으로 문제를 해결하셨는데요, 이 부분이 직관적으로 확 와닿지 않습니다 ㅠㅠ.. 마땅한 반례를 찾지는 못하였으나, arr[0] 이외의 부분에서 답이 있을 수 있으니, ep를 이중 for문으로 돌려 찾아야 하는 것이 아닌가 생각이 드는데, 그렇게 하지 않으신 이유에 대하여 질문 남겨드립니다 감사합니다 선생님!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2-9. 격자판 최대합
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main{ public int solution(int n, int[][] arr) { int answer = Integer.MIN_VALUE; // 최대값을 찾아야 하므로 MIN_VALUE; 사용 int sum1; // 행의 합 int sum2; // 열의 합 for (int i = 0; i < n; i++) { sum1 = sum2 = 0; // 0행 0열 부터 구하기 위해 초기화 for (int j = 0; j < n; j++) { sum1 += arr[i][j]; sum2 += arr[j][i]; } // 행과 열의 최댓값 answer = Math.max(answer, sum1); // 각 행과 각 열의 계산 후 answer = Math.max(answer, sum2); // 더 큰 값이 answer로 들어감 } sum1 = sum2 = 0; for (int i = 0; i < n; i++) { sum1 += arr[i][i]; sum2 += arr[i][n - i - 1]; } answer = Math.max(answer, sum1); answer = Math.max(answer, sum2); return answer; } public static void main(String[] args) throws NumberFormatException, IOException { MainT = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); StringTokenizer st; int[][] arr = new int[n][n]; for (int i = 0; i < n; i++) { st = new StringTokenizer(br.readLine(), " "); for (int j = 0; j < n; j++) { arr[i][j] = Integer.parseInt(st.nextToken()); } } System.out.println(T.solution(n, arr)); } }안녕하세요 선생님 2.9에서 Main 메소드 부분에서 저는 BufferedReader를 사용했는데요 선생님께선 이중 for문을 사용하여 그 안에 scanner Int 를 사용하셨는데for(int i = 0; i < n; i++) { for(int j = 0; j <n; j++){ arr[i][j] = kb.nextInt(); } }이 것과 bufferedReader의 차이점은 nextInt()는 입력 즉시 배열의 인덱스에 넣어주는 것이고BufferedReader는 StringTokenizer를 사용했기 때문에 한 번에 입력 받고 한 번에 넣어주기 때문에 서로의 반복문 사용법이 다르다고 이해했는데 제가 이해한게 맞을까요? 이상한 질문드려 죄송해요 ㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
피자배달거리(DFS) 시간초과 질문 있습니다.
안녕하세요. 좋은 강의 만들어주셔서 덕분에 알고리즘 공부를 수월하게 하고 있습니다. 다름이 아니라, 문제 풀이하는 방법은 강의와 유사하게 하였습니다. 저는 DFS를 활용할 때 선택된 피자가게의 index가 아닌, 객체 자체를 selected 배열에 넣는 방식으로 진행하였습니다. 예제와 똑같은 출력값이 나왔으나, 시간 초과라고 하여서 강의와 아예 똑같은 코드를 쳐봐도 시간초과라고 나옵니다. 아래에 첨부한 코드는 초반에 제가 입력한 코드인데, 어느 부분에서 시간초과가 나는 건지 알려주실 수 있을까요? class Dis{ public int x, y; public Dis(int x, int y){ this.x = x; this.y = y; } } public class Code27 { public static int n, m; public static int min = Integer.MAX_VALUE; public static ArrayList<Dis> house, pizza; public static Dis[] selected; public static void main(String[] args){ Scanner sc = new Scanner(System.in); n = sc.nextInt(); m = sc.nextInt(); house = new ArrayList<>(); pizza = new ArrayList<>(); selected = new Dis[m]; for(int i=0; i<n; i++){ for(int j=0; j<n; j++){ int location = sc.nextInt(); if(location==1) house.add(new Dis(i, j)); else if(location==2) pizza.add(new Dis(i, j)); } } DFS(0,0); System.out.println(min); } public static void DFS(int L, int start){ if(L==m){ min = Math.min(min, distCalc(selected)); }else{ for(int i=start; i<pizza.size(); i++){ selected[L] = pizza.get(i); DFS(L+1, start+1); } } } public static int distCalc(Dis[] selected){ int sum = 0; for(Dis h : house){ int dis = Integer.MAX_VALUE; for(int j=0; j<selected.length; j++){ dis = Math.min(dis,(Math.abs(h.x - selected[j].x) + Math.abs(h.y - selected[j].y))); } sum += dis; } return sum; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이렇게 풀면 오답이 되는 이유를 알고 싶습니다!
import java.util.HashMap; import java.util.Objects; import java.util.Scanner; public class Main { private String solution(String s1, String s2) { String answer = " "; HashMap<Character, Integer> map1 = new HashMap<>(); HashMap<Character, Integer> map2 = new HashMap<>(); for (char x : s1.toCharArray()) { map1.put(x, map1.getOrDefault(x, 0)+1); } for (char x : s2.toCharArray()) { map2.put(x, map2.getOrDefault(x, 0)+1); } for (char x : map1.keySet()) { if (Objects.equals(map1.get(x), map2.get(x))) { answer = "YES"; } else { answer = "NO"; } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); String s1 = sc.next(); String s2 = sc.next(); System.out.println(T.solution(s1, s2)); } }이렇게 풀면 예시 입출력을 넣어봤을 때 YES, NO는 잘 나오는데 채점을 받아보면 오답이라고 나오더라구요!어느 부분에서 제가 잘못 생각한 것인지 궁금합니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11. 문자열 압축 질문
public String solution(String str) { String answer = ""; str = str +" "; int count = 1; for (int i = 0; i < str.length() - 1; i++) { if (str.charAt(i) == str.charAt(i + 1)) { count++; } else { answer += str.charAt(i); if(count > 1) { answer+=String.valueOf(count); count = 1; } } } return answer; } 안녕하세요 선생님 강의 잘 듣고 있는 입문자 수준의 학생입니다이번 강의에서 문자열 Str에 " ", 빈 공간을 주어서 문자열의 마지막 문자(ex. KKHSSSSSSSE의 E)와 빈 공간을 비교하여 마지막 문자를 answer에 담아주는 것으로 이해하였는데 제가 올바르게 이해한 게 맞나요? 그리고 str.length() 에 -1 을 해주셨는데 그게 빈 공간과 없는 공간이 비교되는 걸 막기 위함이 맞나요? 원래 str.length()를 해줬다면 빈 공간(" ")까지로 length()가 잡혀 빈 공간과 없는 공간이 비교되기 때문인 것 맞나요?좋은 강의 만들어주셔서 감사합니다!!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
메인메소드 기본양식
메인메소드 기본양식은 어디서 받을 수 있나요?? public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); String str=kb.next(); System.out.print(T.solution(str)); }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코딩테스트 사이트 링크가 안보입니다. 이제는 제공하지 않는걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코딩테스트 사이트 링크가 안보입니다. 이제는 제공하지 않는걸까요
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다른 분들의 질문을 보면 Math.sqrt, num / 2 하는 것을 볼 수 있는데...
저렇게 하시는 이유가 뭔지 궁금합니다 ㅠㅠ구글링해보았을 때도 비슷한 케이스를 볼 수 있었는데 정확한 이유를 잘 모르겠습니다 ㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다익스트라와 크루스칼 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 최단거리를 구하라는 문제와, 최소거리를 구하라는 문제는 동일한 문제로 보고, 다익스트라나 크루스칼 둘 중 하나로 사용해도 상관없는건가요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
테스트 케이스 실패
import java.util.Arrays; import java.util.Scanner; public class Main { // 결정알고리즘 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int size = scanner.nextInt(); int number = scanner.nextInt(); int[] list = new int[size]; for (int i = 0; i < size; i++) { list[i] = scanner.nextInt(); } Arrays.sort(list); System.out.println(solution(list, number)); } private static Integer solution(int[] list, int minSize) { int max = Arrays.stream(list).max().getAsInt(); int sum = Arrays.stream(list).sum(); int lt = max; int rt = sum; int answer = 0; while (lt <= rt) { int middle = (lt + rt) / 2; if (count(list, middle) <= minSize) { answer = middle; rt = middle - 1; } else { lt = middle + 1; } } return answer; } private static int count(int[] list, int middle) { int count = 1; // 초기 앨범 갯수 int sum = 0; for (int i : list) { if (sum + i > middle) { // 1장이 담을 수 있는 크기 넘어감 sum = i; count++; } else { sum += i; } } return count; } }코드는 동일한테 테스트케이스에서 실패하는 경우가 있습니다.왜그런걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
pos의 초기화를 바꿔도 다른 문제 없을까요
int pos를 -1이 아니라 n-1로 초기화 해놓으면이중 포문 끝나고 if-else문 없이 하나로 쓸 수 있어서 변경해보았는데 테스트는 통과 됐지만 다른 문제가 있을 수 있나요?import java.util.Scanner; class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int N = in.nextInt(); int M = in.nextInt(); int[] arr= new int[M]; for(int i =0; i<M; i++){ arr[i] = in.nextInt(); } int[] result = new Main().solution(N,arr); for(int i : result){ System.out.print(i+" "); } } public int[] solution(int n, int[] arr) { int[] result = new int[n]; for(int num : arr){ int pos = n-1; for(int i=0; i<n; i++){ if(num == result[i]) pos = i; } for(int j = pos; j>0 ;j--){ result[j] = result[j-1]; } result[0] = num; } return result; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
토마토 문제랑 송아지 문제 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 질문드립니다. 송아지 문제에서는 큐의 사이즈만큼 돌렸는데, 토마토 문제에서는 큐의 사이즈를 입력받아 돌리지 않았는데 이유가 무엇인가요???
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이렇게 풀면 왜 안될까요?
안녕하세요 선생님. 문제를 풀다가 제 코드대로 풀면 왜 안 되는지 궁금해서 질문 드립니다.import java.util.Scanner; public class J2_10 { public static void main(String[] args) { Scanner kb = new Scanner(System.in); int N = kb.nextInt(); int[][] arr = new int[N + 1][N + 1]; int cnt = 0; for (int i = 1; i < N; i++) { for (int j = 1; j < N; j++) { arr[i][j] = kb.nextInt(); } } for (int i = 1; i < N; i++) { for (int j = 1; j < N; j++) { boolean isBig = true; if (arr[i - 1][j] > arr[i][j]) isBig = false; else if (arr[i][j - 1] > arr[i][j]) isBig = false; else if (arr[i + 1][j] > arr[i][j]) isBig = false; else if (arr[i][j + 1] > arr[i][j]) isBig = false; if (isBig) cnt += 1; } } System.out.println(cnt); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
질문
2:11에 ch[i] ==0 소수라는게 이해가안가요..
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문자열 직접 뒤집는 과정에서 질문이 있습니다.
for (String s : str) { char[] chars = s.toCharArray(); int lt = 0; // 캐릭터 배열의 첫번째 인덱스 (왼쪽 끝) int rt = s.length() - 1; // 캐릭터 배열의 마지막 인덱스 (오른쪽 끝) while (lt < rt) { char tmp = chars[lt]; // 임시 캐릭터에 캐릭터 배열 첫번째 원소 집어넣음 chars[lt] = chars[rt]; // 캐릭터 배열 첫번째 원소를 마지막 원소로 교환 chars[rt] = tmp; // 캐릭터 배열 마지막 원소를 첫번째 원소로 교환 lt++; rt--; } String tmp = String.valueOf(chars); // 캐릭터 배열을 String으로 바꿔줌. valueOf 활용 answer.add(tmp); }char tmp = chars[lt] 를 해주게 되면 tmp 에는 별도의 메모리가 할당되어 char[lt]의 값이 저장되게 되고 그래서 chars[rt]의 값을 chars[lt]에 넣어줘도 tmp의 값은 변하지 않는건가요? 그래서 마지막에 chars[rt]의 값을 tmp로 바꿀 수 있는건가요?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
array와 arraylist 장단점
array 문제들을 풀던 중 배열의 크기가 정해져 있을 때는 arraylist를 사용하지 않고 array를 사용하는 것 같던데 크기를 알고 있으면 array를 사용하는 것이 더 효율적인가요?arraylist를 사용하지 않고 array를 사용하였을 때의 장단점이 무엇인지 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
특정 문자 뒤집기 시간 복잡도 질문 드립니다
lt와 rt가 알파벳인 경우에 포인터가 각각 움직이는 코드라면, 제가 최악의 경우라고 생각한 '문자열의 모든 문자가 특수문자인 경우'에는 lt가 rt보다 작을 때까지 계속 한쪽으로만 움직이는 것이므로 시간 복잡도는 O(n)이다 라고 할 수 있을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
격자판 최대합 질문입니다! 이렇게 풀어도되나요?
for문 한번으로 하려고 이렇게 풀었는데정답처리가 나오긴하는데 이렇게 풀어도되나요? 문제가 될만한게 있으면 알려주세요ㅠpublic int solution(int[][] arr) { int max = 0; //대각선 int diagonalR = 0; int diagonalL = 0; for (int i=0; i<arr.length; i++) { //가로행, 세로행 int tr = 0; int le = 0; for(int j = 0; j<arr.length; j++){ tr += arr[i][j]; le += arr[j][i]; if(i == j){ diagonalR += arr[i][j]; } } diagonalL += arr[i][arr.length-1-i]; max = Math.max(max,Math.max(tr, le)); } max = Math.max(max,Math.max(diagonalR, diagonalL)); return max; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
연속부분수열 문제 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 연속부분수열 문제를 dfs로 풀려고 하는데 답이 이상하게 나옵니다. 가지치기로 배열의 숫자들을 선택해서 더할때, 선택안하고 넘어갈 때 2가지로 구분해서 풀었습니다. 아니면 혹시 연속된 수열이라서 dfs로는 못 푸는 건가요?? import java.util.*;public class Main {public static int n,m,answer;public static void main(String[] args) {Scanner sc = new Scanner(System.in); n=sc.nextInt();m=sc.nextInt();int[] num = new int[n]; for(int i=0; i<n; i++)num[i]=sc.nextInt(); dfs(0,0,num);System.out.print(answer);}public static void dfs(int L, int sum, int[] a) {if(sum>m) return;if(L==n) {if(sum==m) answer++;}else {dfs(L+1, sum+a[L], a);dfs(L+1, sum, a);}}}