묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요! 큰돌님 질문있습니다
강의 매우 유익하게 듣고있는 학생입니다! 많이 부족하지만 열심히 공부하는 중입니다!2-J문제 풀이에서for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i][j] == 0) { int cnt = 1; while (a[i][j + 1] == -1) { a[i][j + 1] = cnt++; j++; } } } } 여기서 while문 돌면서 j++을 계속 해주는데 열을 계속 증가시키면서 -1인지 아닌지를 검사해주는데 j < m인 조건을 안걸어주면 j++을 계속하면서 index범위를 침범하지 않나 싶어서 질문 드립니다!
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
백트레킹 (냅색) 코드!
재귀 안에 answer 변수를 사용하려면 global answer 로 지정 해줘야 하지 않나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-Q 1344 문제 질문입니다!
7-Q 1344 문제 질문입니다!#include <bits/stdc++.h> using namespace std; double A,B,ret; // 1~18까지 소수가 아닌 수로 배열 선언 int arr[11]={1,4,6,8,9,10,12,14,15,16,18}; int main() { cin >> A >> B; // 2차원 배열을 통해 18 combination n을 구현 for (int i=0;i<11;i++){ for (int j=0;j<11;j++){ double A_com=1,B_com=1; double per=1,A_per=1,B_per=1; //A_com으로 A가 arr[i](소수가 아닌 수만큼) 번 득점했을 때의 경우의 수를 구함 //A_per은 arr[i]만큼 득점했을 확률, 18-arr[i]만큼 득점 못했을 확률을 곱함 for (int k=0;k<arr[i];k++){ A_com*=(18-k); A_com/=(k+1); A_per*=(A/100); } for (int k=0;k<18-arr[i];k++){ A_per*=(100-A)/100; } //B도 마찬가지 for (int k=0;k<arr[j];k++){ B_com*=(18-k); B_com/=(k+1); B_per*=(B/100); } for (int k=0;k<18-arr[j];k++){ B_per*=(100-B)/100; } //A_com*A_per은 A가 arr[i]만큼 득점할 확률 //B_com*B_per은 B가 arr[j]만큼 득점할 확률 //모두 곱하면 A와 B 모두 소수가 아닌 숫자만큼 득점할 확률 per*=A_com*A_per*B_com*B_per; ret+=per; } } // 1-(A와 B모두 소수가 아닌 숫자만큼 득점할 확률)=적어도 한 팀이 소수로 득점할 확룰 printf("%f",1-ret); }문제 해설과는 다르게 조합을 이용해서 풀었는데 결과가 맞지 않습니다. 예제 1번과 2번은 맞는데 어떤 부분이 잘못되었는지 알려주시면 감사하겠습니다 ㅠㅠ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
Array에 copy()함수를 쓰는 부분에서 질문있습니다.
copy의 인자로 v, v+5, ret을 넣는데 원래 copy(InputIterator first, InputIterator last, OutputIterator result) 이렇게 이터레이터가 들어가야 하잖아요array to pointer decay 때문에 그냥 v를 넣으면 되는 건가요? 포인터로 선언을 시켜주지 않아도 이터레이터가 들어가야 할 자리에 인자로 넣어주면 이런 현상이 일어나는건지 궁금합니다!
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
프로그래머스 풀이 문의
선생님 안녕하세요 선생님이 새로 강의 여신 이 강의를 다듣고 나면프로그래머스 레벨 2정도까지는 어느정도 다 풀수 있을까요? 기업 시험을 보게되면 프로그래머스 형식으로 문제를 풀게되서 문의드리게 되었습니다 ㅠ 기존에 올리셨던 파이썬 프로그래머스 문제풀이 강의도 듣고는 있는데 알고리즘에 대한 이론 지식이 부족해서 이강의도 끊게 되었습니다 ㅠ말씀부탁드립니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
레벨로 풀기 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강사님께서 강의 도중 2차원 문제일 경우 레벨로 푸는게 힘들다고 하신 이유가 궁금합니다. 다른 분들이 숙제검사 맡으신 것처럼 레벨로 푸는 것 역시 배열을 새로 만들어서 값을 저장하기때문에 2차원 문제도 레벨을 통해 거리를 구하고 2차원 배열에 저장하는 방법으로 풀리지 않나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-D 메모리 초과 질문드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.http://boj.kr/78f586fab057402f93621ce7d148e6bb지도를 입력받을 때 탈출 부분을 벡터에 push_back 하고사람과 불을 각각 bfs 돌렸습니다.탈출 부분 벡터를 반복문으로 돌면서탈출이 가능한 경우 그 시간을 ret 벡터에 넣고 ret의 크기가 0이면 impossible을 출력하고0이 아니면 정렬하여 맨 앞의 숫자를 출력하도록 했는데메모리 초과가 뜹니다... ㅠㅠ 왜그럴까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3 - J 풀이방법
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요.3 - J 주난의 난 문제를 다음과 같은 방법으로 풀었습니다2차원 arr 에 입력을 저장하고 상하좌우 bfs 로 탐색을 진행하면서 만약 '1' 이 나올 경우 이를 q2에 저장만약 '0' 이 나올 경우 계속 bfs 탐색을 진행하고목표에 도달하지 못하고 탐색을 다 마친경우q2 에 저장된 '1' 을 전부 '0' 으로 바꿔주고 BFS 탐색을 다시 처음부터 진행위의 같은 방법으로 진행하였는데 큰돌의 해설을 보니'0' 이 아닌 경우 '0' 으로 바로 바꾸고 탐색을 마친 후temp 큐에 있던 좌표를 기반으로 다시 탐색을 진행하게 되는데저는 '1' 을 마주친 경우 바로 바꾸지 않고 나중에 바꾸고탐색을 처음부터 다시 진행큰돌님의 코드는 '1' 을 마주친 경우 바로 바꾸고 탐색을 이어서 진행으로 해석할 수 있는 걸까요??코드의 로직은 동일하나 변경 시점과 탐색 시점이 다른 거다 라고 보면 될까요??큐를 2개 써야된다는 큰돌님의 조언만 듣고 바로 문제를풀어서 정답을 맞았지만 정확히 이해가 됐는지 확인하고자 질문드립니다!!제 전체 코드는 https://www.acmicpc.net/source/66428450입니다!그리고 저는 BFS 를 처음부터 탐색하여 visited 를 계속 초기화 해주었는데fill(&visited[0][0], &visited[0][0] + N * M, 0); 으로 문제에서 주어지는 N 과 M 크기 만큼만 초기화 하려고 하니 무한루프를 벗어나지 못하는 일이 생겨fill(&visited[0][0], &visited[0][0] + 301 * 301, 0); 결국 visited 배열의 크기 만큼 초기화를 하는 것으로 바꾸니 정상 동작하였습니다!저는 처음 코드가 사용한 만큼의 영역에 대해서만 초기화 한다고 생각했지만 그렇지 않은 걸까요??
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
증가수열 만들기
from collections import deque N = int(input()) N_list = list(map(int, input().split())) dq = deque(N_list) current = 0 res = "" left = dq.popleft() right = dq.pop() while len(dq) >= 0: if current > left and current > right: break if len(dq) == 0: if current < left and current < right: if left < right: res = res + 'L' # current = left break elif left > right: res = res + 'R' # current = right break elif left > current > right: res = res + 'L' # current = left break elif right > current > left: res = res + 'R' # current = right break else: if current < left and current < right: if left < right: res = res + 'L' current = left left = dq.popleft() elif left > right: res = res + 'R' current = right right = dq.pop() elif left > current > right: res = res + 'L' current = left left = dq.popleft() elif right > current > left: res = res + 'R' current = right right = dq.pop() print(len(res)) print(res)deque 이용하여 pop(), popleft() 로 left, right 설정하여 분기하면서 찾았는데 실제 코딩테스트에서 이러한 코드도 시간 초과 문제가 발생하지 않을 지 궁금합니다.강사님 풀이의 경우 while 문 안에 sort()가 계속 돌아가서 시간 이 더 오래 걸릴거 같다고 생각해서 질문드립니다!
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
와우... 익숙하지 않은 방법이라 어렵네요. 객체로 데이터를 가공해서 풀어봤습니다. [리뷰부탁드려요]
const solution = (arr, mathScore={}) => { let count = result = 0; arr.forEach((list) => { list.forEach((rank, idx) => { mathScore[rank] = mathScore[rank] ? [...mathScore[rank], idx] : [idx] }); }); for(let i=1;i<=arr[0].length; i++) { for(let j=1;j<=arr[0].length; j++) { count=0 if(i !== j) { for(let k=0;k<arr.length; k++) { mathScore[i][k] > mathScore[j][k] && count++ } } count === arr.length && result++ } } return result }
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니다.
function solution(size, arr) { let answer = [0, 0, 0, 0, 0]; arr.forEach((element) => { if (!answer.includes(element) && answer.length !== size) { answer.unshift(element); } else if (!answer.includes(element) && answer.length === size) { answer.pop(); answer.unshift(element); } else if (answer.includes(element)) { let index = answer.findIndex((el) => el === element); let tmp = answer[index]; answer.splice(index, 1); answer.unshift(tmp); } }); return answer; } forEach안에서 for문을 돌지 않고 짜봤습니다.좀 코드가 지저분한것 같은데 괜찮은 코드일까요?감사합니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
정수론 강의 14252문제
왜 두 수 사이에 3개 이상은 불가능한지 귀납법으로 어떻게 증명할지를 모르겠어서 질문 남깁니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5430 시간초과부분 질문있습니다.
https://www.acmicpc.net/source/66347779문제코드입니다중간에 시간초과가 나는부분이 find와 substr등의 함수를 이용해 덱에 넣어야하는 넘버를 체크하는데에 시간초과가 발생하는듯 하여 읽어들인 문자열에서 숫자를 카운팅하여 집어넣는식으로 해결하였는데해당 부분의 find와 stoi, substr등으로 인해 시간초과가 발생하는것이맞을까요?
-
해결됨코딩테스트 [ 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인 이유가 궁금합니다!