월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
dis 배열 없이 풀어봤습니다
import java.io.*; import java.util.*; class Point { int x; int y; Point(int x, int y) { this.x = x; this.y = y; } } public class Main { static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, -1, 0, 1}; static int[][] board = new int[8][8]; public static void BFS(int x, int y) { int L = 0; Queue<Point> Q = new LinkedList<>(); Q.offer(new Point(x,y)); while(!Q.isEmpty()) { int len = Q.size(); for(int i=0; i<len; i++) { Point tmp = Q.poll(); for(int j=0; j<4; j++) { int nx = tmp.x + dx[j]; int ny = tmp.y + dy[j]; if (nx >= 1 && nx <= 7 && ny >= 1 && ny <= 7 && board[nx][ny] == 0) { board[nx][ny] = L+1; Q.offer(new Point(nx, ny)); } } } L++; } } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); for(int i=1; i<=7; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for(int j=1; j<=7; j++) { board[i][j] = Integer.parseInt(st.nextToken()); } } BFS(1,1); if(board[7][7] == 0) System.out.println(-1); else System.out.println(board[7][7]); } }dis 배열없이 레벨과 board 배열만으로 풀었는데, 채점 결과 맞긴했는데 이렇게 짜도 될까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
tmp.legnth() > 0 공집합일때 출력 안하기 위해..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. tmp.legnth가 0일 경우 공집합이라서0보다 클 경우에만 tmp를 출력하는걸로 하셨는데,이 코드가 잘 이해가 안됩니다. 우선 tmp.legnth가 0일 경우 공집합이라는 것도 잘 모르겠어요.. 혹시 조금 더 쉽게 설명해주실 수 있을까요 ㅠㅠ if (tmp.length()> 0) System.out.println(tmp);
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
단어뒤집기 런타임에러
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요! 단어뒤집기에서, 제 코드 왜 runtime error가 나는지 보이지가 않아서 질문드립니다..ㅜimport java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); for (int i = 0; i < N; i++) { String str = in.next(); String answer = ""; for (int j = str.length() - 1; j >= 0; j--) { answer += str.charAt(j); } System.out.println(answer); } } } string이 계속 생성돼서 그런걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Java 알고리즘 문제 풀이 02-08 컴파일 에러 문의
안녕하세요!IntelliJ로 실행해봤을 때는 이상 없는데채점사이트로 실행 시 컴파일 에러로 잡혀서 어느 부분이 문제인지 알려주시면 정말 감사합니다! import java.util.*; class Main{ public int[] solution(int n, int[] arr) { HashMap<Integer, Integer> rankMap = new HashMap<>(); ArrayList<Integer> sortList = new ArrayList<>(){{ for(int i = 0; i < n; i++) add(arr[i]); }}; int[] answer = new int[n]; sortList.sort(Collections.reverseOrder()); for (int i = 0; i < n; i++) { if (i == 0) rankMap.put(sortList.get(i), 1); else if (sortList.get(i-1).equals(sortList.get(i))) continue; else rankMap.put(sortList.get(i), i+1); } for (int i = 0; i < n; i++){ answer[i] = rankMap.get(arr[i]); } return answer; } public static void main(String[] args) { // 실행 시간 측정 // long beforeTime = System.currentTimeMillis(); // 측정 코드 시작 Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for(int i = 0; i < n; i++) arr[i] = sc.nextInt(); for(int i : T.solution(n, arr)) System.out.print(i + " "); sc.close(); // 측정 코드 끝 // long afterTime = System.currentTimeMillis(); // long diffTime = afterTime-beforeTime; // System.out.println("실행시간(ms) " + diffTime); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
3시간 고민해서 풀었습니다.
매번 문제 풀때마다 너무 어렵게 문제를 접근해서 푸는거같아서 질문 남깁니다...항상 문제를 풀때 저도 알아보기 어렵게 코드를 짜는거같은데 제가 짠 코드도 다시 설명하라하면 못하겠는데 이럴땐 어떻게 하는게 좋나요??package algorithm; import java.util.ArrayList; import java.util.Scanner; public class Ascii_12 { public String solution(int n, String str) { int len = n * 7; String resultStr = ""; if(str.length() != len) { System.out.println("문자의 개수가 입력 조건과 상이합니다."); }else { str = str.replace('#', '1'); str = str.replace('*', '0'); } for(int i = 0; i < n; i++) { String newStr = str.substring(i*7, (i+1)*7); int result = 0; // System.out.println(newStr); for(int j = newStr.length()-1; j>=0; j--) { if(newStr.charAt(j) == '1') { int jAbs = Math.abs(j-6); // System.out.println(jAbs); result += (int)(Math.pow(2, jAbs)); } } // System.out.println((char)result); resultStr += (char)result; } return resultStr; } public static void main(String[] args) { Ascii_12 t = new Ascii_12(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String str = sc.next(); System.out.println(t.solution(n, str)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이번 문제 접근방식 질문드립니다.
저도 배열로 접근했고 cnt와 answer 2가지 변수를 선언한 것까지는 동일했지만...solution은 전혀 달랐습니다. 현재 문제의 정답여부와 이전 문제의 정답여부를 비교하면...총 4가지 케이스가 있다는 걸 알게 되어..1 1 현재 문제도 맞고 이전 문제도 맞은 경우1 0 현재 문제가 맞고 이전 문제는 틀린 경우0 1 현재 문제는 틀리고 이전 문제는 맞은 경우0 0 현재 문제도 틀리고 이전 문제도 틀린 경우로..코딩하였더니 소스도 길어지고..답도 틀렸습니다.... 명쾌한 영상을 보고 나니왜 단순하게 선생님처럼문제가 정답일 때만 코드를 작동하도록생각하지 못 했을 가요...? 사고방식에 문제가 있는 건 아닌지..문제를 파악하는 노하우가 있을 가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
뮤직비디오
안녕하세요 선생님! 다름이 아니라 저는 최소용량크기를 곡들의 분을 더한 값 M으로 나눈걸로 시작했는데 안되는 걸까요? 채점사이트에서는 성공했는데 혹시 그렇게 시작하면 안되는 이유가 있을지 궁금해서요!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
중복문자 제거 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.import java.util.Arrays;import java.util.List;import java.util.Scanner;public class Main { public String solution(String str) { String[] arr = str.split(""); List<String> list = Arrays.asList(arr); List<String> resultList = list.stream().distinct().toList(); StringBuilder answer = new StringBuilder(); for (String s : resultList) { answer.append(s); } return answer.toString(); } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); String str = kb.nextLine(); System.out.println(T.solution(str)); }} 위 코드가 저의 개발환경에서는 돌아가는데 채점서비스에서는 컴파일에러가 뜹니다ㅜ원인을 잘 모르겠습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
레벨로 풀기 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강사님께서 강의 도중 2차원 문제일 경우 레벨로 푸는게 힘들다고 하신 이유가 궁금합니다. 다른 분들이 숙제검사 맡으신 것처럼 레벨로 푸는 것 역시 배열을 새로 만들어서 값을 저장하기때문에 2차원 문제도 레벨을 통해 거리를 구하고 2차원 배열에 저장하는 방법으로 풀리지 않나요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
가장 높은 탑 쌓기
코드가 왜 오답인지 잘 모르겠습니다ㅠㅠimport java.util.ArrayList; import java.util.Collections; import java.util.Scanner; class Block implements Comparable<Block> { int a; int h; int w; public Block(int a, int h, int w) { this.a = a; this.h = h; this.w = w; } @Override public int compareTo(Block o) { return o.a - this.a; } } class Main { static int[] dy; static int[] dis; public int solution(ArrayList<Block> arr, int n) { int answer = 0; Collections.sort(arr); dy[0] = 1; dis[0] = arr.get(0).h; for (int i = 1; i < n; i++) { int max = 0; int max_h = 0; for (int j = i - 1; j >= 0; j--) { if (arr.get(j).w > arr.get(i).w && dy[j] >= max && dis[j] > max_h) { max = dy[j]; max_h = dis[j]; } } dy[i] = max + 1; dis[i] = max_h + arr.get(i).h; answer = Math.max(answer, dis[i]); } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); ArrayList<Block> arr = new ArrayList<Block>(); dy = new int[n]; dis = new int[n]; for (int i = 0; i < n; i++) { int a = kb.nextInt(); int h = kb.nextInt(); int w = kb.nextInt(); arr.add(new Block(a, h ,w)); } System.out.println(T.solution(arr, n)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
임시 반장 - break를 하는 이유
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요~제가 문제의 요지를 잘 파악 못해서 그런거 같은데 break를 하는 이유가 뭔지 잘 이해가 안됩니다.7:50부분저같은 경우는 2학년(k)때 3번학생(j)과 4번학생(i)이 같고3학년(k)때도 3번학생(j)과 4번학생(i)이 같은 경우를 카운팅 했었는데요break를 해야 한다는걸 문제의 어떤 줄을 보고 바로 깨달을 수 있을까요? 같았던 횟수를 구하는게 아니고, 같았던 학생의 명수를 구하는거라서 한번 같았으면 break하는거라고 이해하면 되는게 맞을까요? 다시 말해서, i와 j가 고정된 상태에서 k를 순회하는 중에 한번이라도 같으면 break를 하면 되는건가요? -- 그리고 추가 질문으로if ( i != j )를 안해도 된다고 하셨는데, 이 조건문을 추가함으로써 순회하는 과정을 일부 제외해서 성능이 더 좋아지지 않을까 생각해보는데 이런 생각도 맞는지 궁금합니다! 이미 for문의 조건문으로 설정된 부분이라 if문을 걸어도 시간복잡도에 영향은 없나요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
임시반장 오답케이스가 되는 이유를 잘 모르겠습니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 듣기전에 풀었는데, 3개는 맞는데, 정확도가 떨어지는 코드라고 나와서 왜 해당 코드가 오답케이스가 있는지 잘 모르겠습니다 ㅠㅠ혹시 어디가 잘못된건지 여쭤봐도 될까요?package Array.임시반장_정하기; import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main { public int solution(int n, int[][] arr) { int answer = 0; Set<Integer> duplicates = new HashSet<>(); for (int i = 0; i < 5; i++) { for (int j = 0; j < n; j++) { int duplicate = arr[j][i]; for (int k = 0; k < n; k++) { if (duplicate == arr[k][i] && j != k) { duplicates.add(arr[k][i]); } } } } if (duplicates.isEmpty()) return answer+1; for (int i = 0; i < n; i++) { int count = 0; for (int j = 0; j < 5; j++) { for (int x:duplicates) { if (x == arr[i][j]) count ++; } if (count == duplicates.size()) { answer = i; break; } } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n][5]; for (int i = 0; i < n ; i++) { for (int j = 0; j < 5; j++) { arr[i][j] = sc.nextInt(); } } System.out.println(T.solution(n,arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
봉우리 문제 질문있습니다. 강의와 다르게 풀어서 맞았는데 확장성? 이나 활용도에서 문제가 발생하는지 궁금합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 강의듣기 전에 풀이해본 내용인데요! 관련해서 질문이 있습니다! 아래 코드 처럼 풀었는데,경계값을 해주는걸 solution 내부 함수에서 해주는게 아니고, 입력값에서 배열 사이즈 조정하는걸로 풀면 다른 활용문제에서 어떤 문제가 발생할지 궁금합니다!저는 행, 열에 각각 +1, -1 해주면서 찾았는데, 이렇게 하면 강의에서 말씀하신 대각선 값 비교할때 문제가 있을까요?대각선의 경우 분기처리할때 각행과 열에 (-1, +1 ) (-1, -1) (+1, +1), (+1, -1)추가해서 체크해주는게 다른 활용 문제에서 어떤 문제가 발생할지 궁금합니다! 문제는 없지만 비효율적이고 가독성이 안좋아서 그런걸까요?3중 포문으로 하면 시간복잡도가 O(n^3)가 되서 성능이 떨어지는거 아닌지 궁금합니다. 아래 코드로 하면 O(n^2)이라서 더 빠를 것 같았는데 강의로 알려주신 코드보다 12ms 더 느리더라구요!import java.util.Scanner; public class Main { public int solution(int n, int[][] arr){ int answer = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { int tmp = arr[i][j]; // 첫째줄 조건은 열 체크. 둘째줄 조건은 행 체크 if (tmp > arr[i][j+1] && tmp > arr[i][j-1] && tmp > arr[i+1][j] && tmp > arr[i-1][j]) { answer ++; } } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n+2][n+2]; for (int i = 1; i <= n ; i++) { for (int j = 1; j <= n; j++) { arr[i][j] = sc.nextInt(); } } System.out.println(T.solution(n,arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
구간을 나누어 조건부로 처리해보았습니다 크크
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String word = sc.next(); char chr = sc.next().charAt(0); System.out.println(solution(word, chr)); } public static String solution(String word, char chr) { String answer = ""; List<Integer> list = new ArrayList<>(); for (int i = 0; i < word.length(); i++) { if (word.charAt(i) == chr) list.add(i); } int index = 0; for (int i = 0; i < word.length(); i++) { if(i == list.get(index+1) && i!= list.get(list.size()-1)) index++; if(i < list.get(0)) answer += list.get(0)-i; else if(i == list.get(index)) answer += 0; else if(i > list.get(list.size()-1)) answer += i - list.get(list.size()-1); else answer += Math.min((i-list.get(index)), (list.get(index+1)-i)); answer += " "; } return answer; } }
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
안녕하세요 ㅠㅠ 질문 있습니다
안녕하세요~ 이제 코테 처음 시작하는 코린이인데요..궁금한 점 2가지가 있어서 답변해줬으면 합니다 ㅠㅠ1. 문제를 푸는 과정 중에 본인이 짠 코드 퀄리티가 많이 떨어지더라도 그 코드가 정답이 되면 그래도 괜찮은지? (물론 답안과 비교해가며 피드백은 필수겠지만요)2. 문제를 풀어주신 답안에서 쓰인 여러 메소드들은 외워두는게 맞는지? 아니면 검색을 이용해서 사용할 줄만 아는 정도인지?에를 들어 문제 1-01에서 str.toUpperCase(), Character.toUpperCase(t), str.toCharArray() 이런 메소드들을 무조건 손에 익을때까지 외워서 사용할줄 알아야 하는지??정 외우기가 힘들면 어떻게 코드가 돌아가는지.. 사용방법만 알고 이러한 문제상황에 맞는 활용 메소드들을 검색(구글링)을 통해 찾을 줄 알아야 하는 역량이 필요한지 궁금합니다 ㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
냅색알고리즘(최대점수 구하기)질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 입력값 n과m의 최대가 (50*300 = 15000)이라서 브루트포스 (15000 * 15000 = 1억초과)를 사용하지 못하는 건가요???
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
아래와 같이 풀었습니다! 리뷰 부탁드립니다...!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.아래와 같이 풀었는데 이런식으로 풀어도 될까요...? 정답이긴하더라구요import java.util.*; public class Main{ public static void main(String[] args){ Main T = new Main(); Scanner in = new Scanner(System.in); String word = in.next(); String target = in.next(); System.out.println(T.solution(word, target));; } public String solution(String word, String target){ String answer = ""; char[] charArray = word.toCharArray(); List<Integer> targetAtList = new ArrayList<>(); for(int i = 0; i < charArray.length; i++){ if(Character.toString(charArray[i]).equals(target)){ targetAtList.add(i); } } for(int i = 0; i < charArray.length; i++){ List<Integer> valueList = new ArrayList<>(); for(int j : targetAtList){ valueList.add(Math.abs(i-j)); } int min = Collections.min(valueList); answer += Integer.toString(min); if(i != charArray.length-1) answer += " "; } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
섹션 4-1 getOrDefault 메서드가 undefined에러가 떠요
구글링해보니 자바8이상이면 메서드 쓸 수 있다는데 저는 자바 11버전이거든요 왜 이럴까요ㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
1-10 가장 짧은 문자거리 문제에서 어디가 틀린걸까요?
강사님이 설명해주신 방법이랑 조금 다르게 풀었는데, 계속 오답이 나와서 문의드립니다.어느 부분이 틀린 건지 못찾겠습니다도와주세요..import java.util.Scanner; public class Main { public int[] solution(String str, char c){ int tmp=0; int[] answer = new int[str.length()]; for(int i=0; i<str.length(); i++) { if(str.charAt(i)!=c) { tmp++; } else { tmp=0; } answer[i] = tmp; } for(int i=0; i<answer.length-1; i++) { if(answer[i]!=0 && answer[i+1]==0) { int arrayTmp = answer[i]; for(int j=0 ; j<arrayTmp/2 ; j++) { answer[i-j] = 1 + j; } } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner scanner = new Scanner(System.in); String str = scanner.next(); char c =scanner.next().charAt(0); for(int a : T.solution(str, c)) { System.out.print(a+ " "); } } }
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
격자판 최대합 테스트 케이스 5번 통과가 안되요
import java.util.Scanner; public class GetMaxSumOfGridPlate { public static void main(String[] args) { Scanner in = new Scanner(System.in); int arrLen = in.nextInt(); int[][] arr = new int[arrLen][arrLen]; for(int i = 0; i < arrLen; i++) { for(int j = 0; j < arrLen; j++) { arr[i][j] = in.nextInt(); } } System.out.println(getMaxSumOfGridPlate(arr)); } static int getMaxSumOfGridPlate(int[][] grid) { int max = 0; int diagonal1 = 0; int diagonal2 = 0; for(int i = 0; i < grid.length; i++) { int sum1 = 0; int sum2 = 0; for(int j = 0; j < grid.length; j++) { sum1 += grid[i][j]; sum2 = grid[j][i]; if(i == j) { diagonal1 += grid[i][j]; } } diagonal2 += grid[i][grid.length - i -1]; int sum = Math.max(sum1, sum2); max = max < sum ? sum : max; } int diagonal = Math.max(diagonal1, diagonal2); return max > diagonal ? max : diagonal; } } 제가 풀었는데 선생님께서 풀어주신 내용과 아이디어는 비슷하다고 생각했습니다다만 5번 테스트케이스에서 통과가 안되어서 코드에 오류가 있는거 같은데문제를 찾기가 너무 어렵습니다.어느 부분이 틀렸을까요? ㅠㅠ