묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨코딩테스트 [ ALL IN ONE ]
two_sum dictionary 적용 관련 질문드립니다.
안녕하세요! two_sum 문제에 dictionary를 적용 관련하여 문의드리고자합니다.강의 코드에서는 중복값이 존재 (ex : nums = [4,1,9,7], target = 14])일 때에 대해서는 해결이 되지 않았고, 해당 문제에 대해서는 해결을 하였습니다.다만 leet code에서는 같은 값이 n번(n>=2) 들어갔을 경우 (ex : nums = [4,1,9,7,7], target = 14])에 대해서도 true를 반환해야할 것으로 보입니다.파이썬 dictionary의 경우 nums = [4,1,9,7,7]로 dictionary를 생성하게되면 중복값은 key값 생성이 되지 않는 것으로 확인됩니다.예를들어,memo = {}for index, v in enumerate(nums): memo[v] = index하게되면, { 4:0, 1:1, 9:2, 7:3, 7:4 }가 아닌 { 4:0, 1:1, 9:2, 7:4 }로 생성되는 것 같습니다. 이렇게 된다면 아래 조건식에서 판단이 어려운데 혹시 dictionary를 무조건 활용한다는 가정하에 가능한 방법(중복 key처리, 중복값에 대한 여부 저장 등(?))이 있을까요?제가 문제에 대해 정확히 이해한것이 아닐 수 있어 만약 해당 상황에 대한 풀이는 필요하지 않다면 미리 양해말씀드립니다 ㅎㅎ..
-
미해결자바(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)); } }
-
미해결눈떠보니 코딩테스트 전날
퀵 정렬
퀵정렬 시간복잡도가 최악이 O(nlogn), 베스트가 O(n^2)라고 표기되어 있는데 이게 맞나요?
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
회의실 배정
n = int(input()) n_list = [list(map(int, input().split())) for _ in range(n)] n_list.sort(key=lambda x: (x[1], x[0])) cnt = 1 cur = n_list[0][1] for i in range(n): if cur <= n_list[i][0]: cur = n_list[i][1] cnt += 1 print(cnt)위 코드로 강사님이 제시해주신 케이스는 다 통과하는데,동일한 문제임에도 백준 1931번은 틀렸습니다로 출력됩니다. cnt=0, cur=0으로 고쳐서 해결하긴 했는데, 첫번째 회의는 무조건 회의실에 배정된다고 생각하는게 왜 틀린 생각인지 모르겠어서 질문 드리게 되었습니다. 감사합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-P 37%에서 막힙니다.
안녕하세요 선생님.항상 강의 잘 듣고 있습니다.제가 작성한 코드가 37%에서 막히는데 왜 틀린 건지 잘 모르겠습니다.고민하다가 해설 강의를 봤고 해설 강의 코드가 효율적이고 정확하다는 것을 이해했습니다. 다만, 제 코드가 비효율적이긴 해도 왜 틀렸는지 알고 싶습니다. https://www.acmicpc.net/source/66267875 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-O 질문드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/67fc25f9921f4194b579af1bdfb7a353안녕하세요 선생님,왜 정답코드와 다르게 if의 순서를 바꾸면 틀렸다고 나오는지 궁금해서 여쭤봅니다. 감사합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
질문있습니다!
뮤직비디오 문제에서count( ) 함수에서 cnt를 1로 설정하셨는데, 0이 아닌 1인 이유가 궁금합니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드려요 ㅎㅎ
const solution2 = (arr, count = 0) => { for (let i = 0; i < arr.length; i++) { for (let j = 0; j < arr.length; j++) { const isTop = i === 0; const isBottom = i === arr.length - 1; const isLeft = j === 0; const isRight = j === arr.length - 1; const current = arr[i][j]; (isTop || arr[i - 1][j] < current) && (isBottom || arr[i + 1][j] < current) && (isLeft || arr[i][j - 1] < current) && (isRight || arr[i][j + 1] < current) && count++; } } return count; };
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
EDWIN, 코드리뷰 부탁드립니다.^^ Array.from 을 활용해 봤습니다.
const solution = (arr) => { const resultArr = [ ...arr, ...arr.map((_,location) => Array.from({length:arr.length}, (_,idx) => arr[idx][location])), Array.from({length:arr.length}, (_, idx) => arr[idx][idx]), Array.from({length:arr.length}, (_,idx) => arr[arr.length-idx-1][arr.length-idx-1]) ] return Math.max(...resultArr.map(list => list.reduce((pre, cur) => pre+cur, 0))) }
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
다른 방식으로 풀었는데 이 풀이도 성능이 괜찮을까요?
function solution(n, m) { const answer = []; const DFS = (num, combination) => { if (combination.length === m) { answer.push(combination.slice()); return; } if (num > n) return; DFS(num + 1, [...combination, num]); DFS(num + 1, [...combination]); }; DFS(1, []); return answer; } console.log(solution(4, 2));이전에 배웠던 방식처럼 해당 수를 포함하는 경우와 포함하지 않는 경우로 DFS를 호출하고 combination 배열이 길이가 m이면 answer에 push하도록 했습니다.이 방식으로 풀어도 정답 코드와 성능이 크게 다르지 않을까요?
-
해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
중첩반복문 해결
const solution = (arr) => { let cnt = 1; let rankList = {}; let sort = [...arr].sort((a, b) => b - a); sort.forEach( (point, idx) => point !== sort[idx - 1] && (rankList[point] = cnt + idx)); return arr.map((point) => rankList[point]); };중첩을 결하고자 위와 같이 풀어봤습니다. 평가를 부탁드립니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-P 꽃길 문제 풀이 질문드립니다.
안녕하세요 선생님. 풀이를 보지 않고 단순히 브루트포스로 전체를 돌려서 구현해보았습니다.저는 일단 조합으로 3개를 뽑는 3중 for문을 돌려서 꽃을 심을 수 있는 3 지점의 좌표를 구하고, 그 후 해당 좌표들을 상하좌우로 퍼트려 서로 겹치는지와 화단 범위를 벗어나는지를 체크하여 문제없이 3개가 심어진다면 해당 부분들의 가격을 더해서 값을 구하는 식으로 로직을 짰습니다.하지만 예제는 맞는데 제출하면 2%에서 틀린다고 나옵니다. 틀리는 부분을 찾지 못하여 질문드립니다.http://boj.kr/cc392b4733d94aa9a3f67b831d041932
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
영화 수집 제 그림과 설명이 이해가지 않습니다..
https://postfiles.pstatic.net/MjAyMTA1MTNfNzIg/MDAxNjIwODgyMDkwMTI3._oXnW6b77oEMkcdomjgB8NMLStKeMWOmLgQl1rrNGHQg.ZGawtod2AJSOLywq734qeiWpcteLFDIEhcJ438xtc44g.JPEG.jhc9639/%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%93%9C132.JPG?type=w966 영화수집 # 문제해석이 이해가 가지 않습니다. 왼쪽에 3 Block이 하나 있고 2 Block이 3 두개 쌓아져 있습니다. 좌우 빨간 화살표가 의미하는 것과 오른쪽에 그림을 조금 더 상세히 설명해주실 수 있을까요..?트리라는 것은 알겠는데, 작동하는게 이해가되지 않네요. 추가로 좌표 이동의 의미도 한번 더 설명부탁드리겠습니다. 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8주차 그림 설명이 이해 안되요.
https://blog.naver.com/jhc96392~8 까지의 최소 인덱스를 계산 하는 예제가 이해되지 않습니다. 여기서 두번째부터 여덟번째까지 인덱스 중에 최소 값을 가지는 인덱스를 찾는 문제인건가요? 그렇다면 여덟번째 인덱스가 없어서 의하하구요.두 번째로, 세번째, 4번째, 6번째 인덱스만 비교한다는 것이 이해되지 않습니다. 부연: 아래 설명에 0~3까지의 요소값에서 level2에서 한번에 찾을 수 있다는 것은 이해가 됩니다. 왜냐면 level2 트리값이 이미 최소 인덱스를 들고 있기 때문입니다.
-
해결됨코딩테스트 [ ALL IN ONE ]
실제 사용 예시
linked list를 사용해야 하는 경우가 언제일까요? 실제 사용하는 문제를 보고 싶습니다제 생각에는 array list로 구현하고 visit같은 경우도 list slicing 후 +로 리스트를 합치면 N(1) 만에 가능하기 때문에 시간이 부족한 코테에서 언제 linked list가 꼭 필요할까 궁금합니다
-
미해결자바(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)); } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
다익스트라 알고리즘
안녕하세요 큰돌님 곧 있으면 공채 코테 기간이라 많은 준비를 하고 있습니다! 다름이 아니라 다익스트라 알고리즘이라는 것이 가끔 코테에 나온다고 들었습니다.제가 지금 시간이 없어서 코테 시험 기간까지는 모든 문제를 풀진 못 할 거 같습니다.. 우선적인 것들 다시 풀어보고가야할 것 같은데혹시 다익스트라 알고리즘이 배우고 가야 할만큼 자주 나오는 유형인가요??
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드리뷰 부탁드립니다.
<html> <head> <meta charset="UTF-8" /> <title>출력결과</title> </head> <body> <script> function solution(s) { let answer; let stack = []; for (let x of s) { if (x === "+") { stack.push(stack.pop() + stack.pop()); } else if (x === "-") { stack.push(stack.pop() - stack.pop()); } else if (x === "*") { stack.push(stack.pop() * stack.pop()); } else if (x === "/") { stack.push(stack.pop() / stack.pop()); } else stack.push(Number(x)); } answer = stack[0]; return answer; } let str = "352+*9-"; console.log(solution(str)); </script> </body> </html> 위에 같이 풀어도 상관 없을까요? rt, lt변수를 사용하지 않고 그냥 바로바로 pop()한 값들을 계산하여 넣어줬습니다. 가독성이라던가 코드의 질(?) 측면에서 문제점이 있을까요? 감사합니다.
-
미해결자바(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)); } }