묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
map 자료구조를 이용한 중복된 요소 제거하는 방법에서 질문있습니다!
#include <bits/stdc++.h> using namespace std; map<int, int> mp; int main() { vector<int> a = {1,2,2,3,3}; // for (int i : a) // { // if (mp[i]) // { // continue; // } // else // { // mp[i] = 1; // } // } for (int i : a) mp[i] = 1; vector<int> ret; for (auto i : mp) { ret.push_back(i.first); } for (int i : ret) { cout << i << "\n"; } } 이런식으로 처음 a 백터의 값들을 mp에 넣어줄 때 굳이 mp안에 있는지 확인하고 있으면 continue하고 없으면 mp[i] = 1;를 해주지 않고 그냥 a백터를 한 바퀴 순회하면서 전체적으로 다 넣어 줘도 되지 않나요? map 자료구조의 키값을 중복되지 않게 갖는다는 특징을 이용해서 중복된 요소를 제거를 하는 것처럼 어차피 한 바퀴 돌면서 중복되는 값들을 키값에 넣으려고 해도 중복되서 추가가 되지 않을거같은데 혹시 continue를 사용해서 코드를 짜는 이유가 따로 있을까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
8-R 다익스트라 2번 사용 풀이 질문입니다.
강사님 안녕하세요8-R 풀이에서 다익스트라 2번 사용하여 풀이를 해주셨는데요.강의 영상 1:54 부근에서 간선간 왔다갔다 할 수 있다고, 양방향 간선인 것 처럼 말씀해주셨는데.문제에서는 아래와 같이 간선은 단방향이고, X 지점까지 가는 경로와 돌아오는 경로가 다를 수 있다고 되어있습니다.각각의 학생들은 파티에 참석하기 위해 걸어가서 다시 그들의 마을로 돌아와야 한다. 하지만 이 학생들은 워낙 게을러서 최단 시간에 오고 가기를 원한다.이 도로들은 단방향이기 때문에 아마 그들이 오고 가는 길이 다를지도 모른다. N명의 학생들 중 오고 가는데 가장 많은 시간을 소비하는 학생은 누구일지 구하여라.X -> 각 노드 까지 가는 최단거리는 다익스트라로 구하는 것은 이해했는데 ,각 노드 -> X 까지 가는 경로를 구하는 방법을, 경로 가중치는 그대로 두고 단순히 간선 방향을 반대로 하여 다익스트라로 풀이하는 설명이 잘 이해가 되지 않습니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
5강 최적화 19942번 질문드립니다.
제가 코드를 짰는데 99퍼에서 오답처리가 났는데 어느부분을 놓쳤는지 모르겠어서 질문 드립니다. 코드 한 번 봐주실 수 있을까요..def func(idx,p,f,s,v,sum1): global min_sum if sum1 > min_sum: return if idx == N: if p >= mp and f >= mf and s >= ms and v >= mv: if sum1 < min_sum: min_sum = sum1 last1 = ''.join(map(str, visited)) dict1[min_sum] = last1 return elif sum1 == min_sum: return else: return else: visited[idx+1] = 1 func(idx+1,p+info[idx][0],f+info[idx][1],s+info[idx][2],v+info[idx][3],sum1+info[idx][4]) visited[idx+1] = 0 func(idx+1,p,f,s,v,sum1) N = int(input()) mp, mf, ms, mv = map(int, input().split()) info = [list(map(int, input().split())) for _ in range(N)] min_sum = 999999999999999999 visited = [0] * (N+1) dict1 = {} func(0,0,0,0,0,0) if min_sum == 999999999999999999: print(-1) else: print(min_sum) for i in range(1,N+1): if dict1[min_sum][i] == '1': print(i, end=' ')
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5 - X 파라미터로 array를 받을 때 질문
안녕하세요 강사님 ㅎㅎhttp://boj.kr/3ca01eafe71e4b31831368e71ae8e336해당 문제에서 cctv를 돌리는 로직이나 완탐을 하는 로직 같은 경우에 문제가 없어보이는데 go 메서드의 인자로 배열을 받는 것이 문제가 있는 것 같아 질문드립니다.디버깅 해보았을 때, 인자로 받는 배열이 매번 다음 go 재귀로 넘어가기 전에 memcpy를 하기때문에 그 전 go 실행이 다음 go 내부에서 사용하는 배열에 영향을 주지 않을 거라고 생각했는데, 카메라가 2개 이상 있는 케이스부터는 깊은 복사가 되지 않고 참조하는 것처럼 실행이 되어서 어떤 것이 문제일지 질문드립니다.
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
연결요소개수 - 파이썬 풀이 공유
안녕하세요 저는 강사님 강의로 공부하고 파이썬으로 코테를 준비하고 있습니다. 저와 같은 상황에 계신분들과 공유하고 싶어 글을 올립니다. 파이썬 풀이에서 부족한 부분 알려주시면 수정하겠습니다.~import syssys.setrecursionlimit(10 ** 6)N, M = map(int, sys.stdin.readline().split())MAX = 1000 + 10graph = [[False for in range(MAX)] for in range(MAX)]visited = [False for in range(MAX)]for in range(M):x, y = map(int, sys.stdin.readline().split())graph[x][y] = True graph[y][x] = Truedef dfs(idx):visited[idx] = True for j in range(1, N + 1):if not visited[j] and graph[idx][j]:dfs(j)cnt = 0for i in range(1, N + 1):if not visited[i]:dfs(i)cnt += 1print(cnt)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 내용 및 char 초기화에 대한 질문입니다.
안녕하세요 강사님 강의 너무 유용하게 보고 있습니다.교안 내용 관련 질문도 있는데 0주차에 관련 내용 수업이 없어서 여기에 같이 적어봅니다.https://www.acmicpc.net/ceinfo/65628884질문 1. 저 배열 초기화가 왜 문제인지 교안 내용만으로 이해가 어려워서 추가 질문드립니다. 저는 선언할 때 제외하곤 {0,}을 사용을 안하는데 아래에서 a[5] = {0,}; 이 부분이 혼동의 여지가 있어 문제라는건가요? 질문 2. 강사님 코드를 따라쳐보는 연습을 하고 있는데 char chMid; 이렇게 선언하니 아래 if(chMid)부분에서 애당초 0이 아닌 쓰레기값이 있어 문제가 되어 {}초기화를 해줬습니다. VS 2015를 사용중인데 구버전이라 초기화 지원이 안되는 걸까요? 아니면 다른 이유가 있다면 알려주시면 감사할 것 같습니다. PS. 가끔 드립치시는거 재밌습니다 ㅎㅎ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
next_permutation을 사용하면서 만약에 n개 중에서 n-2개의 값을 뺸다고 했을 때 중복이 발생하지 않도록 할 수도 있나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.next_permutation을 사용하면서 만약에 n개 중에서 n-2개의 값을 뺸다고 했을 때 중복이 발생하지 않도록 할 수도 있나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
투포인터 시간복잡도
http://boj.kr/3e78cb0c919942b99e839ea6eb90dfa6 해당 코드에서 투포인터를 사용시 시간복잡도가n log n(퀵 sort) + n (while 문) 으로 제가 생각을 해봤는데 맞을까요??
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
구간을 나누어 조건부로 처리해보았습니다 크크
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String word = sc.next(); char chr = sc.next().charAt(0); System.out.println(solution(word, chr)); } public static String solution(String word, char chr) { String answer = ""; List<Integer> list = new ArrayList<>(); for (int i = 0; i < word.length(); i++) { if (word.charAt(i) == chr) list.add(i); } int index = 0; for (int i = 0; i < word.length(); i++) { if(i == list.get(index+1) && i!= list.get(list.size()-1)) index++; if(i < list.get(0)) answer += list.get(0)-i; else if(i == list.get(index)) answer += 0; else if(i > list.get(list.size()-1)) answer += i - list.get(list.size()-1); else answer += Math.min((i-list.get(index)), (list.get(index+1)-i)); answer += " "; } return answer; } }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
조합 ? 문제 관련해서 질문 있습니다.
안녕하세요!문제를 풀다가 안돼는 부분이 있어서 질문드립니다.n개의 정수 중 r개를 뽑는 조합에 대한 총 경우의 수 문제인데테스트 케이스로 n = 30, r = 20 을 넣으면타임 아웃이 납니다. ide에서도 루프가 멈추지 않고요....다른 케이스는 통과하는데 이건 왜 안돼는지 모르겠습니다.1 <= r <= n<= 30import sys def ppopgi(arr, visited, start, depth, b): global count if depth == b: count += 1 return for i in range(start, len(arr)): if not visited[i]: visited[i] = True ppopgi(arr, visited, i+1, depth+1, b) visited[i] = False a, b = map(int, input().split()) arr = list(range(1, a+1)) count = 0 ppopgi(arr, [False]*len(arr), 0, 0, b) print(count)
-
미해결JavaScript 알고리즘 베스트 10
문제 풀이
안녕하세요!, 문제 8 ~ 11 까지 강의가 없는데 오류인가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-P
제가 문제를 제대로 이해했는지 궁금합니다! 강사님의 설명을 보면 뭔가 제가 이해한 거랑 다른 것 같아서요... 이렇게 A와 B를 선택하고 둘 사이에 있는 사람들 중 키가 A보다 작거나 B보다 작은 사람들이 있으면 한 쌍이 있다고 해줍니다. 위 그림의 경우에는 제가 검정색으로 동그라미 친 경우 한 개가 A보다 작거나 B보다 작다를 만족합니다.그래서 제가 짠 코드는 다음과 같습니다. 물론 50만까지인 n을 생각하면 해당 코드의 시간복잡도는 시도조차도해선 안될 코드지만 강사님의 설명을 보니 제가 문제의 이해를 잘 못 한 것 같아서요..!http://boj.kr/6bca539f74534117843fb4d22dee1e43
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
코드 리뷰 부탁드립니당
function solution(m, arr){ let answer = 0; for (let i = 0; i < arr.length; i++) { let sum = 0; let index = i; while(sum < m) { sum += arr[index]; if (sum === m) { answer++; break; } else index++; } } return answer; } let a=[1, 2, 1, 3, 1, 1, 1, 2]; console.log(solution(6, a)); 이렇게 작성해도 될까요 ?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션7) 16.사다리 타기(DFS)
안녕하세요, 강사님!강사님 풀이법 외에 제 코드로 풀면 어느 부분이 문제인지 알고 싶습니다. import sys sys.stdin=open("input.txt", "r") #좌, 우를 우선 탐색하도록 설정 dx=[0,0,1,-1] dy=[-1,1,0,0] def DFS(x,y): #특정 지점(2)에 도착하면 출발점 반환 if x==n-1 and board[x][y]==2: print(start) else: for i in range(4): xx=x+dx[i] yy=y+dy[i] if 0<=xx<n and 0<=yy<n and board[xx][yy]==1: board[xx][yy]=0 DFS(xx,yy) board[xx][yy]=1 if __name__=="__main__": n=10 board=[list(map(int, input().split())) for _ in range(n)] # 값이 1인 출발점을 찾기 for j in range(n): if board[0][j]==1: start=j DFS(0,j)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S 모범코드와의 차이점?
http://boj.kr/93da507ac8fa4b23a18ae6d3958a9095 저는 visited 배열을 사용하지 않고 1부터 n까지의 각 Vector에 영향을 주는 컴퓨터들의 노드 번호를 push한 이후에 1부터 n까지 n회 dfs를 하는 로직을 사용했고, 역시나 강의에서 말씀하신 대로 시간초과가 떴습니다. (Worst O(n^2)) (제 dfs 함수는 루트 노드를 제외한 노드의 개수, 즉 here 기준 자식 노드들의 개수를 구하는 함수입니다.)그런데 선생님 모범 코드와 다른 게 무엇인지 잘 모르겠습니다. 모범 코드도 1 ~ n까지 dfs를 n회 돌리면서 (루트 노드 포함) 자식 노드의 개수를 구하는 것 같은데 시간 초과가 나지 않는 이유가 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
알고리즘 교안 68~69p 질문
fill()함수로 전체 초기화를 하지 않고 8*8 정사각형만 초기화했을 때 문제점인데문제점의 원리가 잘 이해되지 않습니다.. 어떻게 이해하면 될까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
왜 틀렸는지 모르겠습니다 ㅠ
#include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); long long int N, M, low=1, high=0, ret=__LONG_LONG_MAX__; cin >> N >> M; vector<long long int> color; for (int i=0;i<M;i++){ long long int temp; cin >> temp; color.push_back(temp); high=max(temp,high); } while(low<=high){ long long int mid=(low+high)/2; long long int cnt=0; for (long long int &i:color){ cnt+=i/mid; if (cnt%mid) cnt++; } if (cnt>N){ low=mid+1; } else{ ret=min(ret,mid); high=mid-1; } } cout << ret; }강의를 듣기 전에 먼저 풀어보고 계속 틀려서 강의에서 나온대로 어느정도 수정했는데도 틀리는데 이유를 모르겠습니다...!
-
해결됨자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
4. 완전탐색에서 3. 멘토링 문제 문의
안녕하세요. 제가 문제를 정확하게 이해를 못한건지 이상한 부분이 있어서 문의 드려요. 답이 (3, 1), (3, 2), (4, 2)와 같은 결과를 만들 수 있다고 되어있는데, arr[2]번째 케이스에서는 해당이 되지 않는걸로 보여지는데 잘못 이해한 걸까요?arr[0]번째 케이스 => 3번 멘토 1등, 1번 멘티 3등 (조건 성립)arr[1]번째 케이스 => 3번 멘토 2등, 1번 멘티 4등 (조건 성립) arr[2]번째 케이스 => 3번 멘토 4등, 1번 멘티 3등 (조건 성립 X)let arr = [ [3, 4, 1, 2], [4, 3, 2, 1], [3, 1, 4, 2] ];
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-N 컴파일에러 원인을 모르겠습니다ㅜㅜ
안녕하세요 큰돌님 3-N 백준 9934번문제 컴파일에러 이유를 못찾겠습니다예약어등을 쓴것도 아닌것같은데 원인을못찾겠네요 ㅜㅜhttp://boj.kr/3bdacb3dfc12466d9f24d5716a194bc7
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
완전탐색 강의 1090번 문제 풀이 방법 의문
완전탐색 강의 마지막 문제 1090번 문제 풀이 방법에 의문이 생겨서 질문 올려봅니다. 강의에서는 우리의 집 중에서 한 곳에 모이면 된다고 풀이를 하셨는데, 예시에 나온 4 15 14 15 16 14 15 16 154명이 모이기 위한 최적의 장소는 (15,15)입니다. 백준에서도 이것이 정답 좌표이고. 그래서 혹시 제가 1번 2번 3번 아이디어를 이해하는데에서 잘못 이해한 부분이 있을까 싶어 질문을 올립니다.(15 14) (15 16) (14 15) (16 15) 중에 하나에 모인다는 말이 아닌것인가요?