묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
실력을 더 올리고나서 강의를 보는 것이 맞을까요?
안녕하세요 큰돌님.현재 강의 3주차 들어가고 있는데, 제가 c++도 교안으로 접하고, 자료구조 알고리즘에 대한 지식이 전무한 노베이스라그런지 3주차부터 상당한 난이도로 다가옵니다.1~2주차는 그래도 혼자서 풀만하기도 하고 이해가 안돼도 강의를 보면 바로 혼자서 풀 수 있는 정도였지만, 3주차부터는 혼자서 푸는 것은 고사하고 강의를 봐야 겨우겨우 로직이 이해되는 정도입니다.이 상태에서는 백준에서 기초 문제를 어느정도 풀고 와서 강의를 듣는 것이 도움이 될까요? 아니면 그냥 못풀더라고 계속 진행하는 것이 나을까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
채점 오류
package main;import java.util.Scanner; class Main{ public String solution(String str) { String answer=""; char [] charArray = str.toCharArray(); for( int i=0 ; i<charArray.length; i ++) { if(Character.isUpperCase(charArray[i])) { answer+=Character.toLowerCase(charArray[i]); }else { answer +=Character.toUpperCase(charArray[i]); } } return answer; } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); String str = sc.nextLine(); System.out.print(T.solution(str)); } } 대소문자 바꾸기 부분에서 , 이클립스에서는 잘 돌아가는데 자꾸 런타임 에러가 뜹니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
안녕하세요! 재귀함수에 관해서 질문드립니다
교안 p.118에 있는 재귀함수 예제문제에서 for(int i = depth; i < n; i++){ swap(v[i], v[depth]); //첫번째 swap(v[i], v[depth]); makePermutation(n, r, depth + 1); swap(v[i], v[depth]); //두번째 swap(v[i], v[depth]); } return;이렇게 예제가 나와있습니다.제가 이해한 바로는,함수 makePermutation에 (3, 3, 0)을 대입하면 i와 depth는 0으로 첫번째 swap(v[i], v[depth]); 은 swap(0,0)이 되고for문 안에 있는 makePermutation에 의해 매개변수 (3, 3, 0)이 (3, 3, 1)로 변하게되어 (3, 3, 1)에 해당하는 함수 makePermutation을 실행하게 되어 다시 첫번째 swap(v[i], v[depth]);이 실행되는 방식인 것으로 이해를 하였습니다.여기서 첫번째 swap(v[i], v[depth]); 의 역할은 이해가 가지만 두번째 swap(v[i], v[depth]); 의 역할은 이해가 가지 않아서 질문 드렸습니다. 감사합니다!
-
미해결코딩테스트 [ ALL IN ONE ]
시간복잡도
계산하는법을 몰라서 질문드립니다. [심화] 시간복잡도 강의에서 예시로 알려주심 Two sum 에서요제약조건 중에 아래와 같은 것이 있었는데요O(nlogn)에 10의 9승을 대입해도 10의8승이 넘어간다고 하셨는데nlogn에 10의9승을 n에 대입하고 나서 계산을 어떻게해야지 모르겠습니다10의 8승이 넘어가는지 어떻게 알 수 있나요?? 해당부분에 대해서 검색을 해봤는데나오지가 않네요ㅜㅜ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-K
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요! 1-K 해설을 보다가 24번째 줄에서 ret.insert()부분에서 ret.begin()을 생략해도 잘 돌아가던데 이에 관해 질문을 하기 전에 다른 사람들의 질문을 살펴 보았는데 insert의 첫인자에는 이터레이터가 필요하다고 들었습니다. 그냥 ret.size()/2만 넣어도 되는 이유가 무엇인가요?
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
섹션 4 -> 그리디 , 결정문제 질문
안녕하세요! 강의 정말 잘 듣고 있습니다.섹션 4를 풀다가, 어떤 문제를 그리디를 쓰고, 어떤문제를 결정알고리즘을 써야하는지 감이 잡히지 않아서 질문 드립니다. 답변해주시면 정말 감사하겠습니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-G번 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 3-G 문제에서 정점에 이미 방문한 경우(현 정점 거리 +1 == 다음 정점 거리) 인 경우만 체크해주는데(현 정점 거리 +1 < 다음 정점 거리) 인 경우는 존재하지 않아서 체크하지 않는 건가요??궁금해서 질문드립니다. 감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-C 실행 시간 질문드립니다.
안녕하세요 선생님, 강의 잘 듣고 있습니다!제가 해당 문제를 먼저 풀고, 선생님의 모범 답안과 비교해서 다시 보고 있는데, 선생님의 답안 실행 시간의 경우 80ms인데, 제 풀이의 경우 500ms가 나와서 어떤 부분에서 이렇게 시간이 많이 걸리는지 질문 드립니다.제가 생각했을 때, 제 풀이는 bfs를 사용했고, 선생님의 풀이는 dfs를 사용한 것이 가장 큰 차이인데, 관련해서 bfs를 이용해 문제를 푼 분의 비슷한 질문과 선생님의 답변을 읽어 봤는데, 제 코드가 특히 더 느려서 질문 드립니다.감사합니다.http://boj.kr/64d1e109011644a499285cf8df6422a5
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
이 문제에서 궁금한게있습니다.
ch[i] != 0라서 if문을 탐색하지않는다면 L에 해당하는 dfs함수는 뭘 반환하는건가요?? 반환하는게 안보일때는 return이 생략됐다고 생각하는건가요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A 문제 풀이 질문있습니다.
강사님 안녕하세요,4-A 문제에 대해 최대한 bitmask 사용하여 문제를 풀었는데,문제 pass 를 못하여 작성한 코드 질문드립니다.http://boj.kr/c8c4f304baa94765a7b205e181eadac7문제 풀이 강의에서는 식재료의 index 자체를 vector<int> v 에 담는 것으로 풀이하셨는데저는 식재료 index 정보를 담고있는 int 형 변수 자체를 최종 결과 출력까지 가져가서 켜진 bit 에 대한 index 를 출력하도록 구현했습니다.min_price 갱신로직도, 가격이 갱신되는 경우. 그리고, 동일 가격이 발생한 경우에 식재료 index 갱신하는 경우를 case 분류하여 작성하였습니다. bitmask 부분이 틀린 것 같지는 않는데, 8% 에서 계속 오류가 나오네요 ㅠㅠ무엇이 틀린 것인지 감이 오질 않습니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
비트마스킹 연산자 "1의 보수" 영문 표기법
안녕하세요,비트마스킹 개념 #2-4 비트연산자의 기초에서1의 보수 영문 표기가 one's completion 이라고 하셨는데one's complement 가 맞는 표현인 것 같습니다 ㅎㅎ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
격자탐색 문제에서 BFS 시간복잡도 질문드립니다.
안녕하세요!강의 잘 듣고 있습니다.문제를 풀다가 시간복잡도 계산에서 궁금한 점이 있어서 질문드립니다.구체적으로,백준 보물섬 문제와 같은 격자탐색 문제에서격자의 가로가 W, 세로가 H라고 할 때 BFS 시간복잡도를 대략 O(W*H)라고 생각하면 될까요?감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-O go 함수 질문 드립니다.
안녕하세요 강사님풀이 해주신 코드 기준 go 함수의 이중 for loop 에서, 변수 i 가 가로선의 index 를 나타내는 것으로 이해하고있는데for loop 에서 변수 i 의 시작이 왜 here 부터 시작해야하는지 이해가 잘 되지 않아서요.cnt = 0 에서 가로선 1개를 놓고, cnt = 1 에서 또 가로선을 1개 더 놓게 되는 상황에서cnt = 0 에서 놓았던 가로선 보다 같거나 아래 위치에 가로선을 놓아야한다는 조건이 어떻게 도출된 것인지 궁금합니다.(가로선을 놓을 때 접하거나 연속되지 않아야 한다는 조건은이중 for loop 안에 if 문에서 걸러지는 것으로 이해하고 있습니다) (변수 i 의 시작을 0 으로 고정하면 시간 초과가 되는 것은 확인했습니다..)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-A 출력 질문
안녕하세요 큰돌님!!덕분에 늘 좋은 강의 잘 듣고 있습니다. https://www.acmicpc.net/source/share/6fd1c581d7154d70a7523d1151aec4034-A를 공부하다가 질문이 있어서 게시글 남깁니다.제가 헷갈리는 부분은 이렇습니다. Q1. ret_v는 map자료구조인데요, ret_v[ret]과 같이 map에 접근한다면 ret이라는 키 값을 갖는 요소가 리턴되지 않나요? 그 요소는 vector 아닌가요..? Q2. 더 자세한 질문은 이렇습니다. sort()를 할 땐, ret_v[ret].begin()과 ret_v[ret].end()처럼 ret_v[ret]이 vector라고 가정하고 그 vector를 정렬하는 것처럼 보입니다. 그렇다면 ret_v[ret]는 vector를 리턴하는게 맞지 않나요? 이게 맞다면 Q1의 결과에 위배되는 것 아닌가요? 이 부분이 정말 헷갈립니다.Q3. 덧붙이자면, 해당 문제의 출력은 범위기반 for문을 통해 정답을 출력합니다. 그런데 for(int a : ret_v[ret]) 과 같이 접근하면 syntax오류가 뜨는건가요? sort()에서는 ret_v[ret]이 vector로 잘 인식했으면서.. 정답코드는 왜 ret_v[ret][0] 까지 명시해줘야 syntax오류가 없는건가요? 조금 질문들이 복잡해 보일 수 있겠지만, 디테일 측면에서 헷갈리고 있어서 어떤 개념이 약한지 보완하고 싶은 마음에 궁금한 부분을 모두 적었습니다. 가독성이 떨어진다면 다시 질문을 정리하여 올려보도록하겠습니다. 모쪼록 큰돌님의 답변을 기다리고 있겠습니다.감사합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1주차 1-O 질문드립니다
안녕하세요, 큰돌님위의 그림은 제가 1주차 1-O 문제를 어떻게 풀지 나름대로 전개를 해본 그림입니다.이를 코드로 변환하는 중, 정답이 계속 틀려서 확인해보니 큰돌님 코드에서는 빨간색 밑줄 친 부분의 코드가 분홍색으로 밑줄 친 부부인 (1%n), (11%n) 부분만 계산하는 코드를 확인하였습니다. 제가 전개한 식에서는 노란색 박스 친 부분인 (10%n)이 계속 곱해져야 하는것 같은데... 어디서 제가 실수를 한 것인지 잘 모르겠습니다. 감사합니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요. 다른 풀이도 풀었는데 괜찮을까요?
정답은 제대로 나오긴 했는데 시간 초과라던가 하는 문제가 없을까요?4중 for문은 생각지도 못했네요..ㅠㅠ sudoku = [list(map(int, input().split())) for _ in range(9)] def solution(sudoku): length = len(sudoku) a, b, c, = list(), list(), list() # 행열 검사 for i in range(length): row, col = list(), list() for j in range(length): row.append(sudoku[i][j]) col.append(sudoku[j][i]) if len(set(row)) != 9 or len(set(col)) != 9: return "NO" # 3x3 격자판 검사 a.extend(row[0:3]) b.extend(row[3:6]) c.extend(row[6:]) if i == 2 or i == 5 or i == 8: if len(set(a)) != 9 or len(set(b)) != 9 or len(set(c)) != 9: return "NO" a, b, c, = list(), list(), list() return "YES" print(solution(sudoku))
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
1068번: 트리
제가 다음과 같이 코드를 작성했는데,100%까지 가다가 틀립니다.. 어떤게 문제일까요? 반례를 제시해주실 수 있나요?감사합니다. https://www.acmicpc.net/problem/1068 import sys input = sys.stdin.readline n = int(input()) g = list(map(int, input().split())) m = int(input()) cnt = 0 def DFS(x): g[x] = -1 for i in range(n): if g[i] == x: DFS(i) DFS(m) for i in range(n): if g[i] != -1 and i not in g: cnt += 1 print(cnt)
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-S (1325번 - 효율적인 해킹) 문제 질문 드립니다.
안녕하십니까, 큰돌님! 2-S (1325번 - 효율적인 해킹) 문제 질문 드립니다.문제 예시는 통과하는 데 코드 제출시 계속 출력초과가 떠서 질문 드립니다.하기 아래 링크는 제 풀이 입니다.http://boj.kr/6fbef53ab3694838859828bf2a71d964 항상 좋은 가르침을 주셔서 감사합니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-O 질문입니다.
예제 입력을 복붙하면 빈칸뜨고 그냥 제가 스스로 입력할때도 (), [()] 이런거 하면 작동하다가 )( 이런식으로 안되는것을 입력해도 빈칸뜨는데 이유를 모르겠네요.. http://boj.kr/59a91e80c7e44780bab1579a8fdf1083
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
안녕하세요 리뷰복습하다가, 발견했습니다
최근에 다시 자바스크립트로 돌리면서, 기존에 파이썬으로 했던 것들 다시 모두 자바스크립트로 풀어보면서 문제 풀어보니, 발견했습니다.이거 첫번째 가정을, 그리디로 접근하면 해결 안되는 문제인것같습니다. 이후 가정들은 당연히 그리디 관념으로 최적값 찾을 수 있는데, 첫번째 가정부터 그리디로 접근하면 해결되는 문제가 아니라서 어긋나기때문에, 그리디관념이 통하지 않는 문제인것같습니다.완전탐색해버리거나, 시간 더 줄이려면 백트래킹 가지치기 해야하는 문제인것같습니다. 입력입니다!7172 67183 65179 61178 62177 63170 72181 60 기존 풀이(무조건 183선발) 가 내주는 답 : 3감독 현수가 원할 것 같은 답 : 6그리디로 가장 키 큰 사람 무조건 선발하는 과정이 풀이에서 오류인것같습니다.183 선발 가정하고 cnt 값 구하고,그다음 181 선발 가정하고 cnt값 구하고,쭉 다음 순으로 선발 가정하고 cnt값 구하는데,만약 어떤 사람 선발 가정하고 cnt값 구하는데남은 사람 수 다 합해도 기존 Max cnt보다 적을 경우,백트레킹 가지치기로 break 혹은 return 끊어버리는게 맞는것같습니다. 풀이1. 이중포문const input = require("fs") .readFileSync("input.txt") .toString() .trim() .split("\n"); const n = parseInt(input[0]); const arr = Array.from(Array(5), () => []); for (let i = 0; i < n; i++) { arr[i] = Array.from(input[i + 1].trim().split(" ")).map((v) => parseInt(v)); } function solution(n, arr) { arr.sort((a, b) => b[0] - a[0]); let cnt = 0; let largest = 0; let res = 0; for (let i = 0; i < n; i++) { largest = arr[i][1]; cnt += 1; if (res >= n - i) { break; } for (let j = i + 1; j < n; j++) { if (arr[j][1] > largest) { largest = arr[j][1]; cnt += 1; } } res = Math.max(res, cnt); cnt = 0; } console.log(res); } solution(n, arr); 풀이2. DFSconst input = require("fs") .readFileSync("input.txt") .toString() .trim() .split("\n"); const n = parseInt(input[0]); const arr = Array.from(Array(5), () => []); for (let i = 0; i < n; i++) { arr[i] = Array.from(input[i + 1].trim().split(" ")).map((v) => parseInt(v)); } let cnt = 0; let res = 0; //const list = []; function DFS(s, weight) { if (s < 0) return; if (cnt + n - s <= res) { cnt -= 1; s -= 1; return; } for (let i = s; i < n; i++) { if (arr[i][1] > weight) { cnt += 1; //list.push(arr[i][1]); DFS(i + 1, arr[i][1]); //list.pop(); } } res = Math.max(res, cnt); //console.log(list); cnt -= 1; } function solution(n, arr) { arr.sort((a, b) => b[0] - a[0]); DFS(0, 0); console.log(res); } solution(n, arr);