월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
삽입정렬에 관해 질문있습니다.
강사님의 강의를 듣기 전 import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner kb = new Scanner(System.in); int n = kb.nextInt(); int[] arr = new int[n]; for(int i =0; i < n ; i++){ arr[i] = kb.nextInt(); } int a; for(int i = 1; i< n; i++){ a = i; for(int j = i-1; j >= 0; j--){ if(arr[a] < arr[j]){ int tmp = arr[j]; arr[j] = arr[a]; arr[a] = tmp; } a--; } } for(int i =0; i < n ; i++){ System.out.print(arr[i] + " "); } }}이렇게 코드를 짰었는데 제가 짠 코드도 삽입정렬이라 할 수 있는것 인가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바에서 변수 초기화에 대한 의견입니다.
solution() {} 에서 중괄호 안에(메소드영역) 있는 변수(answer)를 지역변수라고 하는데 기본적으로 자바는 이 지역변수를 반드시 초기화를 해주어야 합니다. 안그러면 컴파일 에러가 발생하죠. 하지만 Main {} 처럼 클래스영역에 있는 변수를 전역변수 또는 멤버 변수(멤버 변수 = 클래스 변수 + 인스턴스 변수)라고 하는데 전역변수는 초기화를 하지 않아도 자동으로 기본값을 넣어줍니다. 영상에서 보여지는 코드는 solution 메소드 안에 있는 변수이므로 지역변수를 사용하고 int answer; 로만 선언을 했습니다. 이렇게만 하면 컴파일 에러가 발생하지만 밑에 줄에 answer = sum; 으로 초기화를 했기 때문에 컴파일 에러가 발생하지 않습니다. 멘토링 문제에서도 for {} 문 안에 변수 pi, pj 역시 지역 변수이므로 반드시 초기화를 해주어야 합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
a배열과 b배열의 값이 같을 때
안녕하세요 강사님 투포인터 - 공통원소 구하기 문제 if(a[p1] == b[p2]) 이 때 answer.add(a[p1++]); 만 해도 되지 않나요?! p2++; 를 꼭 해줘야 하는건지 궁금합니다
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
문제를 풀다보면 코드가 복잡해지는데 어떻게 해야할까요 ㅠㅠ
자바에서 제공하는 함수를 최대한 배제하고 풀어보려 했는데 코드가 엄청 길어지고 문제 검사에서도 런타임 에러가 뜨네요.. 어떤 방향으로 공부하는게 좋을까요 선생님? 조언 부탁드립니다.. import java.util.Arrays; import java.util.Scanner; import java.util.Set; public class Main { public int square(int p) { int i=0; int result = 1; while(i < p) { result *= 2; i++; } return result; } public String solution(String k ) { char a[] = k.toCharArray(); int b[] = new int[k.length()]; String word = ""; for( int i =0; i < k.length(); i++) { if(a[i] == '#') { b[i] = 1; }else if(a[i] == '*') { b[i] = 0; } } int count =0; int num = 0; while(count < k.length()) { if(6 -(count%7) == 0) { num += b[count] * 1; }else { num += square(6-(count % 7)) * b[count]; } if(count!=0 && (count % 7) == 6) { word += (char) num; num = 0; } count ++; } return word; } public static void main(String[] args) { Main T = new Main(); Scanner kb = new Scanner(System.in); int number = kb.nextInt(); String str; do { str = kb.nextLine(); }while(str.length()!= number*7); System.out.println(T.solution(str)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
s.toString() vs. String.valueOf(s)
먼저 좋은 강의 감사드립니다^^ String tmp = s.toString(); 위처럼 코드를 작성하면 정상적으로 출력되지않고, [C@6bc7c054[C@232204a1[C@4aa298b7 이렇게 출력되는데요.. String.valueOf(s) 와 s.toString() 과의 차이가 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
if(x != Q.poll())에 관련해서 질문 있습니다.
if문에 조건인 ()안에 있는 Q.poll은 실제로 값이 꺼내지는 이유가 무엇인가요?? 여태까지 if문의 조건에 들어가는 코드들은 단지 값만 불러오는데(?) 사용되는지 알았는데 실제 큐에 값이 꺼내지는 것인지 혼동이 옵니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
똑같이 풀었는데 왜 오답이 나오는지 모르겠습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운 import java.util.Scanner; public class Main { int[] dx = {-1,0,1,0}; int[] dy = {0,1,0,-1}; public int solution(int n, int[][] input) { int answer =0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { boolean flag = true; // 봉우리 여부 for(int k=0;k<4;k++) { int nx = input[i][j]+dx[k]; int ny = input[i][j]+dy[k]; if(nx>=0 && ny>=0 && nx<n && ny<n && input[nx][ny]>=input[i][j]) { flag = false; break; } } if(flag) answer++; } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] input = new int[n][n]; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { input[i][j]=sc.nextInt(); } } System.out.println(T.solution(n, input)); sc.close(); } } 영 관련 문의는 1:1 문의하기를 이용해주세요. 무엇이 문제일까요????
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
while(stack.pop()!=')'); 에서 조건문
안녕하세요. 강의 정말 잘 듣고있는 학생입니다. 다름이 아니라 여태까지 코드를 짜보면서 while문에 나오는 조건문은 단지 true와 false를 확인하여 계속 반복할 것인지 아닌지를 판단하는 용도로 알고있었습니다. 그런데 이번코드를 보니 while문의 조건 부분 빼고는 따로 pop하는 부분이 없는데 어떻게 pop과정이 일어나는지 이해가 잘 가지 않아 질문 남겨봅니다!!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다른 풀이로 풀었을때 오류가 있을까요?
안녕하세요 김태원 선생님! 강의를 듣기전 먼저 문제를 풀어보았는데요. 저는 새로운 동적배열을 만들어서 그 배열에 테두리 부분을 제외하고 값을 담고, 테두리 부분을 빼고 전부 상,하,좌,우로 탐색을 했습니다. 채점은 통과했지만, 혹시 이 방법을 사용하면 효율성이 많이 떨어지거나, 다른 테스트케이스가 들어올때 오류가 발생할 가능성이 있을까요? 감사합니다! public int solution(int n,int[][] arr) { int answer = 0; //격자판 생성 n = n+2; int[][] mt = new int[n][n]; for(int i=0; i<n-2; i++) { for(int j=0; j<n-2; j++) { mt[i+1][j+1] = arr[i][j]; } } //탐색 for(int i=1; i<n-1; i++) { for(int j=1; j<n-1; j++) { int tmp = mt[i][j]; //상,하 if(tmp > mt[i+1][j] && tmp > mt[i-1][j]) { //좌,우 if(tmp > mt[i][j+1] && tmp > mt[i][j-1]) { answer ++; } } } } return answer; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임 에러 이유
import java.util.Scanner;import java.util.Stack;public class Main{ // 괄호 관련 문제는 스택 문제일 확률이 높다. public static void main(String[] args) { Scanner kb = new Scanner(System.in); String str = kb.next(); String answer = "YES"; Stack<Character> stack = new Stack<>(); for(char c : str.toCharArray()){ if(c == '('){ stack.push(c); } else { if (stack.isEmpty()) { answer = "NO"; } stack.pop(); } } if(!stack.isEmpty()){ answer = "NO"; } System.out.println(answer); }}이렇게 작성하였을 때 테스트케이스 1번과 5번은 통과했지만 2,3,4 번은 런타임 오류가 발생하였습니다. 어떤 부분 때문일까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
Stringbuilder 사용시
처음에 StringBuilder sb = new StringBuilder(); 을 선언해 두고 바꿀 문자를 넣어서 String str = sb.append(x).reverse().toString()를 해봤는데 값이 계속 더해져서 나오길래 마지막에 str = ""; 를 해주었음에도 불구하고 계속 값이 더해져서 나오더라구요 왜 그런지 알 수 있을까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다른 풀이
package algorithm.Inf; import java.util.Scanner; import java.util.Stack; public class Inf5_2 { public String solution(String str) { String answer=""; Stack <Character> stack = new Stack<>(); for(char x : str.toCharArray()) { if(stack.isEmpty() && x!='(' && x!=')') { answer+=x; }else if(x=='(') { stack.push(x); }else if(x==')') { stack.pop(); } } return answer; } public static void main(String[] args) { Inf5_2 T = new Inf5_2(); Scanner sc = new Scanner(System.in); String str = sc.next(); System.out.println(T.solution(str)); sc.close(); } } 안녕하세요. 제가 알파벳 자체를 스택이 비어있고, '('나 ')'가 새로 들어오지 않을 때 알파벳을 answer에 추가하는 식으로 코드를 짜보았었는데 이 풀이가 논리적인 오류가 없는지 봐주시면 감사드리겠습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
뒤집은 소수 문제 런타임 오류 문의드립니다.
선생님 안녕하세요. 런타임 관련하여 오류가 발생해서 문의드립니다. 코드는 아래와 같이 작성하였는데(수업 듣기 전 먼저 풀어봤습니다.) 런타임에러가 자꾸나서요.. 테스트 케이스 1번은 통과하는데 다른 테스트 케이스를 확인할 수 없어, 어디서 오류가 났는지 확인하기가 어렵습니다.. 테스트 케이스를 알려주시면 스스로 고쳐보겠습니다. 좋은 강의 감사합니다. import java.util.*;public class Main { public ArrayList<Integer> solution(int n, int[] arr) { ArrayList<Integer> primeNumbers = new ArrayList<>(); int max = findMax(arr); int[] sieve = createSieve(max, arr); // 판별시작 for (int i = 0; i < n; i++) { int reversedNumber = reverseThis(arr[i]); if (sieve[reversedNumber] == 0) { // 뒤집은 수가 소수라면 배열에 추가 primeNumbers.add(reversedNumber); } } return primeNumbers; } private Integer reverseThis(int number) { int reversedNumber = 0; // 숫자 -> 문자열 valueOf -> 다시 숫자 parseInt String strNumber = String.valueOf(number); for (int i = strNumber.length() - 1; i >= 0; i--) { char x = strNumber.charAt(i); reversedNumber = reversedNumber * 10 + Integer.parseInt(String.valueOf(x)); } return reversedNumber; } private int[] createSieve(int max, int[] arr) { int[] sieve = new int[max + 1]; sieve[0] = sieve[1] = 1; // 0과 1은 소수가 아님 for (int i = 2; i <= max; i++) { if (sieve[i] == 0) { for (int j = i * 2; j <= max; j = j + i) { // sieve[i]는 그대로 0으로 남겨둠 sieve[j] = 1; } } } return sieve; } private int findMax(int[] arr) { int max = Integer.MIN_VALUE; for (int x : arr) { if (x > max) { max = x; } } return max; } // max 찾기 // 체 생성 // 뒤집기 함수 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]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } for (int x : T.solution(n, arr)) { System.out.print(x + " "); } }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코드 질문
package 결혼식; import java.util.*; class Time implements Comparable<Time>{ public int s, e; Time(int s, int e){ this.s = s; this.e = e; } public int compareTo(Time o) { return this.s - o.s; } } public class Main { public int solution(ArrayList<Time> arr, int n) { int answer = 0; int cnt = 0; Collections.sort(arr); for(int i=0; i<n; i++) { Time tmp = arr.get(i); for(Time x : arr) { if(x.s < tmp.s && tmp.s < x.e || tmp.e < x.e && x.s < tmp.e) { cnt++; } } answer = Math.max(cnt, answer); cnt = 0; } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); ArrayList<Time> arr = new ArrayList<>(); for(int i=0; i<n; i++) { int s = scan.nextInt(); int e = scan.nextInt(); arr.add(new Time(s,e)); } System.out.print(T.solution(arr, n)); } } 이중for문을 이용해서 코드를 짰는데 답은 맞게 나오는 거 같은데 검사 돌렸을때 오답으로 나오는데 어느 부분이 문제인지 궁금합니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
parseInt가 0을 제외하는 이유
안녕하세요 선생님, 강의 잘 듣고 있습니다. 이번 강의는 풀이가 여러개여서 다양한 접근을 할 수 있어 좋네요. parseInt는 String을 숫자로 변환해주는 것으로 알고 있습니다. 9. 숫자만 추출에서 parseInt()시 첫 글자 0이 제외되는데요. 어떻게 가능한 것인가요?int (정수)는 0을 포함하기에 어떻게 0이 제외되는건지 헷갈려서요. 답변 미리 감사드립니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
count 함수 구현 중에
안녕하세요 강의 잘 듣고 있습니다. sum+x와 capaity를 비교하는 함수 구현 중에서 저는 sum+x를 먼저 구하고 이 값을 capacity랑 비교했는데요 이때 이 값과 capacity가 같을 때도 cnt++;해주고 sum=0;으로 초기화했습니다. 용량이 다 차서 새로 녹음해야 된다고 생각해서요 이렇게 하나 강의에서 sum+x과 capacity를 비교해서 클때만 cnt++;하나 같은 방식이라고 생각되는데 오답이 뜹니다..! 생각해봐도 어디서 잘 못 된건지 모르겠어서 질문 남깁니다. 디버깅해보려고 했는데 값이 많아서 엄두가 안 나서요 감사합니다.! 해당 코드 입니다. public int count(int[] arr, int capacity) { int cnt = 1, sum = 0; for (int x : arr) { sum += x; if (sum > capacity) { cnt++; sum = x; } else if (sum == capacity) { cnt++; sum = 0; } } return cnt; }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
3-3 슬라이딩 문제
import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; int k = sc.nextInt(); for(int i=0; i<n; i++) { arr[i]=sc.nextInt(); } System.out.print(solution(arr,n,k)); // for(int x: solution(arr1,arr2,n,m)) { // System.out.print(x+" "); // } } public static int solution(int[] arr,int n, int k) { int answer=0; int gap=0; for(int i=0;i<=n-k;i++) { gap = arr[i]+arr[i+1]+arr[i+2]; if(answer<gap) { answer = gap; } } return answer; } }
- 해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
2-12 멘토링 문제 질문입니다.
안녕하세요 선생님 강의 잘 듣고 있습니다 ^^ 멘토링 문제에서 만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 "M번의" 수학테스트에서 "모두" B학생보다 등수가 앞서야 합니다. 라고 나옵니다. 주어진 테케에서 (문제에 주어진 테케) 4 3 3 4 1 2 4 3 2 1 3 1 4 2 (문제 해설) 출력설명 (3, 1), (3, 2), (4, 2)와 같이 3가지 경우의 (멘토, 멘티) 짝을 만들 수 있다. 라고 나옵니다. 근데 (3번학생,1번학생) , (3번학생,2번학생) , (4번학생,2번학생) 3 1 4 2 에서 3번학생은 1번학생 보다 등수가 높지 않아 "모든 m번의 경우"에서 앞선다라는 문제 조건에 위배 되지 않나요? (3,2) , (4,2)도 마찬가지 입니다. 감사합니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
p 값을 Integer.MAX_VALUE 할 경우
안녕하세요. int p = Integer.MAX_VALUE; 라고 두고 코드를 짰는데 결과값이 -2147483648 0 1 2 1 0 1 2 2 1 0 이렇게 나옵니다. 게다가 정수 최대값으로 설정했는데 결과는 음수값으로 나오네요. 왜 그러는 걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
답안과 다른 답안 확인해 주실 수 있으신가요?
import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner kb = new Scanner(System.in); String str = kb.nextLine(); int cnt = 1; char[] arr = str.toCharArray(); for(int i =0; i < arr.length ; i++){ if(i == arr.length -1 && arr[arr.length-1] == arr[arr.length-2] ){ System.out.println(arr[arr.length-1] + "" + cnt); break; } if(i == arr.length -1 ){ System.out.println(arr[arr.length-1]); break; } if(arr[i] == arr[i+1]) cnt += 1; else { System.out.print(arr[i]); if(cnt >= 2) System.out.print(cnt); cnt = 1; } } }}저는 이렇게 작성하였는데 너무 if문이 많은 것 같아서요..이렇게 작성해도 괜찮나요? 그리고 if문이 많으면 효율이 많이 떨어지나요?