묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-G 질문입니다.
어느 부분을 고쳐야할까요?http://boj.kr/27d25d91cf814662acfc6944406fbd32
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
카운트 부분 질문드립니다.
if(count(arr, mid)==c) {answer=mid;lt=mid+1;} else if(count(arr, mid)<c) rt=mid-1;else lt=mid+1;카운트가 c보다 큰 값인 경우에 answer=mid를 해주지 않으면 왜 오답으로 나오는지 모르겠습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
DFS 종화 문제 질문드립니다.
안녕하세요. 선생님멀어 보였던 DFS를 이해하고 코딩하고 있다는게 놀라운 수강생입니다. 종화는 방구쟁이야 문제 관련되서 궁금한게 있어 질문드립니다. 저 같은 경우에 visited를 빼고 하나의 함수로 구현하였습니다.이렇게 구현해도 괜찮을까요? 제 풀이가 맞을지 걱정되서 질문 남깁니다.감사합니다. http://boj.kr/6dccc9b963c543a0bd537144b48beb0a
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
회문검사 알파벳을 위하여 아스키코드를 활용 해보았습니다.
감사합니다.function solution(args) { let answer = "YES"; const char = args.toLowerCase(); const originalArray = []; for (const val of char) { if (val.charCodeAt() >= 97 && val.charCodeAt() <= 122) { originalArray.push(val); } } if (originalArray.join("") !== originalArray.reverse().join("")) answer = "NO"; return answer; } console.log(solution("found7, time: study; Yduts; emit, 7Dnuof"));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
소문자로 바꾼후에 reverse를 통해서 구해보았습니다
감사합니다.function solution(args) { return args.toLowerCase().split("").join("") === args.toLowerCase().split("").reverse().join("") ? "YES" : "NO"; } console.log(solution("gooG"));
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
5-b 시간복잡도
다른질문과 비슷한 질문인데 이해가 잘 안가서 좀 더 자세한 답을 부탁 드리고자 합니다.#include <bits/stdc++.h>using namespace std;int n;vector<pair<int,int>> v;int a, b;priority_queue<int, vector<int>, greater<>> pq;int ret;string s,f;int main(){ cin >> s>>f; while (s.find(f) < s.size()){int n = s.find(f);s.erase(n, f.size());//cout << s<<"\n";}if (s.size())cout << s << "\n";elsecout << "FRULA" << "\n";}제 코두의 경우 시간복잡도가 O(N)이 아니라 O(n^2) 인 이유를 좀만 자세하게 설명해주시면 감사하겠습니다. 비슷한 질문 답변 내용이 이해가 잘 안되서 한 번 더 잘문드립니다. 저는 천만의 경우 1000만 + 999만 999 + ... 1 이라고 생각이 되서요 ㅠㅠ.while 안에서의 시간복잡도 계산이라 더 이해가 안가는 것 같기도 합니다..
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
반례를 찾지 못하겠습니다.
http://boj.kr/6258c1ff85134915a0cdfa47b6c7266f우선 저도 dfs 형식으로 cctv의 개수만큼 0000부터 3333까지 방향을 바꿔가면서 모든 경우를 탐색하는 완탐을 구현했습니다.다만 다른 부분이 있다면, 비트 마스킹을 활용했다는 점과 전역변수 사용을 하지 않았기에 원복을 딱히 시키지 않았다 인데, 시간초과도 아닌 틀렸습니다가 나옵니다.ㅠㅠ조언 주시면 감사하겠습니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
section2 - 2.보이는학생 질문입니다 !
function solution(arr){ answer = 0; arr[0] ? answer += 1 : '' for (let i=1; i<arr.length; i++){ if(arr[i]>arr[i-1]) answer += 1 else if(arr[i] === arr[i-1]) answer -= 1 } return answer; } let arr=[130, 135, 148, 140, 145, 150, 150, 153]; console.log(solution(arr));위 내용처럼 작성해도 문제없는 코드일까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-B_ 배열 참조
안녕하세요 큰돌님! 함수 매개변수 참조 관련하여 궁금한 것이 있습니다. 배열을 main함수에서 이렇게 선언하고 -> int a[n]; check함수에서 int a[]로 참조하여 가져왔습니다. 근데 check함수 내에서 for문을 작성할 때 for(int i : a) 이런 형태로 사용하면 오류가 나더라구요 ㅜㅜ 구글링도 해봤는데 이유가 안 나와서 질문 남깁니다. 질문: 참조를 해서 가져온 배열은 for(int i : a) 형태로 사용하지 못하나요? bool check(int mid, int a[]){ // int *a도 가능 int sam=0; int cnt=0; for(int i=0; i<n;i++){ // for(int i : a) 이렇게 쓰면 오류 남http://boj.kr/36a79858aca1486097ef4c35007c5d42
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
readline을 어떻게 사용해야 할까요?
안녕하세요 선생님!readline이 입력이 빠르다고 해서 가능하면 readline을 이용해서 입력을 받고 싶습니다.그런데 readline을 이용해서 보드판 입력을 받으면 원하지 않는보드판이 만들어지는데 그 이유를 모르겠어서 질문드립니다!#1import sys sys.stdin=open("input.txt","rt") if __name__=="__main__": board = [ list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(10) ] for x in board: print(x)위처럼 보드를 만들면 첫번째 행은 무시되면서 마지막 행은 빈 리스트가 생성됩니다.#2import sys sys.stdin=open("input.txt","rt") input=sys.stdin.readline().rstrip if __name__=="__main__": board = [ list(map(int, input().split())) for _ in range(10) ] for x in board: print(x)위 처럼 보드 입력을 받으면 첫번째 행을 10개 복사한 보드가 만들어지니다. - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G_12851 숨바꼭질2
안녕하세요 큰돌님! 제가 재귀 함수로 한번 풀어보려 했는데 막히네요...ㅎ 코드를 어느 방향으로 수정해야할지 모르겠습니다 ㅜㅜ http://boj.kr/c824ffda8bc049939849fd836007e3de 혹시라도 재귀로는 그냥 답이 없다면 bfs로 다시 공부하겠습니다..ㅎ
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
2강 정수론 #15736 질문입니다.
n = int(input()) answer = 0 for i in range(n+1): if i**2 > n: break else: answer = i print(answer)이렇게 풀었는데, 백준에서 틀렸습니다.. 왜 틀렸을까요??
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
매출액의 종류 문제 풀이 질문 있습니다
매출액의 종류 문제 풀이 질문 있습니다.public ArrayList<Integer> solution(int n, int k, int[] arr) { ArrayList<Integer> answer = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < k - 1; i++) { map.put(arr[i], map.getOrDefault(arr[i], 0) + 1); } return answer; }처음에 k-1 개만 map에 세팅해줘야 하는 이유가 뭔가요?k개까지 세팅해야 하지 않나요? 만약에 k개까지 세팅한다면 코드를 다음과 같이 할 수 있는데,이때 두번째 for문의 if문의 조건에서 왜 HM.get(arr[lt])이 1보다 큰지의 여부로 바뀌는 것인가요? public ArrayList<Integer> solution(int n, int k, int[] arr) { ArrayList<Integer> answer = new ArrayList<>(); Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < k; i++) { map.put(arr[i], map.getOrDefault(arr[i], 0) + 1); } answer.add(map.size()); int left = 0; for (int right = k; right < n; right++) { map.put(arr[right], map.getOrDefault(arr[right], 0) + 1); if (map.get(arr[left]) > 1) { map.put(arr[left], map.get(arr[left]) - 1); } else { map.remove(arr[left]); } left++; answer.add(map.size()); } return answer; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
[4-D_1987_ 알파벳] bfs나 dfs로는 풀 수 없을까요?
처음 최단 거리를 구하는 문제여서 bfs로 접근했습니다. 하지만 bfs로 최단거리를 구할 경우 방문한 알파벳을 다시 방문하면 안된다는 조건 때문에 최댓값이 이상하게 나와서 dfs로도 시도해봤습니다. dfs가 정답과 좀 더 가깝게 잘 짠 것 같은데 마지막 테스트 케이스를 통과하지 못하네요ㅜㅜ 뭔가 둘 다 visited 원복과 초기화가 잘 안되어서 그런 것 같은데 어떻게 해야할지 모르겠습니다 ㅠㅠ 이 코드를 어떻게 수정하면 좋을까요? ㅠㅠ1. bfshttp://boj.kr/eab39a3f2732430eaa02117bc49541f6 dfs http://boj.kr/cf22ef7e2cab42b491ce50258f795253
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-c_17471 1차원 벡터 2차원 벡터
안녕하세요 큰돌님 항상 좋은 강의 감사합니다. 비트 마스킹 문제가 너무 어렵네요...ㅎㅎ 열심히 연습해야겠습니다.질문은 다름이 아니라 간선 정보를 입력 받을 때 1차원 벡터 adj를 선언하셨는데 adj[i].push_back(temp); 이런 형태로 push 하면 2차원 벡터로 되는 것 아닌가요? 부분 코드vector<int> adj[11];...int main{for(int i=1; i<=n; i++){ cin >> m; for(int j=0; j<m; j++){ cin >>temp; adj[i].push_back(temp); // <- 여기 이 부분 2차원 벡터여야 가능한거 아닌가요? adj[temp].push_back(i); } } ...제가 생각한 1차원 벡터 2차원 벡터는 아래 그림과 같습니다.아 그리고 제 그림 좋게 봐주셔서 감사합니다.ㅎㅎ 이해하는데에는 큰돌님 말씀처럼 직접 그리는 것 만큼 좋은게 없더라구요 혹시 몰라 전체 코드도 남깁니다!http://boj.kr/9fea383a1aba4c2ca268cf51acc08257
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
14627 파닭파닭 문제 질문!
안녕하세요 항상 좋은 강의 감사합니다.문제를 푸는 도중 의문점이 생겨 문의 드립니다.저는 밑 코드처럼 코드를 짰는데,제 생각에는 파닭에 넣을 파의 최대 길이(즉, high)값은 가장 짧은 파의 길이보다 길 수 없으므로 (왜냐면 2개의 파를 쓸수없기때문)처음 입력을 받는 과정에서 min값을 구하여 그 값을 high로 설정하고 문제를 풀었습니다.그런데 그 코드에서는 실패하고 선생님 코드처럼 high값을 1e9로 설정하여야 통과하더라고요어떤 부분에서 문제점이 있는지 궁금합니다.#include<bits/stdc++.h> using namespace std; typedef long long ll; ll S, C, minnum=1000000000, num, msum, ret; void solve(vector<ll>& vec) { ll lo = 1; // lo를 0으로 하게되면 mid가 0이되는 경우가 생겨 /0을 하게되어 오류가 나게된다. ll hi = minnum; ll mid; while (lo <= hi) { mid = (lo + hi) / (1LL * 2); ll cnt = 0; for (int i = 0; i < S; i++) cnt += vec[i] / mid; if (cnt >= C) { // 가능한 경우 더 줄여보기 lo = mid + 1; ret = mid; // ret을 정해야하는 이유는 마지막으로 가능했던 수가 최종수가 되기 때문이다. } else { hi = mid - 1; } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); vector<ll> vec; cin >> S >> C; for (int i = 0; i < S; i++) { cin >> num; minnum = min(minnum, num); // minnum을 구해야하는 이유는 최대 파의 양이기 때문이다. msum += num; // 총 파의양은 남는파의 양을 구할때 사용된다. vec.push_back(num); } solve(vec); cout << msum - ret*C << "\n"; return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 질문
글자가 이상하게 올라갔네요 다시 질문올립니다.강의를 듣고 아래 코드처럼 다시 한번 풀어봤습니다.main함수 안에서 풀었을 때는 통과가 되었는데 bfs를 밖으로 빼서 풀었더니 틀리게 되었습니다.틀린 원인이 bfs를 밖으로 빼서 그런건지 아니면 제가 확인하지 못한 로직이 문제가 있는지 모르겠습니다.http://boj.kr/4f01272dd1a042cd96cb875dbb4bb1e0링크도 잘못올려서 다시 수정해서 올렸습니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
split() 시간복잡도
유사한 질문이 있어서 답변을 보고 시간복잡도를 개선할 수 있는 split()코드를 짜봤는데요.하지만 제가 짠 split() 코드에 생각못한 맹점이 있는지, 이렇게 사용을 해도 되는지 궁금해서 질문올립니다.시간초과 코드http://boj.kr/2ea82a9bda6a40f9a88765151f190df9통과 코드 http://boj.kr/583e73a687c145d3b354c1ecca0ad631이 문제에서는 다른 질문에서 말씀해주신대로 그냥 공백을 제외하고 숫자를 세는 방법이 더 좋고, 저도 그렇게 풀긴했지만 split()으로 한 번 풀어보고 싶어서 도전하다가 이렇게 만들어봤습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 듣고 아래 코드처럼 다시 한번 풀어봤습니다.main함수 안에서 풀었을 때는 통과가 되었는데 bfs를 밖으로 빼서 풀었더니 틀리게 되었습니다.틀린 원인이 bfs를 밖으로 빼서 그런건지 아니면 제가 확인하지 못한 로직이 문제가 있는지 모르겠습니다. #include <bits/stdc++.h> using namespace std; #define y1 aaaa int n, m, x1, y1, x2, y2, visited[304][304], cnt; char a[304][304]; string s; const int dy[] = {-1, 0, 1, 0}; const int dx[] = {0, 1, 0, -1}; void bfs(int sy, int sx, int ey, int ex){ visited[sy][sx] = 1; queue<int> q; q.push(1000*sy + sx); while(a[ey][ex] != '0'){ cnt++; queue<int> temp; while(q.size()){ int y = q.front()/1000; int x = q.front()%1000; q.pop(); for(int i=0; i<4; i++){ int ny = y+dy[i]; int nx = x+dx[i]; if(ny<0 || ny>=n || nx<0 || nx>=m || visited[ny][nx]) continue; visited[ny][nx] = cnt; if(a[ny][nx] == '0'){ //0을 만나면 q에 0이 없을때까지 계속 돈다. q.push(1000*ny + nx); } else{ //1이나 목적지#을 만나면 0으로 바꾸고 그 위치를 temp에 기억해둔다. a[ny][nx] = '0'; temp.push(1000*ny + nx); } } } //q에 0이 없어지면 temp에 저장해두었던 1의 위치들을 q에 다시 넣어서 //0에서 했던 과정들을 다시 반복해준다. q = temp; } } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> n >> m; cin >> x1 >> y1 >> x2 >> y2; x1--, y1--, x2--, y2--; for(int i=0; i<n; i++){ for(int j=0; j<m; j++){ cin >> a[i][j]; } } bfs(y1, x1, y2, x2); cout << visited[y2][x2] << '\n'; return 0; }
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-A_ 2792 보석상자 강의 질문
안녕하세요 큰돌님 강의를 듣다가 질문이 생겼습니다!큰돌님께서 3분쯤에 질투심을 4로 하면 조건 충족을 못하신다고 하셨는데 보석을 못받는 학생이 생겨도 되므로 질투심 4일때는 조건은 만족하지만 최소값은 아니여서 정답이 아닌걸로 생각했습니다. 아래 그림을 봐주시면 질투심이 2일 때 학생수가 6명이 필요하므로 check함수의 n(학생수)>=num(질투심)을 충족하지 못한다고 생각했습니다. 제가 잘못 생각한 것일까요..?