묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
링크드리스트 중간에 삽입 삭제 연산
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요? 3주차어떤 알고리즘을 학습하고 계신가요? 링크드리스트여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 노션에서 링크드 리스트 중간에 삽입 삭제가 O(1)이라고 되어있는데 삽입을 특정위치에 하기위해서 get_node()로 순회를 해야하기 때문에 O(N)이 아닌가 궁금합니다. 혹시 놓친 부분이 있는걸까요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
삼성전자 코딩테스트 대비할 때
안녕하세요 선생님, 저는 제목과 같이 1순위 희망 기업은 삼성전자이고 이후에도 제조업 기반의 회사 코딩테스트를 보게 될 거 같은데, 현재 학습하고 있는 4주차 비트마스킹을 우선적으로 학습하는 게 좋을지 아니면 그 뒤에 이분탐색이나 DP같은 문제를 먼저 학습하는 게 좋을지 여쭤보고 싶습니다. 감사합니다.
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
교재 오류
안녕하세요 딩코딩코님!알고리즘 강의 잘 보고 있습니다ㅎㅎ다름이 아니라, 교재의 2주차 9번 재귀함수 단원에 팩토리얼 문제의 Java와 JS 답안이 60초 카운트 하는 코드로 잘못 첨부된 것 같아 질문 남깁니다!(우선 답은 파이썬 버전으로 확인했습니다!)좋은 강의 덕분에 개념부터 차근 차근 잘 익혀나가고 있습니다ㅎㅎ 감사합니다!
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
dfs 부문을 이렇게 작성해도 되나요?
import java.util.*; import java.io.*; public class jelly { static int size; static int[][] map; static boolean[][] visited; // //size,size도달하면 HaruHaru, 아니면 hing public static void dfs(int y, int x){ visited[y][x] = true; if(y == size && x == size) return; int n = map[y][x]; if( (x + n) <= size && !visited[y][x+n]) dfs(y,x+n); if( (y + n) <= size && !visited[y+n][x]) dfs(y+n,x); } public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); size = Integer.parseInt(br.readLine()); int Max = size +10; map = new int[Max][Max]; visited = new boolean[Max][Max]; for(int i = 1; i <= size; i ++){ StringTokenizer st = new StringTokenizer(br.readLine()); for(int j = 1; j <= size; j ++){ map[i][j] = Integer.parseInt(st.nextToken()); } } dfs(1,1); if(visited[size][size]){ System.out.print("HaruHaru"); }else System.out.print("Hing"); bw.close(); br.close(); } }
-
미해결비개발자도 쉽게 시작하는 코딩 입문 강의: PCCE 합격을 위한 파이썬 기초 & 알고리즘
응시권을 신청했는데 언제쯤 오나요?
bms0801@gmail.com 메일로 신청했습니다.언제쯤 오나요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-J 반례 질문있습니다.
안녕하세요! 선생님 제가 짠 코드가 작동하지 않는 이유를 도저히 모르겠어서 질문 올립니다.답으로는 구름이 등장할 때까지 카운트를 답에 넣는식으로 작성해 주셨습니다.while(a[i][j + 1] == -1){ a[i][j + 1] = cnt++; j++;}1 5.c..c-> -1 0 1 2 0 -1-> -1 0 1 2 0 1http://boj.kr/c6c895e92431416a87ea2b64d7d50287 <- 제 코드입니다.저는 카운트를 끝까지 넣고 구름이 등장할 때마다 덮어씌우는 방식을 사용했습니다.1 5.c..c-> -1 0 1 2 3 4-> -1 0 1 2 0 1제가 상상할 수 있는 케이스는 다 정상 작동해서 어떤점이 문제인지 모르겠습니다.입력에서 마지막에 ' . '을 덜찍어줬을 경우 밖에 상상이 안갑니다..그냥 안되는 코드구나 하고 넘기기 찝찝해서 질문 남깁니다.
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-T 질문 있습니다!!
먼저 좋은 강의 해주셔서 감사의 말씀 올립니다!!제가 첫 시도때 못 풀고 선생님 강의를 보고 그 다음날 다시 복습하는 과정에서 제 나름대로 로직을 찾아보고 테스트 케이스를 다 푼 코드를 만들었는데, 결과적으로 시간초과가 떴습니다.그래서 선생님 코드랑 비교해봤는데, 제가 생각했을 때 어디서 차이가 나는지 모르겠어서 이렇게 질문남깁니다. 읽어주셔서 감사합니다!!http://boj.kr/c8fc36cc6e9844a88c4495c0a7e8f3a4
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-5 알고리즘과 친해지기 (2) 질문
1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?1-5 . 알고리즘과 친해지기 (2)어떤 알고리즘을 학습하고 계신가요?최빈값 찾기여기까지 이해하신 내용은 무엇인가요? def find_max_occurred_alphabet(string): alphabet = {} result = [] maxvalue = 0 for char in string: if char.isalpha(): alphabet[char] = alphabet.get(char,0) + 1 for value in alphabet: maxvalue = max(maxvalue, alphabet[value]) for i in alphabet: if alphabet[i] == maxvalue: result.append(i) return result result = find_max_occurred_alphabet print("정답 = i 현재 풀이 값 =", result("hello my name is dingcodingco")) print("정답 = e 현재 풀이 값 =", result("we love algorithm")) print("정답 = b 현재 풀이 값 =", result("best of best youtube"))영상 안보고 문제만 보고 한번 풀어봤는데예시의 hello my name is dingcodingco,we love algorithm, best of best youtube 문자열 전부 최빈값이 여러개라서 원본 문제로 가보니 여러개라면 -1을 반환하도록 되어있어서 조금 바꿔서저는 리스트로 반환하도록 풀어봤는데 이 방법은 어떨까요? 알파벳 아스키코드로 풀 방법은 생각이 안나서 자바에서는 map에 넣듯이 dictionary에 넣어서 풀어보려고 했습니다max 메소드는 연습할땐 안쓰는게 좋은데 자바 삼항연산자가 파이썬에서 어떻게 쓰는지 몰라서 일단 max로 해봤습니다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 17071 시간 초과
안녕하세요 선생님, 17071 문제를 푸는데 도저히 시간 초과가 해결이 되지 않아 질문드립니다. http://boj.kr/205232630d404eddbd6e2f0eeb5e5627 맨 처음에 주석에 달린 조건문이 없을 때는 메모리 초과가 났었고, 이를 해결하기 위해 조건문을 추가했어요. 다만 해당 방법으로 구현하니 시간 초과 문제가 나더라고요. 더더욱 최적화를 해야할 것 같은데, 현재 제 코드에서 더 최적화할 수 있는 방법이 뭔지 궁금합니다. 그리고 이 문제만 6시간 이상 붙잡고 있는데, 이게 맞는건지 잘 모르겠어요. 아예 아이디어가 생각이 안나면 이렇게까지 시간을 붙잡고 있지는 않고, 바로 아이디어 힌트를 얻으려고 할텐데 어느정도 될 것 같은 아이디어(==전체적인 설계나 시간 복잡도, 공간복잡도를 고려했을 때)로 구현했을 때 예상치 못한 동작을 한다던가, 메모리 초과나 시간 초과를 겪으면 제 방법에서 보완하기 위해 고민하다보면 시간이 너무 많이 지나있더라고요. 물론 선생님의 해설은 훌륭해서 잘 이해가고, 해당 방법으로 풀면 풀린다는 것도 잘 알아요.하지만 그건 제가 푼 게 아니라 선생님이 푼건데, 그저 이해하고 따라하기만 하면 낯선 아이디어를 떠올려야할 때 스스로 생각하는 힘이 부족한 느낌이 들더라고요. 그래서 계속 어떻게든 제 방법의 문제점을 찾아내고 해결하려고 붙잡게 되네요. 방법의 시작 자체가 잘못된 걸수도 있는데, 그렇다면 무엇이 잘못되었는지 파악하려고 하고요. (물론 잘 안돼요. 시간만 버리는 것 같습니다.) 실력도 별로 느는 것 같지 않아요. 연습 시간은 너무 많이 걸리고요. 코드도 너무 못 짜는 것 같아요.제 방식이나 생각이 잘못된건가요?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
x랑 y를 거꾸로 쓰는 개념이 너무 헷갈립니다...
일반적으로 수학 좌표계로 생각하면 (2,3) 이라했을때 x축이 2, y축이 3이지만 우리는 맵이나 2차원 리스트로 생각하게됐을떄array[row][col]이여서 이게 반대가되고, 그래프로 치면 정점에 간선이 연결된거기 때문에 이러는것 같은데 graph[y+1][x+1] = true;지난 배추문제부터 이런건 이해가 가는데 static int[] dirY = {-1, 1, 0, 0}; static int[] dirX = {0, 0, -1, 1}; static void dfs(int y, int x){ visited[y][x] = true; for(int i = 0; i < 4; i ++){ int newY = y + dirY[i]; int newX = x + dirX[i]; if(graph[newY][newX] && !visited[newY][newX]) dfs(newY,newX); } } 이게 너무 이해안갑니다. 그냥 파라미터도 x, y로 하고 visited[x][y] , dirX = {-1,1,0,0} dirY = {0,0,-1,1} 이렇게 하면 안되나요? 생각하기가 너무 복잡해요
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-I 이해가지 않는 설명이 있어 질문드려요!
안녕하세요 선생님! 수업 듣는 도중 이해가 가지 않는 부분이 있어 질문드리게 되었어요. "8:19~ 이후" 부터 범위가 50만이기 때문에 50만 * 50만의 2차원 배열을 만들 수 없다고 설명해주셨어요. 하지만 만약 범위가 500 정도라면 2차원 배열을 만들어서 활용했을 것이다 라고 말씀해주셨고요. 저는 범위가 500일 때, 2차원 배열을 어떤 식으로 만들어서 활용하신다는건지 잘 이해하지 못했어요. arr[수빈이의 상태][동생의 상태] 로 만들어서 활용한다는 의미인 것으로 이해했고, 이 "상태" 라는 것은 이 문제의 경우 "위치, 즉 x값" 이라고 생각했어요. 그렇다면 예를 들어arr[1][3]은 수빈이가 x=1에 위치하고, 동생이 x=3에 위치할 때의 값이라는 건데, 그 "값"은 무엇을 의미하나요? 수빈이와 동생이 각각 해당 위치일 때의 시간을 의미하는건가요? 만약 '시간'을 의미하는게 맞다면, 저는 해당 배열을 활용하는 예시가 전혀 생각나지 않아서 질문드렸어요. 간단히 생각해보았을 때는 오히려 불필요한 행위가 될 것 같기도 하고요. 왜냐하면 저희가 궁금한것은 궁극적으로 arr[samePos][samePos] 일텐데 이 값을 알아내는 순간은 arr가 필요 없을 것 같아서요.결국 질문을 아주 간단하게 요약하면,"범위가 500 정도라면 2차원 배열을 만들어서 활용했을 것이라고 해주셨는데, 어떻게 활용한다는 건지 이해가 안갑니다. 활용 방안이 떠오르지 않아요" 입니다. 감사합니다.
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
dfs 파라미터에 count를 넣는이유
안녕하세요. 기존처럼 dfs함수내에서 함수가 실행될때마다 answer++를 해서 조건에 일치 할 떄 그냥 answer를 출력하게해도 될것같은데count라는 파라미터는 answer를 -1로 초기화를 해놨기 때문에 넣는건가요? 아니면 answer로 하면 단순 dfs 함수 호출 횟수를 늘리는거고, 이 문제의 본질은 트리의 depth를 물어보는거가 되는거고 그래서 count로 depth를 알려주는건가 싶습니다
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
graph 채울때 for문 설계 질문
그 전 문제들까지는 graph를 채울 때조건문에서 i < M으로 간선의 개수로 했는데 왜 이번문제에서는 i <=N으로 하나요? 전에 2차원 배열을 가득 채우고 할 때 i<=N은 dfs 함수에서 사용했었는데..이해를 못하겠스빈다
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-A 15686번 시간복잡도 질문 드립니다.
안녕하세요 선생님~!처음엔 15686번 문제를 bfs로 곁들여서(?) 풀었는데 시간초과가 나더라고요. 그래서 bfs를 사용하지 않고 푸니까 시간초과없이 문제가 정답처리 되었습니다. 정답 코드 : http://boj.kr/5fa47b86ba5246119038da418cfad011시간초과 났던 코드(bfs 사용) : http://boj.kr/ef1079acc43c4eb8ab9aeafe01d00bd2 이후 시간 초과가 났던 이유를 분석해봤는데, 제 생각은 아래와 같아요. 치킨집을 고르는 최대 개수 : 13C6 집의 최대 개수 : 100 13C6 * 100 = 171,600 (많이 여유로움) 하지만, bfs를 각 집마다 적용했으므로 (50 * 50) = 2500을 최대치로 잡고 더 곱해줘야 하므로 171,600 * 2500 = 629,000,000 따라서 시간 초과가 난다. 그래서 bfs를 사용하지 않고 abs를 사용해서 바로 거리를 계산하면 이 값이 최대 13이 되므로, 171,600 * 13 = 2,230,800 (여전히 여유로움)이라서 시간 초과 없이 통과되었다고 판단했어요. 제 질문은 아래와 같아요.bfs를 사용했을 때의 시간 복잡도 계산식에 오류가 없나요? (잘 계산한게 맞나요?)bfs를 사용하지 않을 때의 시간 복잡도 계산식에도 오류가 없나요? (잘 계산한게 맞나요?)
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-O 15684 시간복잡도 질문드립니다.
안녕하세요 선생님! 결국 시간초과 문제를 해결했긴 했지만, 시간 복잡도를 어떻게 계산하는게 좋을지 궁금해서 질문드리려고 해요. 시간 초과가 났던 코드http://boj.kr/8fe9f1e620454720a985b58a993d229a통과 됐던 코드http://boj.kr/864f7c65db52442bada271fe193a2ec3기본적으로 선생님의 설명대로, 300C3 == 대략 4,500,000(450만) 은 반드시 든다고 가정했어요. 이때, 두 코드의 차이점은 다음과 같아요.movePlayer + isSamePosition 함수를 각기 사용하는가checkedPlayer 함수 하나를 사용하는가 만약 movePlayer + isSamePosition 를 사용한다면 제 생각에는 300 + 10 = 310 정도를 생각했고, 이로 인해 최종 시간 복잡도는 13억 5000만(450만 * 대략 300) 으로 생각했어요. 이는 13초 정도로 생각했고요. 하지만 checkedPlayer 함수를 사용하는 순간, 중간에 break 할 수 있어 300까지 계산할 일은 거의 없겠지만.. 정말 최악의 최악일 경우 n-1 player의 맨 h 행까지 계산해야할 수도 있을거라고 생각했어요. 그럼 결국 300까지 계산하게 되는거고, 이 또한 시간 복잡도가 13초 정도가 되는거고요.그래서 제 질문의 핵심은 다음과 같아요.시간 초과가 났던 코드, 통과한 코드의 시간 복잡도는 어떻게 계산해야하는가? 계산 결과 어떤 시간 복잡도를 가진다고 봐야하는가?checkedPlayer를 사용한다고 하더라도 최악의 경우에는 300번 가량을 계산해야하는 것은 마찬가지일 것 같은데, 왜 통과되는것인가? 물론 시간복잡도를 완전 정확히 계산할 수는 없지만, loop 횟수나 재귀함수의 호출횟수로 정량화하여 대략 예상하고 싶은데 이 예상치 조차 세워지지 않아서 혼란스러워 질문드렸어요 ㅜㅡㅜ
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-G a[i]로 입력을 받는 이유 질문
2-G a[i]로 입력을 받으시는데 다른 문제들과 연계되는 특별한 이유가 있는지 궁금합니다
-
미해결김영한의 실전 자바 - 중급 2편
중급2편 56강의 bucket.add(value); 메서드가 이해가 안됩니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]강의 중급 2편의 56강 9분19초에서 size++; 윗 줄의 bucket.add(value); 라는 코드는 자바 라이브러리에 있는 코드인가요? 아니면영한님께서 작성한 코드인건가요?강의에서 사용한 코드를 보면 배열의 값을 대입시키는 코드는 안보이는데 마지막에 있는 add()메서드가 값을 저장하게 된다고 말씀하셨는데 앞선 강의에서는 해당인덱스게 정수 값을 대입시키는 것 밖에 나와있지 않아서 질문하게 되었습니다
-
미해결[노베이스/입문] 게임회사 코딩테스트 스파르타 클래스
nlogn 예시가 이해가 잘 안돼요
안녕하세요! 8분 대의 nlogn 설명에서 정렬할 때 n이 곱해진다고 하셨는데 무슨 말인지 잘 모르겠습니다. C++의 stl의 sort함수가 nlogn으로 알고 있는데 그걸 말씀하신 건지?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
공부중에 궁금한게 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.교안내용을 아예 배껴와도 DevC++에서 a.pop_back(); 에서 에러가 자꾸떠요.. http://boj.kr/ca9f117386e64005af40d6311178f7ce
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
peek() 메소드 사용한 문제풀이
이전 글에 같은 내용의 질문을 확인했는데 해당 글에 다른 분이 댓글다신거 확인하고도 의문이 안풀려서요.저는 peek() 메소드를 사용해서 코드를 작성했는데 첫번째 예시에 대한 답은 잘나오는데 두번째 예시의 답이 24가 아닌 26으로 나옵니다.왜 26이 나오는지 도저히 모르겠어요..혹시 peek() 메소드로는 해당 문제풀이가 힘든걸까요? import java.util.Scanner; import java.util.Stack; public class IronRod { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String laser = scanner.next(); System.out.println(solution(laser)); } private static int solution(String laser) { int answer = 0; Stack<Character> stack = new Stack<>(); // 선생님 풀이 for(int i = 0; i < laser.length(); i++){ if(laser.charAt(i) == '('){ stack.push('('); } else { stack.pop(); if(laser.charAt(i - 1) == '('){ answer += stack.size(); } else { answer++; } } } // 제가 작성한 코드 for(char c : laser.toCharArray()){ if(c == '('){ stack.push(c); } else { if(stack.peek() == '('){ stack.pop(); answer += stack.size(); } else { stack.pop(); answer++; } } } return answer; } }