묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨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);
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
c++ sort 알고리즘 질문드립니다.
안녕하세요, 선생님.숫자로 바꿔서 크기를 비교하는 경우에 Out of range 에러가 발생해서, 문자열의 크기를 비교하는 compare함수를 직접 구현을 해서 풀었습니다.그런데 제가 구현한 compare함수에서 비교하는 두 문자열이 같은 경우에, true를 반환하면 에러가 발생하고, false를 반환하면 에러가 발생하지 않는지 이유를 잘 모르겠어서 질문드립니다.감사합니다.http://boj.kr/667ee88dbe1f40dc88c2a27c2636868d
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
마구간 정하기 문제 질문드립니다.
강사님 마구간 문제에서, mid = 5 경우에 9번 마구간에 말을 배치하지 못한다고 말씀하셨는데, 그 이유는 문제에 어떤 부분에 포함되어있는 걸까요??각각의 말이 위치한 거리가 5를 넘어야 되는건가요????
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
map 과 filter 함수를 써봤는데, 이렇게 하면 효율적이지 않은가요?
for 문 돌리는게, method 돌리는것보다 빠르다고 하는데, method 들로만 사용하여 풀면 효율적이지 않은건가요?아래 코드로 진행해도 괜찮을까요? function solution(s){ let answer="" const lengths = s.map(str => str.length) const max = Math.max(...lengths) answer= s.filter(str => str.length === max).join('') return answer; }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-H번 질문있습니다.
언제나 좋은 강의 감사드리고 좋은 답변 감사드립니다. 다름이 아니라, 6-H, 2776번을 풀었는데 함수의 입력 인자로 인해 시간 초과가 발생했습니다!시간 초과가 난 코드는 다음과 같습니다.http://boj.kr/991bd2528553446498f49861a7098e78그래서 강의 영상을 보고 난 후, 딱 한 줄에 차이점이 있다는 것을 알았습니다. 바로 이분 탐색 함수에 벡터 인자가 vector<int> v가 아니라 vector<itn> &v인 것인데요. &v, 즉 주소로 접근을 하지 않으면 시간 초과가 나는 이유를 알 수 있을까요? 감사합니다!
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
왜 오답인지 정말 모르겠습니다...
임시반장 정하기 문제에서import java.util.Scanner; public class Main { private static void solution (int num, int[][] arr){ int[][] test_arr = new int[num][5]; int[] result = new int[num]; for (int i = 0; i < 5; i++) { for (int j = 0; j < num-1; j++) { for (int k = j+1; k < num; k++) { if (arr[j][i] == arr[k][i]){ test_arr[j][i] = 1; test_arr[k][i] = 1; } } } } int result_index =0; int max = 0; for (int i = 0; i < num; i++) { for (int j = 0; j < num; j++) { if(test_arr[i][j] != 0){ result[i] += test_arr[i][j]; } } if (result[i] > max){ max = result[i]; result_index = i+1; } } System.out.println(result_index); } public static void main(String[] args) { Main T = new Main(); Scanner sc = new Scanner(System.in); int num = Integer.parseInt(sc.nextLine()); int[][] arr = new int[num][5]; for (int i = 0; i < num; i++) { String[] temp = sc.nextLine().split(" "); for (int j = 0; j < 5; j++) { arr[i][j] = Integer.parseInt(temp[j]); } } T.solution(num, arr); } }이런식으로 3개의 for문을 써서 해결했는데요 테스트케이스들은 다 통과하는데이라고 뜨네요 왜인지 이유를 모르겠습니다...
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
ret 변수가 이해가 가지 않습니다
안녕하세요 선생님!go 함수에서 ret=(ret*ret)%c; 인데예를 들어 go(2,4)->go(2,2)->go(2,1) 이라면go(2,1)은 2%c를 반환하여 ret=go(2,1)=2%c 가 되고 다음줄의 ret=((2%c)*(2%c))%c 가 되면 % 연산이 중복되는게 아닌가 하는 의문이 듭니다.그래서 ret=(ret*ret) 이 되어야 하는 것 같아서 돌려봤는데 TC는 통과되었는데 백준에서 틀렸다고 나와서 질문드립니다.
-
미해결코딩테스트 [ ALL IN ONE ]
심화 과정 커리큘럼 질문
안녕하세요. 좋은 강의 잘 보고 있습니다.혹시 심화 과정에서 순열, 조합은 따로 안 다루시나요?
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
DFS와 BFS
문제를 보고 DFS로 풀어야 할지, BFS로 풀어야할지빨리 구분하는 방법이 있나요?그리고, 어떤 경우에는 DFS에서 재귀함수 호출 제한이 뜨는 건가요?감사합니다.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
시간초과 이유 해결
import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Inflearn26 { public ArrayList<Integer> solution(int N, int[] A, int M, int[] B) { ArrayList<Integer> answer = new ArrayList<>(); for(int i=0; i<A.length; i++) { for(int j=0; j<B.length; j++) { if(A[i] == B[j]) { answer.add(A[i]); break; // 원소 중복을 허용하지 않음으로 공통원소를 찾으면 반복문 종료 } } } Collections.sort(answer); // Arrays.sort() 는 '배열'의 오름차순 정렬 return answer; } public static void main(String[] args) { Inflearn26 inflearn26 = new Inflearn26(); Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int[] A = new int[N]; for(int i=0; i<N; i++) { A[i] = scanner.nextInt(); } int M = scanner.nextInt(); int[] B = new int[M]; for(int i=0; i<N; i++) { B[i] = scanner.nextInt(); } for(int x : inflearn26.solution(N,A,M,B)) { System.out.print(x + " "); // 공통 원소 출력 // 이 방법은 시간초과 걸림 } } }로 풀었는데 시간초과 오류가 뜹니다.어떤식으로 풀어야 해결이 가능한지 궁금합니다 .
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H 성곽
http://boj.kr/12848c5737a747c6b107af81e35dbd5e 해당문제를 맞추긴 했는데92번째줄 코드를 원래if(check(k,i,j))로 작성하였을 때는 오류가 발생했습니다. 조금 설명을 드리면,0-북/1-동/2-남/3-서 > 시계방향으로 벽이 있는 지 체크하는 함수인데 connectedcomponent 내부에서는 제대로 작동하는데92번째줄 코드에서 사용하였을 때는 0,0일때 동쪽에는 벽에 없는데도 동쪽에 벽이있다고 확인됩니다...어떤 점이 잘못되었는지 모르겠습니다