묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바(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; } }
-
미해결자바 코딩테스트 - it 대기업 유제
팰린드롬의 경우의 수 질문드립니다.
저는 입력값이 크지가 않아서 가능한 문자열의 길이가 n이 되면 팰린드롬을 체크해서 중복방지를 위해 해시셋에 만족하는 문자열을 담는 걸로 구현을 했습니다.근데 재귀함수 안에서는 출력값이 잘 나오는거 같은데, 그걸 해시에 담았는데, 해시의 크기가 0으로 나옵니다. 무엇이 잘못된건가요??? import java.util.*; class Main { public static boolean[] visit; public static int n; public static String[] ll; public static HashSet<String> ans = new HashSet<>(); public String[] solution(String s){ String[] answer = {}; dfs(0,""); n=s.length(); visit = new boolean[n]; ll = s.split(""); //s를 문자열 배열로 분리 ans = new HashSet<>(); answer = new String[ans.size()]; System.out.print(answer.length); return answer; } public static void dfs(int L, String str) { //문자열 만들어주기 if(L==n) { if(check(str)) { //팰린드롬인지 체크 //System.out.println(str); ans.add(str); } else return; } else { for(int i=0; i<ll.length;i++) { //i번째 문자 썼는지 확인하면서 문자열 만들어주기 if(!visit[i]) { visit[i] = true; dfs(L+1,str+ll[i]); visit[i] = false; } } } } public static boolean check(String str) { //팰린드롬인지 체크 String[] list = str.split(""); int lt=0; int rt= list.length-1; while(lt<rt) { if(list[lt].equals(list[rt])) { lt++; rt--; } else return false; } return true; } public static void main(String[] args){ Main T = new Main(); System.out.println(Arrays.toString(T.solution("aaaabb"))); System.out.println(Arrays.toString(T.solution("abbcc"))); System.out.println(Arrays.toString(T.solution("abbccee"))); System.out.println(Arrays.toString(T.solution("abbcceee"))); System.out.println(Arrays.toString(T.solution("ffeffaae"))); } }
-
미해결자바 코딩테스트 - it 대기업 유제
바둑대회 조합 코드 작성질문드립니다.
조합으로 이렇게 작성했는데, 답이 다르게 나옵니다.잘못 생각한 부분이 있을까요?? import java.util.*; class Main { public static boolean[] visit; public static int answer; public static int[] white,black; public static int sum1,sum2,n; public int solution(int[][] cans){ int answer = Integer.MAX_VALUE; n=cans.length; white = new int[n]; black = new int[n]; visit = new boolean[n]; int i=0; for(int[] x : cans) { //흰색돌, 검정돌 분리해주기 white[i] = x[0]; black[i] = x[1]; i++; } dfs(0,0); //조합 탐색 시작 return answer; } public static void dfs(int L, int s) { if(L==n/2) { sum1=0; sum2=0; for(int i=0; i<n; i++) { //방문했던곳은 흰색 돌, 그렇지 않은 곳은 검은돌 if(visit[i]) sum1+=white[i]; //흰색돌들의 합 else sum2+=black[i]; //검정색 돌들의 합 } answer = Math.min(answer, Math.abs(sum1-sum2)); } else { for(int i=s; i<n; i++) { if(!visit[i]) { visit[i] = true; dfs(L+1, i+1); visit[i] = false; } } } } public static void main(String[] args){ Main T = new Main(); System.out.println(T.solution(new int[][]{{87, 84}, {66, 78}, {94, 94}, {93, 87}, {72, 92}, {78, 63}})); System.out.println(T.solution(new int[][]{{10, 20}, {15, 25}, {35, 23}, {55, 20}})); System.out.println(T.solution(new int[][]{{11, 27}, {16, 21}, {35, 21}, {52, 21}, {25, 33},{25, 32}, {37, 59}, {33, 47}})); } }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 맞왜틀 질문
안녕하세요.두 로직이 같은 것 같은데 하나는 맞고 하나는 틀려서 질문드립니다.부분합 계산하는 로직은 똑같은데, 답지 풀이와 다르게 처음에 부분합을 구하고 한 칸씩 옮기면서 다음 값들을 빼고 더하는 로직입니다.<맞는 코드>http://boj.kr/71648b379df54b9da80fe0b80ec8ca33#include<bits/stdc++.h> using namespace std; int N, K, num; vector<int> temperatures; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> K; for (int i = 0; i < N; i++) { cin >> num; temperatures.push_back(num); } int sum = 0; for (int i = 0; i < K; i++) { sum += temperatures[i]; } int ret = -10000000; ret = max(sum, ret); for (int j = K; j < N; j++) { sum = sum + temperatures[j] - temperatures[j - K]; ret = max(sum, ret); } cout << ret << "\n"; }<틀린 코드>http://boj.kr/c2a7e69a69f6426d87429b3920570c4c#include<bits/stdc++.h> using namespace std; int N, K, j; vector<int> temperatures; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> K; for (int i = 0; i < N; i++) { int num = 0; cin >> num; temperatures.push_back(num); } int sum = 0; for (int i = 0; i < K; i++) { sum += temperatures[i]; } int ret = -10000000; ret = max(sum, ret); j = K; do { sum = sum + temperatures[j] - temperatures[j - K]; ret = max(sum, ret); j++; } while (j < N); cout << ret << "\n"; }사실 변경점이 do-while문을 for문으로 바꾼 것 밖에 없는데 맞더라구요...혹시 제가 발견하지 못한 차이점이 있을까요?좋은 강의 감사합니다. ㅎㅎ
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
최대점수 구하기(DFS) 질문 드립니다.
if L==n 부분에서 return 을 안해도 되나요?예를 들면 DFS(6,30,20) -> DFS(7,30,20) 이런식으로 dfs 재귀가 무한으로 반복되는거 아닌가 헷갈리네요..
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이썬 강의 둘 중 하나만 들어도 될까요?
강사님 강의중에 파이썬 강의가 두 개 있고, 두 강의 모두 입문용으로 되어있는데 커리큘럼을 보면 내용이 겹치는 것 같은데 [입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]]강의는 요약, [파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)]강의는 전체적으로 학습하는걸로 이해하고 이 강의만 들어도 될까요?
-
미해결자바 코딩테스트 - it 대기업 유제
멀티태스킹 문제 질문드립니다.
만약 강의에서처럼 규칙을 찾지 못해서큐로 구현했는데, 이렇게 구현하면 안되는건가요??? import java.util.*; class Node{ int number; //해당 작업의 작업시간 int idx; //작업 번호 Node(int number, int idx){ this.number = number; this.idx = idx; } } class Main { public static Queue<Node> q= new LinkedList<>(); public int solution(int[] tasks, long k) { int answer = 0; for(int i=0; i<tasks.length; i++) { q.offer(new Node(tasks[i],i+1)); //1 2 3, 각 작업 번호들 대입 } long time=0; while(!q.isEmpty()) { Node tmp = q.poll(); int nownumber = tmp.number; int nowwork = tmp.idx; nownumber--; time++; if(time==k) { answer = nowwork; break; } if(nownumber!=0) { q.offer(new Node(nownumber, nowwork)); } } return answer; } public static void main(String[] args){ Main T = new Main(); System.out.println(T.solution(new int[]{1, 2, 3}, 5)); System.out.println(T.solution(new int[]{8, 5, 2, 9, 10, 7}, 30)); System.out.println(T.solution(new int[]{8, 9, 12, 23, 45, 16, 25, 50}, 100)); } }
-
미해결자바 코딩테스트 - it 대기업 유제
심사위원 시간복잡도
이렇게 작성했는데, 시간 복잡도에 걸리지 않게 작성한것이 맞나요?? import java.util.*; class Main { public int solution(int[] score, int k){ int answer = 0; Arrays.sort(score); int sum=0; ArrayList<Integer> ans = new ArrayList<>(); //k개 원소를 담을 리스트 for(int i=0; i<score.length; i++) { //배열을 처음부터 탐색한다. int diff = score[i+k-1] - score[i]; //앞 뒤 원소의 차이를 구한다. if(diff<=10) { //만약 그 차이가 10이하이면 int cnt=0; //개수를 세기위한 변수 int j=i; //i번째 원소부터 시작해서 리스트에 담는다. while(true) { //10이하의 경우에서 제일 첫번째로 찾는게 정답이다. if(cnt==k) break; //k개만큼 담았으면 반복문 멈춘다. ans.add(score[j++]); //답에 해당하는 원소들을 ans에 담아준다. cnt++; } break; } } sum=0; //원소들의 합계를 구하기 위한 변수 for(int i=0; i<ans.size(); i++) { sum+=ans.get(i); } answer = (int)sum/k; return answer; } public static void main(String[] args){ Main T = new Main(); System.out.println(T.solution(new int[]{99, 97, 80, 91, 85, 95, 92}, 3)); System.out.println(T.solution(new int[]{92, 90, 77, 91, 70, 83, 89, 76, 95, 92}, 4)); System.out.println(T.solution(new int[]{77, 88, 78, 80, 78, 99, 98, 92, 93, 89}, 5)); System.out.println(T.solution(new int[]{88, 99, 91, 89, 90, 72, 75, 94, 95, 100}, 5)); } }
-
미해결자바 코딩테스트 - it 대기업 유제
이진수 정렬 문제 질문드립니다.
이진수를 나타내는 Integer.toBinary()를 사용해서 사용자 정렬로 했는데, 답이 다르게 나옵니다. 라이브러리 함수를 사용하면 안되는 건가요?? import java.util.*; class Node implements Comparable<Node>{ int idx; //배열의 원소값 int cnt; //1의 개수 Node(int idx, int cnt){ this.idx = idx; this.cnt = cnt; } @Override public int compareTo(Node o) { if(this.cnt==o.cnt) return this.idx - o.idx; //1의 개수가 같으면 배열의 원소를 기준으로 오름차순 else return this.cnt- o.cnt; //그게 아니면 1의 개수가 작은것을 기준으로 오름차순 } } class Main { public static ArrayList<Node> list = new ArrayList<>(); public int[] solution(int[] nums){ int[] answer; for(int i=0; i<nums.length; i++) { String s = Integer.toBinaryString(nums[i]); //2진수로 만들어주기 list.add(new Node(nums[i], count(s))); } Collections.sort(list); //조건에 맞게 정렬 answer = new int[list.size()]; for(int i=0; i<list.size(); i++) { answer[i] = list.get(i).idx; } return answer; } public static int count(String ss) { //1의 개수를 세주는 메소드 int cnt=0; String[] list = ss.split(""); for(int i=0; i<list.length; i++) { if(list[i].equals("1")) cnt++; } return cnt; } public static void main(String[] args){ Main T = new Main(); System.out.println(Arrays.toString(T.solution(new int[]{5, 6, 7, 8, 9}))); System.out.println(Arrays.toString(T.solution(new int[]{5, 4, 3, 2, 1}))); System.out.println(Arrays.toString(T.solution(new int[]{12, 5, 7, 23, 45, 21, 17}))); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[4-A] 질문입니다
안녕하세요, 틀린 코드에서 일부를 바꿨더니 맞았는데 이해가 되지 않아 질문을 드립니다. cost <= minCost 일때 최소 비용과 선택된 항목들을 갱신할 경우 사전순으로 뒤쪽인 것이 덮어쓰기 때문에 sort가 반드시 필요하게 되지만cost < minCost일때만 갱신할 경우 앞쪽에서 같은 비용인게 먼저 나왔다면 뒤에선 갱신되지 않기 때문에 사전순으로 앞쪽인 답이 나온다고 생각했습니다. for문을 오름차순으로 돌리고 있기에 사전순이 뒤집힐 이유도 없을텐데 어디서 문제가 생기는 걸까요?http://boj.kr/c09cb2b0628143d48288d23ea6a78b82
-
미해결자바(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)); } }이렇게 짜도 괜찮을까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
sort방식
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님!!이 문제를 sort로도 풀 수 있을까요?주어진 문자열 두개를 split해서 sort하고 join한 값이 일치하느냐에 따라서 answer를 반환하는 로직을 세워봤습니다. 이렇게 풀어도 문제는 없을까요?function solution(str1, str2) { let answer = ""; let sortStr1 = str1.split("").sort(); let sortStr2 = str2.split("").sort(); if (sortStr1.join("") == sortStr2.join("")) { answer = "YES"; } else { answer = "NO"; } return answer; }
-
미해결자바 코딩테스트 - it 대기업 유제
회장선거 질문드립니다.
vote의 밸류값을 꼭 HashSet으로 잡는 방법 말고는 없는건가요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
dev c++ 에서 c++98 이라 for-each 구문이 적용이 안되요.
혹시 devc++ 에서는 어떻게 해결할수잇나요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
효율적인 코드인지, 강의에서 이해되지 않는 부분이 있습니다.
안녕하세요.첫번째 링크는 해설 듣기 전 제가 작성한 코드고 두번째 링크는 큰돌님 정답 코드입니다.먼저 제가 짠 코드가 괜찮은 코드인지 의견 듣고 싶고,또 큰돌님께서 짠 코드중cnt[a - 'a]이 부분이 이해가 가지 않습니다.'a'가 아스키코드인 97로 변한다는 것은 이해했습니다. 그런데a는 타입이 char니까 baekjoon을 입력받으면 반복문으로 들어갔을땐cnt[b - 97], cnt[a - 97], cnt[e - 97]...이렇게 되야하는게 아닌가요..?실제 작동은 cnt[98 - 97], cnt[97 - 97], cnt[101 - 97]이렇게 되는데char 타입의 a가 왜 아스키코드로 변하는지 잘 모르겠습니다.감사합니다.http://boj.kr/e1b91e80fb9d4a68a4e83d27661576c5https://www.acmicpc.net/source/share/1a1898996c8542889b32b4c1b2498dd0
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
BFS/DFS 학습 중에 궁금한 점
안녕하세요, 큰돌 강사님!!졸업하고 취준 기간에도 꾸준히 학습을 하면서 도움을 받고 있습니다. 지금 BFS/DFS 복습을 하면서 궁금증이 생긴 것이 있는데, 코드 상으로 void dfs(int y, int x){visited[y][x]=1;for(int i=0; i<4; i++){ if(...visited[ny][nx]) continue;}}와 visited[y][x]=1 코드 없이 그냥 dfs를 하는 것의 차이는 무엇인 가요? 2주차에서의 dfs와 3-C 인구이동에서의 dfs의 차이점이 궁금합니다~~
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
시간초과가 나옵니다
안녕하세요 좋은 강의 감사합니다.저는 _mp[세로줄][점선] 이렇게 생각해서 구현했습니다.문제에서 나온것과는 다르게 사다리가 놓을수 있는 곳을 세로로 생각해서 코드를 짰습니다. 그래서 UP DOWN이 있습니다.구현과정에서 인덱스는 0부터 시작하도록 설정했습니다.http://boj.kr/a4dda6bde3c04184b402349de75eefbc시간초과가 나서 수정해보다가 안되서 질문올립니다. 감사합니다.
-
미해결자바 코딩테스트 - it 대기업 유제
서로 다른 빈도수 만들기
public int solution(String s){ int answer = 0; HashMap<String, Integer> map = new HashMap<>(); HashSet<Integer> hs = new HashSet<>(); //유일하게 존재해야한다 => 해시셋 사용 String[] list = s.split(""); for(int i=0; i<list.length; i++) { map.put(list[i], map.getOrDefault(list[i], 0)+1); } for(String x : map.keySet()) { int check = map.get(x); while(hs.contains(check)) { //셋에 이미 숫자가 있으면 하나를 감소 check--; if(check==0) { //0은 넣지 않는다. answer++; break; } answer++; } hs.add(check); } return answer; }이처럼 작성했는데 답은 모두 맞게 출력되는데, 강사님이 작성하신 알고리즘이랑 동일한 건가요???
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파이썬 알고리즘 코딩테스트 입문 강의와 차이점이 어떤게 있나요?
파이썬 알고리즘 코딩테스트 입문 강의와 차이점이 어떤게 있나요? 문제 차이나 난이도 혹은 업데이트된 부분이 있을까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-F질문입니다.
안녕하세요, 큰돌님아래코드의 시간 복잡도는 2^26 * 50이라고 생각해서 1초안으로 통과 된다고 생각하는데, 시간초과가 나는 이유가 궁금합니다.저의 계산법 2^26 == 10^7 10^7 * 50 = 10^81초 == 10^9통과가능https://www.acmicpc.net/source/61972721