묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
3시간 고민해서 풀었습니다.
매번 문제 풀때마다 너무 어렵게 문제를 접근해서 푸는거같아서 질문 남깁니다...항상 문제를 풀때 저도 알아보기 어렵게 코드를 짜는거같은데 제가 짠 코드도 다시 설명하라하면 못하겠는데 이럴땐 어떻게 하는게 좋나요??package algorithm; import java.util.ArrayList; import java.util.Scanner; public class Ascii_12 { public String solution(int n, String str) { int len = n * 7; String resultStr = ""; if(str.length() != len) { System.out.println("문자의 개수가 입력 조건과 상이합니다."); }else { str = str.replace('#', '1'); str = str.replace('*', '0'); } for(int i = 0; i < n; i++) { String newStr = str.substring(i*7, (i+1)*7); int result = 0; // System.out.println(newStr); for(int j = newStr.length()-1; j>=0; j--) { if(newStr.charAt(j) == '1') { int jAbs = Math.abs(j-6); // System.out.println(jAbs); result += (int)(Math.pow(2, jAbs)); } } // System.out.println((char)result); resultStr += (char)result; } return resultStr; } public static void main(String[] args) { Ascii_12 t = new Ascii_12(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String str = sc.next(); System.out.println(t.solution(n, str)); } }
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
안녕하세요 완전탐색 2503번 풀이 질문 드립니다
3일 째 스스로 숙제라고 말씀하신 부분에 대해서 코드 작성하면서 제출해보는데 계속 오답이 나와서 질문 드립니다. 구글에 풀이 검색하면 Permutation이나 DFS로만 풀이가 나와서 어떻게 코드를 작성해야 할까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
비가 안 오는 경우도 고려해야 되니까 ret=0아니고 1인건가요?
아무것도 잠기지 않는다는 말(a[][]가 모두 101 이상인 경우)이랑 비가 안오는거(d=0)랑은 다르잖아요무조건 비가 오는 게(1<=d<=100) 아닌가요? 비가 안 올 수 도 있는 게 상식이니까 그런가요문제 설명중 노트에 힌트라고 아무도 안 잠길 수 있다 라고 적어둔게 전혀 도움이 안 되는 문제 같네요 대놓고 비가 안 올 수 있다고 해야 하지 않나요
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 compare 함수 질문
안녕하세요 큰돌님. 120p string으로 이루어진 배열을 정렬한 코드에 대해 질문드립니다.제가 이해한 바로는 compare라는 함수는 문자열의 길이를 비교하는 함수입니다.if(a.size() == b.size()) return a < b; 는 문자열의 길이가 같으면 a b 크기를 비교합니다. 이 때 비교하는 기준은 아스키 코드입니다.만약 문자열의 길이가 같지 않으면 크기를 비교해서(아스키코드 기준) 바로 boolean 값을 반환합니다.111은 222와 아스키코드적으로 비교를 하게되는데.. 이때 1의 아스키코드는 49이고 2의 아스키 코드는 50입니다. 111이 a, 222가 b 이니까 a < b 는 T가 됩니다.111은 이제 33과 비교를 하게 됩니다. if문에 해당이 되지 않기때문에 바로 return a.size() < b.size() 를 하게 됩니다. a가 111, 33이 b이고 a의 size는 3, b의 size는 2입니다. 결과적으로 F가 됩니다.여기서 드리고 싶은 질문은F가 되면 순서를 바꾸는건가요? 그렇담 왜 33,222,111 가 되지 않는건가요?111과 33은 아스키코드순으로 비교할 필요가 없지 않나요? 자릿수가 다르니까 a < b를 할 필요가 없을텐데.. 왜 교안에는 아스키코드순으로 비교한다는 내용이 실려져 있는건가요? 없어도 되는 내용인것 같은데…. 실려져 있어서 제가 잘못 알고있는건지 너무 헷갈립니다…
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
dfs를 호출 할 때 매개변수..?
안녕하세요! 강의 넘 잘 듣고 있습니다. 하루만에 거의 다들었네요,,ㅋㅋ질문이 있습니다혹시 dfs를 호출할 때 이런 '-'나 '|' 같은게 나오면매개변수로 '-' 나 '|' 를 추가해서 dfs함수에 넘겨도 되는건가요?저는 이렇게 할 때가 많은데 이렇게 하지 않고 오히려 dfs 함수 안에서 해결해주는 게 더 간단한 것 같기도 해서요.. 보통은 어떻게 하시나요? 전 4방 탐색을 하면서 이렇게 풀었었네요,, 한 방향만 탐색하는 팁 배워갑니다 ㅎㅎimport java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int[] dr = {-1, 1, 0, 0}; static int[] dc = {0, 0, -1, 1}; static int N, M; static char[][] arr; static int ans; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); N = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); arr = new char[N+2][M+2]; for (int i = 1; i <= N; i++) { String str = br.readLine(); for (int j = 1; j <= M; j++) { arr[i][j] = str.charAt(j-1); } } for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { if (arr[i][j] == '|') { dfs(i, j, '|'); ans++; } else if (arr[i][j] == '-'){ dfs(i, j, '-'); ans++; } } } System.out.println(ans); } private static void dfs(int r, int c, char shape) { int start = 0; int end = 0; if (shape == '|') { start = 0; end = 1; } else if (shape == '-'){ start = 2; end = 3; } arr[r][c] = '1'; for (int d = start; d <= end; d++) { int nr = r + dr[d]; int nc = c + dc[d]; if(arr[nr][nc] == shape) { arr[nr][nc] = '1'; dfs(nr, nc, shape); } } } }
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
6-K lis 배열과 ans의 차이
안녕하세요 선생님.코드는 선생님의 코드를 참고 하여 질문드립니다!코드 이해를 위해 디버깅을 하는 중 테스트 케이스로610 20 9 30 8 50위 값들을 넣었을 때,출력되는 값은410 20 30 50 이지만lis 배열에 남은 값은8 20 30 50 이었습니다.제가 아직 lis 배열의 의미와*lowerPos = num; 으로 바꿔주는 부분에 대해 잘 이해하지 못한 것 같습니다.lis 배열은 그저 정답을 구하기 위한 임시적인 배열이 맞을까요?
-
해결됨코딩테스트 [ ALL IN ONE ]
two_sum 딕셔너리 문제 코드관련 질문이 있습니다.
class Solution(object): def twoSum(self, nums=[3,3], target=6): ans = [] dict = {} for i,v in enumerate(nums): if target-v in dict: ans.append(prev) ans.append(i) return ans dict[v] = i prev = i이렇게하면, for문 안에서 리스트를 append하는거니까 총 O(n) 하는거아닌가요? 왜 예시 테스트케이스는 통과를 했는데 리트코드에서 submit을 누르면 나머지 테스트케이스는 통과하지 못하는거죠 ㅜㅜ
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-A 질문이 있습니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의 내용 1분~3분에서 말씀하신 내용이 이해가 가질 않습니다. a->d로 간다 했을 때 {a, b, c}의 최소값을 찾아서 d로 가면 된다고 하셨는데 제가 저 말뜻을 제대로 이해했는지는 모르겠지만 제가 생각했을 때는 저 셋을 가는 경로에서 최솟값은 아니어도 d로 갔을 때 최솟값이 되는 경로도 존재할 거라고 생각이 들어서 {a, b, c}경로의 최솟값에서 d로 가면 그게 또 최소 경로?가 된다는 건 이해를 잘 못하겠습니다. 코드를 따라 쳐보면서 코드 자체 만으로도 이해를 해보려 했는데 tfs함수 부분에서 ret을 저렇게 메모이제이션 처리를 하면 무슨 이득이 있는지 모르겠습니다. 제 생각에는 경로가 a b c d 라고 했을 때 (경로가 모두 0이 아니라고 했을 때)a b c da b d ca c b da c d ba d b ca d c b이런식으로 탐색을 할 거라고 생각이 드는데 결국 완전탐색 느낌으로 탐색을 한 게 아닌가? 라는 생각이 듭니다. if (ret != -1) return ret;이 부분이 메모이제이션을 써서 얻을 이득일텐데 저게 a b c d를 돌면서 작동을 하지 않을 거라고 생각이 드는데... 왜 저 코드가 필요한지 잘 모르겠습니다. 막상 실제로 저 부분 빼고 제출하니까 시간초과가 나기는 하는데 제 머리로는 도저히 이해가 안갑니다.
-
미해결파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
조합 구하는 DFS 질문
numbers = [2, 1, 3, 4, 1] def dfs(L, s): global tmp if L == 2: num_list.append(tmp) tmp = list() return else: for i in range(s, len(numbers)): tmp.append(i) dfs(L+1, i+1) tmp = list() num_list = list() dfs(0, 0) print(num_list)인덱스를 [[0, 1], [0,2], [0,3], [0,4], [1, 2], [1,3], [1,4], [2, 3], [2,4], [3, 4]] 뽑고 싶은데[[0, 1], [2], [3], [4], [1, 2], [3], [4], [2, 3], [4], [3, 4]] 이렇게 나옵니다.6번 라인 tmp = list() > tmp.pop() 으로 수정하면 될 것 같은데 결과값은 안나오네요.어떤 부분을 실수했는지 감은 오는데 코드로 구현하는 법은 모르겠네요.도움부탁드립니다.
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
정수론 백준 1407번 질문 있습니다.
안녕하세요.정수론 2로 몇번 나눠질까(#1407) 부분을 수강 하면서 궁금한 점을 질문드립니다.해당 문제를 접근할 때 팩토리얼로 푸시는 것을 볼 수있었습니다. 해당 문제 자체에는 팩토리얼에 대한 설명은 없었는데, 어떻게 팩토리얼을 떠올릴 수 있으셨는지 궁금합니다. 해당 문제와 비슷하게 출제가 되었을 때 접근 방법이 궁금합니다.#2247도 같은 카테고리로 넣어두셔서 같은 접근 방법인가 싶은데, 해당 문제도 접근법이 궁금합니다. (어떤 단어나 부분에서 이 문제는 이렇게 풀어야겠다고 느끼시는 건지 궁금합니다.)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-I문제 / 시간 빡세다의 정의 궁금증
틀린 코드 : https://www.acmicpc.net/source/share/848fc68966ae4518833cbfa48bae9862 우선 강의를 보고 밑의 코드를 넣어서 문제는 해결한 상태입니다. 아마 시간초과 난 부분도 I/O 부분에서 많이 잡아먹어서 그런 것 같습니다. ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 강의 내용 중에 시간초과가 빡세서 위의 코드를 넣어야 한다고 했는데, 코드를 넣는 것과는 별개로 어떻게 시간초과가 빡센지 문제를 풀면서 생각할 수 있을까요?? 제 논리구조는 아래와 같습니다. 첫 번째 반복문 O(NlogN)코드 상 첫번째 반복문에서는 입력을 N번 받고, map에 넣는 경우는 O(logN) 두 번째 반복문 O(M * (logN + T)) 우선 M번 반복하고, 반복할 때마다 문제를 받는데, 해당 문제의 input을 int로 변환하는 과정 O(T) (문자열 길이 T가정)map에서 탐색하는 과정 O(logN) => 총 시간복잡도 = O(N *( log(N) + T )(M과 N의 최대 범위 같으니 동치해 봤습니다)사실상 T의 길이도 최대 20이어서 미미해서 O(NlogN)이라고 판단했습니다. 저는 1초 = c++에서 1억번이라고 들어서 그것을 기준으로 잡고 해봤습니다.(혹시 이렇게 정의해도 되는건지요?) 단순히 입력값으로 계산만 해봐서는 100000 * log(100000) = 약 160~170만최대 20자인 문자열을 고려해도 => 약 3000만회널널하다고 생각 이렇게 해서 저는 시간초과가 생각보다 빡세지 않다고 생각했는데, 제가 한 논리중에 잘못된 부분이 있는지도 궁금하고, 어떻게 하면 이 문제에서 1초라는 시간초과가 빡세다는 점을 캐치할 수 있는지 궁금합니다.감사합니다
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-J 시간 초과 원인을 파악하기 어렵습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. http://boj.kr/edd8ff505fdf4958ad6c322bae97ec8d 혹시 로직에 문제가 있어 시간 초과가 생기는 것인지, pair를 사용해서 시간 초과가 생기는 것인지 궁금합니다. 만약 pair를 사용해서 시간 초과가 생기는 것이라면, 제 생각에는 pair가 큰 영향을 주지 않을 것으로 생각되는데 혹시 어떤 이유에서 pair가 실행 시간에 영향을 줄 수 있는지 궁금합니다. 또, 만약 그렇다면 코딩 테스트에서 pair를 사용하지 말아야 할 경우를 어떤 근거로 판단할 수 있을지 궁금합니다.
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
splice 를 이용해서 풀어봤습니다. 이렇게 풀어도 될까요?!
처음에 answer을 배열로 만들게 되서 중복제거와 join 을 시키게 되면서 코드의 양이 좀 많아진거 같습니다.function sol(arr) { let answer = arr.split(''); let s = arr[0]; let ctn = 1; for (let i = 1; i < arr.length; i++) { if (arr[i] === s) { s = arr[i]; ctn++; } else { s = arr[i]; if (ctn > 1) { answer.splice(i, 0, ctn); ctn = 1; } } } answer = new Set([...answer]); answer = [...answer].join(''); return answer; } console.log(sol('KKHSSSSSSSE'));
-
미해결입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]
동적계획법에 관한 수업 내용
선생님 이 강의는 동적계획법 문제풀이에 대해서는 따로 이론이나 그런건 없는거 같은데 다른 알고리즘을 활용하는 방안으로 문제를 풀 수 있기 때문에 따로 강의를 안찍으신건지 궁금합니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
순열 조합은 시간복잡도 n!인가요?
n이 너무 커지면 못쓰겠네요??
-
미해결자바 코딩테스트 - it 대기업 유제
질문 있습니다!!
강의 너무 잘 보고 있습니다!!!백엔드 Java 개발자를 꿈꾸는 대학생입니다!!다름이 아니라 혹시 강의에서 배운 내용을 제 개인 블로그에 정리해도 될지 궁금해서 글 남깁니다!!!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1781번 질문있습니다
https://www.acmicpc.net/source/share/60c52b6bc2b540bb8d1b1a57d4ce090d기존에 문제를 풀었던 2109번과 동일한 로직이라고 생각되어처음풀때 사용했던 제 로직을 이용하니 문제가 틀렸다고 나와서요, 추후에 큰돌님이 2109번강의해주셨을때 사용했던 로직도 같은로직이라 생각되어 해당 소스를 사용시 정답이 되어서 이부분이 잘이해가 안가서 질문을 남깁니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2차원 배열 회전 강의 올려주시면 안될까요
교안만 봐서 잘 모르겠습니다 ㅠㅠ
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
숫자만 추출 문제 풀어봤습니다. 코드리뷰 부탁드립니다.
지난시간에 배운 정규식 이용해서 풀어봤습니다. 항상 강의 잘 듣고 있습니다. 감사합니다.function sol(s) { let answer = ''; s = s.replace(/[^0-9]/g, ''); answer = s.indexOf(0); answer = s.substring(answer + 1, s.length); return answer; } console.log(sol('g0en2T0s8eSoft'));
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
팰린드롬 문제
선생님 앞 강의에서 말씀 해 주신 s.length -i -1 로 풀고싶어서 아스키코드를 이용해봤는데 if 문을 열고 소문자 대문자 일 때만 돌게끔 범위를 설정해줬습니다.이런 방법으로는 풀수없는걸까요 ? s[i] !== s[s.length -i -1] 일때는 'NO' 를 출력하게끔 했는데 맞는 문자열이 들어가도 'NO'를 출력하더라구요 ㅠㅠfunction solution(s) { let answer = 'YES'; s = s.toLowerCase(); for (let i = 0; i < Math.floor(s.length / 2); i++) { if ( s[i].charCodeAt() >= 65 || s[i].charCodeAt() <= 90 || s[i].charCodeAt() >= 97 || s[i].charCodeAt() <= 122 ) { if (s[i] !== s[s.length - i - 1]) { return 'NO'; } } } return answer; } console.log(solution('found7, time: study; Yduts; emit, 7DnuoF'));