월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Object 클래스의 clone() 메서드 질문
Object 클래스의 clone() 메서드는 깊은 복사가 아니라 얕은 복사로 알고 있습니다.강의에서의 선생님의 말씀대로 clone() 메서드는 깊은 복사가 맞나요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Scanner next() 메소드 관련 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 1)int n = kb.nextInt();String str = kb.nextLine();==============================2)int n = kb.nextInt();String str = kb.next(); 1)과 2) 차이점이 궁금합니다.예를들어 5 \r\n 3 을 입력하는 경우,1)의 경우에는 콘솔창에엔터를 치면 입력이 안되고, 2)의 경우에는 엔터를 쳐서 따로 입력이 가능한데 왜 그런지 궁금합니다ㅠㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
크레인 인형뽑기(카카오)에 대한 제 풀이 코드에 어떤 문제가 있는지 질문드립니다
다음과 같이 코드를 작성했는데, 테스트케이스 4, 5번이 틀린 것으로 나오네요. 제 코드에 어떤 문제가 있는지 이해가 되지 않아서 질문 드립니다. import java.util.*; import java.io.*; public class Main { public int solution(int[][] board, int[] moves) { int answer = 0; List<Integer> dollList = new ArrayList<>(); Stack<Integer> stack = new Stack<>(); for (int i = 0; i < moves.length; i++) { stack = new Stack<>(); for (int j = 0; j < board.length; j++) { if (board[j][moves[i] - 1] != 0) { stack.push(board[j][moves[i] - 1]); board[j][moves[i] - 1] = 0; break; } } if (stack.isEmpty()) { continue; } dollList.add(stack.pop()); // 바구니에 인형을 넣음 if (dollList.size() >= 2) { for (int j = 0; j < dollList.size() - 1; j++) { if (dollList.get(j) == dollList.get(j + 1)) { dollList.remove(dollList.get(j)); dollList.remove(dollList.get(j)); answer += 2; } } } } return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[][] board = new int[n][n]; for (int i = 0; i < n; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for (int j = 0; j < n; j++) { board[i][j] = Integer.parseInt(st.nextToken()); } } int m = Integer.parseInt(br.readLine()); int[] moves = new int[m]; StringTokenizer st = new StringTokenizer(br.readLine()); for (int i = 0; i < m; i++) { moves[i] = Integer.parseInt(st.nextToken()); } System.out.println(main.solution(board, moves)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11. 임시반장정하기 질문 있습니다.
아래의 3중 for문에 print문을 넣어서 실행해보면 자기자신과 같은 경우도 포함되어 if문에 들어가게 되는데, 그렇게 해서 count에 1이 더해지는 것은 잘못된 로직 아닌가요? 그렇다면 3중 for문 안의 if문 조건에 i != j 를 포함시켜야 맞지 않을까요? public int solution(int n, int[][] arr) { int answer = 0; int max = Integer.MIN_VALUE; for (int i = 1; i <= n; i++) { // i번 학생 int count = 0; for (int j = 1; j <= n; j++) { // j번 학생 for (int k = 1; k <= 5; k++) { // k : 학년 if (arr[i][k] == arr[j][k]) { System.out.println("arr[" + i + "][" + k + "] = " + arr[i][k] + " / arr[" + j + "][" + k + "] = " + arr[j][k]); count++; System.out.println("count : " + count); System.out.println(); break; } } } if (count > max) { max = count; answer = i; } } return answer; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
11. 문자열 압축 알고리즘 질문 있습니다.
인강에서 4분 20초 경에 IndexOutOfBoundsException이 발생하기 때문에 다음 코드의 solution 메소드에서 인자로 받는 s 뒤에 " "(공백문자)를 추가해주어야 한다고 말씀하셨는데,s = s + " ";" "(공백문자)를 추가하는 이유가 IndexOutOfBoundsException 발생이 아니라 마지막 문자 개수를 제대로 카운트하기 위함이 아닌지 질문드립니다. 아니면 IndexOutOfBoundsException가 발생할 수도 있나요? 그 이유는 무엇이고, 해당 테스트케이스는 어떤 것인가요? import java.io.*; import java.util.*; public class Main { public String solution(String s) { String answer = ""; s = s + " "; int count = 1; for (int i = 0; i < s.length() - 1; i++) { if (s.charAt(i) == s.charAt(i + 1)) { count++; } else { answer += s.charAt(i); if (count > 1) { answer += String.valueOf(count); } count = 1; } } return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(main.solution(str)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
최대매출 한번 봐주세요
package TwoPointers_SlidingWindow; import java.util.Scanner; public class _03_03_최대매출 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(), m = sc.nextInt(); int[] costs = new int[n]; for (int i = 0; i < n; i++) { costs[i] = sc.nextInt(); } int maxC = 0; int sum = 0; for (int i = 0; i < n; i++) { if (i < m) { sum += costs[i]; continue; } else { sum -= costs[i-m]; sum += costs[i]; } maxC = Math.max(maxC, sum); } System.out.println(maxC); } }안녕하세요 강의를 듣기 전에 미리 풀었는데요for문이 처음 시작될 때 윈도우의 길이만큼 채우고 시작하려고 if문을 써서 윈도우 값을 채워넣었습니다.윈도우 값이 덜 채워졌을 때는 continue를 써서 최대 비교를 하지 않으려고 했는데요윈도우의 길이를 충족할 때만 최대 비교가 되게하려고 짠 로직인데 오답이 납니다.그런데 continue를 빼면 정답이 되고요.어떤 부분에서 오류가 뜨는 건지 궁급합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
미로 최단거리(BFS) 코드리뷰좀 부탁드립니다.
package DFS_BFS; import java.util.Scanner; public class _08_11 { static int[][] board; static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0, -1, 0, 1}; // 좌, 상, 우, 하 static int answer = Integer.MAX_VALUE; public void BFS(int L, int x, int y) { if (L >= answer) return; if (x == 7 && y == 7) { answer = Math.min(answer, L); } else { for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; // 좌상우하 if (nx >= 1 && nx <= 7 && ny >= 1 && ny <= 7 && board[nx][ny] == 0){ board[nx][ny] = 1; BFS(L + 1, nx, ny); board[nx][ny] = 0; } } } } public static void main(String[] args) { _08_11 T = new _08_11(); Scanner sc = new Scanner(System.in); board = new int[8][8]; for (int i = 1; i <= 7; i++) { for (int j = 1; j <= 7; j++) { board[i][j] = sc.nextInt(); } } board[1][1] = 1; T.BFS(0,1,1); if (answer == Integer.MAX_VALUE) System.out.println(-1); else System.out.println(answer); } } 해설하신 Queue 를 이용하지 않고 풀었는데 해설과 비교하였을때 괜찮은 코드인가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Arrays.fill에 Integer.MAX_VALUE로 하면 안되는 거 아닌가용 ..? (10-5 동전 교환 문제)
3 2 3 4 15 라고 했을 때 답이 4가 나와야 되는데Integer.MAX_VALUE로 했을 때는 -2147483645가 나오더라구여 .. 문제랑 채점 사이트에 있는 예제 6개에서 모두 동전 종류에 1이 있어서 오류가 안 뜬 거 같은데동전 종류에 1이 없을 경우 위 예시와 같이 문제가 생길수도 있는거 아닌가용 ..? Integer.MAX_VALUE가 아니라 M 같은 수로 채워야되는 게 아닌가 궁금합니닷
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
질문 있습니다!
03-03번의 '최대 매출' 문제에서 슬라이딩 윈도우를 사용하실 때, 총 7개 중에서 4개씩 연속해서 옆으로 이동하실 때는, 처음 for문에서 4개의 연속된 값을 넣으셨습니다.ex) 1,2,3,4,5,6,7 이라면 첫 for문에서는 1,2,3,4 하지만 이번 문제에서는 7개 중에서 4개씩 연속해서 옆으로 이동하실 때는 첫 for문에서는 3개만 일단 넣고 시작하셨는데요.ex) 1,2,3,4,5,6,7 이라면 첫 for문에서는 1,2,3 이렇게 처음 for문에서의 연속된 값의 개수가 다른 점이 문제마다 의도가 다 다르기 때문에 다른 것이 맞나요? 문제마다 유연한 사고를 하기 위한 조언을 구하고 싶습니다 ㅠ
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
임시반장문제 오답케이스를 모르겠습니다.
import java.util.*; public class Main { public static void main(String[] args) { Scanner kb = new Scanner(System.in); int N = kb.nextInt(); int [][] input = new int[N][5]; for (int i = 0; i < N; i++) { for (int j = 0; j < 5; j++) { input[i][j] = kb.nextInt(); } } int answer = solution(N, input); System.out.println(answer); kb.close(); } private static int solution(int N, int[][] grid) { int answer = -1; int max = -1; for (int stdnt = 0; stdnt < N; stdnt++) { int count = 0; for (int i = 0; i < 5; i++) { int classNum = grid[stdnt][i]; for (int j = 0; j < N; j++) { if ( grid[j][i] == classNum ) { count++; } } } if ( count > max) { max = count; answer = stdnt; } } return answer+1; } }테스트케이스 많이 넣어봤는데, 오답케이스를 못찾겠습니다.여러명일때 작은 번호 출력하는것도, 하고 여러가지 넣어봤는데 잘 안되네요 ㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간과 점수 변수를 넘길 때 선언과 동시에 더한 값을 넘기게 되면 어떻게 되나요 ??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. static void DFS(int level, int time, int score, Exam[] arr) {if(time > m) return; if(level == n) {if(time <= m) {answer = Math.max(answer, score);}}else {DFS(level+1, time+=arr[level].time, score+=arr[level].point, arr);DFS(level+1, time, score, arr);}} else 부분에 time+= arr[level].time 처럼 선언과 동시에 더한 값을 메소드에 넘기게 되면 time 값이 가장 마지막으로 선언 된 time 값으로 고정이 되어 이전 값으로 안 돌아오게 되나요 ?
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
어떤 부분이 오답인지 궁금합니다
import java.io.*; public class Main { public int solution(int n) { int answer = 0, sum = 0, lt = 0; for (int rt = 0; rt <= n/2+1; rt++) { sum += rt; if (sum == n) answer++; while (sum >= n) { sum -= lt++; if (sum == n) answer++; } } return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); System.out.print(main.solution(n)); } } 따로, n/2+1 크기만큼의 배열을 생성해주지 않는 풀이인데, 어느 부분이 잘못되서 오답처리가 되는 것인지 잘 모르겠습니다.
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
어디가 잘못된 것인지 모르겠습니다.
import java.io.*; import java.util.*; public class Main { private int solution(int n, int[][] arr) { int[] cntArr = new int[n]; int answer = 0, max = 0; for (int i = 0; i < n; i++) { int cnt = 0; for (int j = 0; j < 5; j++) { boolean flag = false; int cur = arr[i][j]; for (int k = 0; k < n; k++) { if (i == k) continue; int compare = arr[k][j]; if (cur == compare) { flag = true; break; } } if (flag) cnt++; } cntArr[i] = cnt; max = Math.max(max, cntArr[i]); } for (int i = 0; i < n; i++) { if (cntArr[i] == max) { answer = i+1; break; } } System.out.println(Arrays.toString(cntArr)); return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[][] arr = new int[n][5]; StringTokenizer st; for (int i = 0; i < n; i++) { st = new StringTokenizer(br.readLine()); for (int j = 0; j < 5; j++) { arr[i][j] = Integer.parseInt(st.nextToken()); } } System.out.print(main.solution(n, arr)); } } 첫 번째 순회문(i)은 학생 번호를,두 번째 순회문(j)은 학년 번호를,세 번째 순회문(k)은 학생 번호를 순회하기 위한 for문입니다. 모든 학생을 일일이 순회하는데, 해당 학생이 위치한 학년의 학생들과 k 순회문으로 비교하는 로직입니다.(해당 학생이 위치한 학년을 비교하는, 열을 기준으로 비교하는) cntArr 배열에 각 학생의 같은 반인 횟수를 집어넣고, 최종적으로 그 중 가장 큰 값인 인덱스를 찾아 +1을 한 값을 반환합니다.이 풀이법이 틀린 이유가 무엇인가요..ㅜ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
for문 조건문 범위에 관련된 질문
강시님께서 풀어주신 TreeSet 변수 이름: set제가 풀었던(오답처리가 난) TreeSet 변수 이름: ex 강사님께서 풀어주신 for문의 형태입니다.제가 처음에 풀 때 for 문의 형태입니다.indexOutOfBoundsException이 발생하거라고 생각하여 위와 같이 조건문을 실행하였습니다. (indexOutOfBoundsException이 발생할것이라는 것은 잘못 생각한 부분입니다.) 처음에 계속 오답이 나서 조건문을 강사님과 같이 수정하니 정답처리가 되었습니다.하지만 제가 풀었던 for문의 조건문은 사실상 강사님께서 풀어준것과 똑같은 결과를 도출할 것이라 예상하였고, 실제로 set과 ex를 equals 메서드를 이용해보면 true를 반환합니다. 왜 for문의 조건문을 제가 푼 방식대로 설정하면 객체는 true를 반환하지만(같은 객체라고 판단된다고 생각됩니다.) 정답은 오답처리가 되는걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
연속분수수열 코드리뷰 부탁드립니다 ㅠ
import java.util.Scanner; public class Main { public static void main(String[] args) { //입력 Scanner scn = new Scanner(System.in); int n = scn.nextInt(); int m = scn.nextInt(); int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = scn.nextInt(); } int count = 0; int sum = 0; int i = 0; int k = 1; // 더한 수열 인자의 갯수 while(i<n){ sum += arr[i]; if(sum<m) { i++; k++; } else if(sum>m){ while(sum>m){ sum -= arr[i-(k-1)]; // m 보다 크면 맨앞에거 창문에서 제거 k--; if(sum==m) count++; i++; k++; // 맨앞을빼줘서 count증가하고 index증가할때 그 다음이 바로 sum>m 경우면 또 k--를 빼주기때문에 여기서 k++를 해줘야한다. if(sum<m) i++; } } else if(sum==m){ count++; i++; } } System.out.println(count); } }문제 예제와 다른 커뮤니티 질문에 답변에 있던 예제5 31 1 1 1 1경우도 통과했는데 오답이 나옵니다 ㅠㅠ 저는 lt, rt 같은 위치자(?)를 사용하지 않고sum 되고 있는 배열 인덱스의 갯수를 세서sum > m 경우 맨 앞인덱스를 제외시킬때 사용하였습니다.
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이 코드는 어떤 부분이 문제인지 궁금합니다.
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Main main = new Main(); for (int i = 0; i < n; i++) { System.out.print(main.solution(i) + " "); } } private int solution(int i) { if (i <= 1) { return 1; } return solution(i - 1) + solution(i - 2); } }
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임에러 질문입니다
import java.util.*; class Main { public String solution(String need, String plan){ String answer = "YES"; Queue<Character> q = new LinkedList<>(); for(char x: need.toCharArray()){ q.offer(x); // 필수과목을 q에 넣어줌 } for(int i = 0; i<plan.length(); i++){ if(!q.isEmpty() && q.peek() == plan.charAt(i)){ //교육과정 첫 번째 과목 == 현수의과목 q.poll(); } } if(!q.isEmpty()){ answer ="NO"; } return answer; } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); String a=kb.next(); String b=kb.next(); System.out.println(T.solution(a, b)); } }안녕하세요! 항상 양질의 강의 잘 듣고 있습니다!처음에 if(!q.isEmpty() && q.peek() == plan.charAt(i)) 부분에서 if(q.peek() == plan.charAt(i)) 로 조건문을 짰는데, 런타임 에러가 나서 !q.isEmpty() 를 붙였더니 정상적으로 잘 돌아가게 되었습니다. 웹서핑을 하다보니 큐에 자료가 없을 경우 q.peek()를 할 경우 exception이 나 런타임 에러가 난다고 하는 데 맞을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
씨름선수 문제 이중for문 통과했습니다.. 정상인건가요?
일단 먼저 풀어봤는데, 객체지향으로 풀려고 Player라는 클래스를 생성 후 몸무게와 키를 저장해 이중 for문으로 풀었는데 통과해버렸습니다.해당 코드는 150~200ms정도가 나오는데 통과하는게 정상인건지 궁금해서 여쭤봅니다. import java.util.Scanner; class Player { int height; int weight; public Player(int height, int weight) { this.height = height; this.weight = weight; } } public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Player[] players = new Player[n]; for (int i = 0; i < n; i++) { int height = sc.nextInt(); int weight = sc.nextInt(); Player player = new Player(height, weight); players[i] = player; } System.out.println(solution(n, players)); } private static int solution(int n, Player[] players) { int answer = n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (players[i].height < players[j].height && players[i].weight < players[j].weight) { answer--; break; } } } return answer; } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
아스키코드로 풀어보았는데 이렇게 짜도 괜찮을까요?
import java.util.*; class Main { public char solution(int n, String s){ int[] cnt = new int[n]; // 알파벳 등장 횟수 배열 char[] ch = s.toCharArray(); for (int i = 0; i < n; i++) { cnt[ch[i]-65]++; // count배열에 a,b,c,d,e 투표결과 저장 } int max = Integer.MIN_VALUE, answer =0; for(int i = 0; i<5; i++){ // count배열의 인덱스 0,1,2,3,4만 체크 if(cnt[i] > max){ answer = i; max = cnt[i]; } } return (char)(answer+65); } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); int n=kb.nextInt(); String str=kb.next(); System.out.println(T.solution(n, str)); } }이렇게 짜도 괜찮을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이렇게 풀어보았는데 효율적이지 않을까요?
import java.util.Scanner; public class Main { private String solution(String str) { String result = ""; String[] words = str.split(" "); for (String word : words) { if (result.length() == word.length()) continue; // 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로. if (result.length() < word.length()) result = word; } return result; } public static void main(String[] args) { Main main = new Main(); Scanner in = new Scanner(System.in); String str = in.nextLine(); System.out.println(main.solution(str)); }선생님 코드와 많이 다른데 효율성 측면에서 좋지 못한 코드인지 궁금합니다!