월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
HashSet을 사용한 풀이
public static void main(String[] args){ Scanner in=new Scanner(System.in); int input1 = in.nextInt(); Set<Integer> arr1 = new HashSet<>(); for(int i =0 ; i< input1; i++){ arr1.add(in.nextInt()); } int input2 = in.nextInt(); List<Integer> answer = new ArrayList<>(); for(int i =0 ; i< input2; i++){ int tmp = in.nextInt(); if( arr1.contains(tmp)){ answer.add(tmp); } } Collections.sort(answer); for(int ans : answer){ System.out.print(ans +" "); }}계속 시간 문제가 발생해서 HashSet 에 한 쪽을 저장하고 contains 를 사용하는 방법으로구현해서 정답 판정을 받았는데 이 풀이는 별로 효율적이지 않은걸까요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
소팅 부분을 직접 구현하는 형식으로 코드를 짜봤는데요..
- 학습 관련 질문import java.util.*; public class PracticeWedding { public int solution(int number, List<List<String>> time){ int answer = 0;// for (int i =0 ; i < number; i++){ List<String> schdule = time.get(i); //시간 가져오기 String strTime = schdule.get(0); //변환 int intTime = Integer.parseInt(strTime); //state 가져오기 String state = schdule.get(1); for (int j = i+1; j < number ; j++){ List<String> schdule2 = time.get(j); //시간 가져오기 String strTime2 = schdule2.get(0); //변환 int intTime2 = Integer.parseInt(strTime2); //state 가져오기 String state2 = schdule2.get(1); if (intTime > intTime2){ List<String>temp = new ArrayList<>(); temp = time.get(i); time.set(i,time.get(j)); time.set(j,temp); }else if (intTime == intTime2){ if (state.equals("e")&&state2.equals("s")){ List<String>temp2 = new ArrayList<>(); temp2 = time.get(j); time.set(j,time.get(i)); time.set(i,temp2); } } } for (int z =1; z <time.size();z++){ System.out.print(time.get(z)); } System.out.println(" "); } //e와 s 판별 for (int z=0; z<number; z++){ List<String> schdule = time.get(z); String state = schdule.get(1); if (state.equals("s")){ answer++; }else { answer--; } } return answer; } public static void main(String[] args) { PracticeWedding practice1 = new PracticeWedding(); System.out.println("결혼식에 참석할 인원 수를 입력해주세요"); Scanner intput = new Scanner(System.in); String peoplNumber = intput.next(); List<List<String>>totalTimeArray = new ArrayList<>(); int number = Integer.parseInt(peoplNumber); for (int i = 0; i < number; i++ ){ System.out.println(i+"번째 돌아가는 친구의 시간을 입력하시오"); Scanner scanner = new Scanner(System.in); String totalTime = scanner.nextLine(); String[] array = totalTime.split(" "); String startTime = array[0]; String endTime = array[1]; List<String> manScheduleS = new ArrayList<>(); manScheduleS.add(startTime); manScheduleS.add("s"); totalTimeArray.add(manScheduleS); List<String> manScheduleE = new ArrayList<>(); manScheduleE.add(endTime); manScheduleE.add("e"); totalTimeArray.add(manScheduleE); } int Number = practice1.solution(number,totalTimeArray); System.out.println("Number = " + Number); } 오름차순 정렬도 직접 구현해서 코드를 짜봣는데... 오름차순 정렬 부분에서 아무리 봐봐도 뭐가 틀렸는지를 모르겠습니다... 혹시 알려주실수 있으신가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
for(int pos : moves) 이부분을 그냥 일반 for문으로 바꾸고싶어요
for(int pos : moves) 이 부분을 일반 for문으로 바꾸고싶은데요 어떻게 바꿀수있을까요?ㅠ
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임 오류 질문드립니다.
안녕하세요. 채점시 테스트케이스 1번에서 런타임 오류가 발생합니다. 나머지 케이스들은 모두 정상 통과하는데요 1번 입력이 어떤건지 확인좀 부탁드리겠습니다. import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in); sc.nextLine(); String str = sc.nextLine().replaceAll("#", "1").replaceAll("\\*", "0"); for (int i = 0; i < str.length(); i += 7) {int chr = Integer.valueOf(str.substring(i, i + 7), 2); System.out.print((char) chr); }}}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간복잡도
시간복잡도 O(n^2) 이런거는 따로 공부해야 되는건가요??
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
04-02 아나그램 테스트케이스 추가요청.
"CCCCAB"와 "CAB"는 아나그램이 아니지만 함수 실행을 하면 "YES"가 리턴됩니다. 테스트케이스에 "CCCCAB", "CAB" -> NO 추가하시고 코드 마지막 부분에 Map의 모든 Key들의 value가 0인지 확인하는 코드 추가해야될 것 같습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
코드 질문 드립니다.
import java.util.*; public class Main { public static void main(String[] args) { Main T = new Main(); Scanner in = new Scanner(System.in); int n = in.nextInt(); int[][] arr = new int[n][5]; for (int i = 0; i < n; i++) { for (int j = 0; j < 5; j++) { arr[i][j] = in.nextInt(); } } System.out.println(T.solution(n, arr)); } private static int solution(int n, int[][] arr) { int answer = 0; int temp; int high = 0; for (int k = 0; k < n; k++) { temp = 0; for (int i = 0; i < n; i++) { // if(k == i) continue; for (int j = 0; j < 5; j++) { if (arr[k][j] == arr[i][j]) { temp++; break; } } } if (temp > high) { high = temp; answer = k + 1; } } return answer; } } 안녕하세요. 강의 듣기 전에 혼자 풀어본 코드인데요. 현재 학생(k)과 전체 학생 i(0 < i < n)를 각 학년별로 j(0 < j < 5) 비교하면서 같은 반인 경우(arr[k][j] == arr[i][j]), 카운팅을 하고 break로 다음으로 넘어가는 식으로 작성을 했습니다. 근데 현재 학생(k)과 비교 학생(i)이 같은 순간(자기 자신)에 continue를 하니까 오답이 뜨고, 해당 코드를 지우면 정답이 되는데 둘 다 정답이 아닌가 해서 질문 올립니다!
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
강사님 코드
public String solution(String str1, String str2) { String answer = "YES"; HashMap<Character, Integer> map1 = new HashMap<>(); for(char v: str1.toCharArray()) { map1.put(v, map1.getOrDefault(v, 0)+1); } for(char v: str2.toCharArray()) { if(!map1.containsKey(v) || map1.get(v)==0 ) return "NO"; map1.put(v, map1.get(v)-1); } for(char v: map1.keySet()) { if(map1.get(v)!=0) return "NO"; } return answer; } 같은 key를 찾아서 -1을 했는데 0이 아닌 경우도 있을것 같아서 for(char v: map1.keySet()) { if(map1.get(v)!=0) return "NO"; } 이 부분을 추가했는데 하는게 맞을까요? 아니면 불필요한 부분인가요?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
replace, replaceAll
안녕하세요 선생님, String tmp = str.substring(0, 7).replace("#", "1").replace("*", "0"); 문장에서 replaceAll과 replace의 차이점이 궁금합니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
키 입력 순서에 따라 실행이 되었다가 안되었다가 하는데 원인을 모르겠습니다;
안녕하세요. 선생님 해당 문제를 아래와 같이 풀었습니다 그런데, n과 m의 위치를 바꾸면 실행이 안되는데요 입력값을 받을 때 이슈가 있는 것같은데, 원인을 찾을수가 없었습니다ㅠ 선생님께서 배포해주신 답안도 마찬가지 현상이 있는데요 혹시 원인을 알 수 있을까요? import java.util.*;public class Main { static int m, n, answer = 0; public void DFS(int L, int sum, int[] score, int totalTime, int[] time){ if(totalTime > m) return; if(L == n){ answer = Math.max(answer, sum); }else{ DFS(L+1, sum + score[L], score, totalTime + time[L], time); DFS(L+1, sum, score, totalTime, time); } } public static void main(String[] args){ Main T = new Main(); Scanner kb = new Scanner(System.in); n = kb.nextInt(); // 문제수 m = kb.nextInt(); // 제한시간 // n과 m 바꾸면 안됩니다 int[] score = new int[n]; int[] time = new int[n]; for(int i=0; i<n; i++){ score[i] = kb.nextInt(); time[i] = kb.nextInt(); } T.DFS(0, 0, score, 0, time); System.out.println(answer); }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
소수 에라토스테네스 체 이런 풀이 방법도 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. package Array; import java.util.*; /** * 소수에라토스테네스체 */ public class 소수에라토스테네스체 { public static int solution(int n){ int answer=0; boolean [] solo = new boolean[n+1]; solo[0]=true; solo[1]=true; for(int i=2;i<=n;i++){ if(solo[i]==false) answer++; for(int j=i*i;j<=n;j+=i){ solo[j]=true; } } // int[] ch = new int[n+1]; // for(int i=2;i<ch.length;i++){ // if(ch[i]==0){ // answer++; // for(int j=i;j<=n;j+=i){ // ch[j]=1; // } // } //} return answer; } public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); System.out.println(solution(n)); } } boolean배열을 사용해서 true인 경우는 소수가 아니라 판단을 하여주였습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
sort 함수 이용시 문제점 발견
안녕하세요 선생님. 문제 풀던중 질문이 있어 질문 남깁니다. 아래와 같이 sort를 이용하여 정렬을 해봤는데, 2번째 채점결과에서 인덱스 번호 800번까지는 정렬이 잘 되나, 그 뒤로 무너지는 현상이 발견되었습니다. 선생님이 풀어주신 내용과는 무관하나, 너무 궁금하여 질문드립니다. 감사합니다. public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int n = Integer.parseInt(br.readLine()); List<List<Integer>> input = new ArrayList<>(); for (int i = 0; i < n; i++) { List<Integer> tmp = new ArrayList<>(); String[] s = br.readLine().split(" "); tmp.add(Integer.valueOf(s[0])); tmp.add(Integer.valueOf(s[1])); input.add(tmp); } input.sort((o1, o2) -> o1.get(0)==o2.get(0)? o1.get(1)-o2.get(1) : o1.get(0)-o2.get(0)); for (List<Integer> integers : input) { System.out.println(integers.get(0)+" " + integers.get(1)); } }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다른 풀이 방식(set을 이용한 중복제거)
선생님 항상 수고가 많으십니다 다름이 아니라 Set을 이용하여 중복제거하고 마지막에 정답학생의 i에 +1해서 답을 반환했는데요 IDE에서 할때는 답이 잘나오는데 코딩채점에 입력하면 오답으로 나옵니다. 코드 한 번 봐주실 수 있을까요? import java.util.HashSet; import java.util.Scanner; import java.util.Set; public class Main { public static int Solution(int n, int[][] arr) { Set<Integer> set = new HashSet<>(); int max = 0; int answer = 0; for(int i = 0 ; i < n ; i++) { for(int j = 0 ; j < 5 ; j++) { for(int k = 0 ; k < n ; k++) { if(i!=k) { if(arr[i][j] == arr[k][j]) { set.add(k); } } } } System.out.println(set); if(max < set.size()) { max = set.size(); answer = i+1; } set.clear(); } return answer; } public static void main(String[] args) { 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(Solution(n,arr)); } }
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
혹시 이 방법으로 풀어도 괜찮을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import java.util.*; public class 문자열압축 { public static String solution(String str){ String answer = ""; char temp=' '; int num = 1; str+=" "; for(int i=0;i<str.length();i++){ if(temp==str.charAt(i)){ num++; }else{ answer+=temp+Integer.toString(num); num=1; } temp=str.charAt(i); } answer=answer.replaceAll("1","").trim(); return answer; } public static void main(String[] args) { Scanner scan = new Scanner(System.in); String str = scan.nextLine(); System.out.println(solution(str)); } } replaceAll, trim을 사용하여 출력을 받았고 이전에 저장해준 값을 가져와서 쓰는 방식으로 구현하였습니다.
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
8개 방향 문의드립니다.
dx = new int[]{1,0,-1,0}; dy = new int[]{-1,0,1,0};이렇게 하면 대각선도 포함되서 오류였는데 상하좌우 대각선 다 포함해서 돌때는 배열에 순서상관없이 각 합이 0으로만 끝나면 될까요? 선생님 안녕하세요! 상하좌우 대각선 방향문의드립니다. 기존에 상하좌우 방향만 구해야했을땐 dx = new int[]{1,0,-1,0}; dy = new int[]{-1,0,1,0}; 식으로하면 대각선방향도 포함되어서 오류가났는데, 이번 문제는 대각선도 포함히니까 dx[],dy[] 안에 넣는숫자이 순서는 상관없을까요 ?
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
테스트 케이스 5번 실패
안녕하세요 강사님, 강의 잘 듣고 있습니다. 다름이 아니라 문제 해결하는데 테스트를 통과하지 못해서 문의드리고 싶습니다. 5번 테스트 결과가 180으로 나오는데 제 코드에서는 0으로 나오게 됩니다. 입력값이 너무 크기에 디버깅이 힘들기도 하고 강의 보면서 잘못된 부분을 찾아보려고 했으나, 감이 잘 안오기에 이렇게 문의 드립니다... ㅠㅜ import java.util.HashMap;import java.util.Map;import java.util.Scanner;public class Pr04_my04 { private int solution(String str, String compare) { int answer = 0; char[] strArr = str.toCharArray(); char[] compareArr = compare.toCharArray(); int cnt = 0; Map<Character, Integer> compareMap = new HashMap(); for(char x : compareArr){ compareMap.put(x, compareMap.getOrDefault(x, 0)+1); } Map<Character, Integer> strMap = new HashMap(); for(int i = 0; i < compare.length(); i++ ){ strMap.put(strArr[i], strMap.getOrDefault(strArr[i], 0)+1); } if(compareMap.equals(strMap)){ answer ++; } int head = compareMap.size(), tail = 0; while (head < strArr.length){ strMap.put(strArr[head], strMap.getOrDefault(strArr[head], 0)+1); strMap.put(strArr[tail], strMap.get(strArr[tail])-1); if(strMap.get(strArr[tail]) == 0){ strMap.remove(strArr[tail]); } if(compareMap.equals(strMap)){ answer ++; } head++; tail++; } return answer; } public static void main(String[] args) { Pr04_my04 pr = new Pr04_my04(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String compare = sc.nextLine(); System.out.print(pr.solution(str, compare)); }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
결과 출력시 x+ " " 에 대해 질문있습니다
결과 출력할 때 System.out.print(x + " "); 이렇게 출력하는 경우 마지막에도 공백이 추가되는데 만약에 코테 문제중에, 정답 출력 시 마지막 공백이 포함되면 안된다면 그럴 경우 어떻게 해야하나요? 그럴 경우가 있는지 궁금하구 그냥 똑같이 출력하면 되는지 궁금합니당 ..
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
왜 runtime이 뜰까요 ;;
IDE에서 컴파일시에는 잘 되는데 , 왜 채점시에는 RUNTIMEERROR가 뜨는지 모르겠어요. 한번 봐주실 수 있을까요?? public class Main { public int solution(int n , int [][] arr){ int answer = Integer.MIN_VALUE; int sum1 = 0; int sum2 = 0; int sum3 = 0; int sum4 = 0; for(int i=0, k = 4; i < n ; i++ , k--){ sum3+=arr[i][i]; //대각선들의 합 sum4+=arr[k][k]; 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); sum1 = 0; sum2 = 0; } answer=Math.max(answer, sum3); answer=Math.max(answer, sum4); return answer; } public static void main(String[] args) { Main t = new Main(); Scanner scan = new Scanner(System.in); int n = scan.nextInt(); int [][] arr = new int[n][n]; for(int i=0; i < arr.length ; i++){ for(int j=0; j <arr[i].length; j++){ arr[i][j] = scan.nextInt(); } } System.out.println(t.solution(n,arr)); }}
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
런타임 에러 이유를 도저히 모르겠습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 계속 안돼서 하다하다 강의에서 푼거랑 똑같이 했는데도 런타임에러가 뜨네요 이유를 모르겠습니다.... 도와주십쇼
- 미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
답이 맞는데 계속 오답으로 나와요...
어디가 잘못된 건지 한 번 봐주실 수 있으신가요? public static void main(String[] args) { Scanner sc = new Scanner(System.in); String next = sc.next(); char c = sc.next().charAt(0); for(int x : solution(next, c)){ System.out.print(x + " "); }}public static int[] solution(String s, char c){ int[] answer = new int[s.length()]; //오른쪽으로 돌 거 int [] right = new int[s.length()]; //왼쪽으로 돌 거 int[] left = new int[s.length()]; int count = 0; for(int i =0; i<s.length(); i++){ if(s.charAt(i) != c){ count++; }else{ count = 0; } answer[i] = count; } count = 0; for(int i = s.length()-1; i >=0; i--){ if(s.charAt(i) != c){ count++; }else{ count = 0; } if(count < answer[i]){ answer[i] = count; } } return answer;}