inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

코드의 시간 복잡도에 대해 궁금합니다!

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

function solution(str, t) { let answer; const counts = {}; const formatted = [...str]; formatted.forEach((char, i) => { if (counts[char]) { return counts[char].push(i); } counts[char] = []; counts[char].push(i); }); const tIndexs = counts[t]; answer = formatted.reduce((store, cur, i) => { const tmp = []; tIndexs.forEach((index) => { tmp.push(Math.abs(index - i)); }); store.push(Math.min(...tmp)); return store; }, []); return answer.join(' '); } let str = 'teachermode'; console.log(solution(str, 'e')); 입력값의 크기 N마다 tIndex만큼 반복하니까 O(N^2) 인지 아니면 O(N)의 시간복잡도를 갖는지 궁금합니다.

  • javascript
  • 코딩-테스트
ukgi 댓글 1 좋아요 0 조회수 301

쇠막대기 풀이 질문

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

안녕하세요, 첫번째 else 문에서 바로 pop을 해줘도 오류가 나지 않는 이유, 두번째 if문에서 stack.isEmpty() 체크를 해주지 않는 이유가 무조건 처음 한번은 '(' 괄호가 들어가기 때문인가요? for (int i = 0; i < arr.length; i++) { if (arr[i] == '(') stack.push(arr[i]); else { stack.pop(); if (arr[i - 1] == '(') answer += stack.size(); else answer++; } } import java.util.*; public class Main { public int solution(String str) { int answer = 0; Stack<Character> stack = new Stack<>(); char[] arr = str.toCharArray(); for (int i = 0; i < arr.length; i++) { if (arr[i] == '(') stack.push(arr[i]); else { stack.pop(); if (arr[i - 1] == '(') answer += stack.size(); else answer++; } } return answer; } public static void main(String[] args) throws Exception { Main T = new Main(); Scanner kb = new Scanner(System.in); String str = kb.next(); System.out.println(T.solution(str)); } }

  • java
  • 코딩-테스트
현지원 댓글 1 좋아요 0 조회수 289

코드 리뷰

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

안녕하세요 강의 듣기 전에 혼자서 풀어보았는데 다음 코드도 가능할까요 ? function solution(s, arr) { let answer = Array.from({ length: s }, () => 0); for (let i = 0; i < arr.length; i++) { let p = answer.indexOf(arr); if (p > -1) { let tmp = arr[i]; for (let j = p; j > 0; j--) { answer[j] = answer[j - 1]; } answer[0] = tmp; } else { for (let j = answer.length - 1; j >= 0; j--) { if (answer[j] === 0 || j === answer.length - 1) continue; let tmp = answer[j]; answer[j + 1] = tmp; } answer[0] = arr[i]; } } return answer; }

  • javascript
  • 코딩-테스트
00 댓글 1 좋아요 0 조회수 240

lag, leag 강의에서 game-play-analysis-iv 문제

해결됨

SQL 코딩테스트를 위한 마지막 걸음

https://leetcode.com/problems/game-play-analysis-iv/ 이 문제를 풀고 있는데, 제가 작성한 코드는 SELECT ROUND(COUNT(player_id) /(SELECT COUNT(DISTINCT player_id) FROM Activity),2) as fraction FROM ( SELECT player_id, LAG(player_id) OVER (ORDER BY player_id) AS prev_id, LAG(event_date) OVER (ORDER BY player_id) AS prev_date, event_date, RANK() OVER (PARTITION BY player_id ORDER bY event_date) AS rnk FROM Activity ) A WHERE rnk = 2 AND DATE_ADD(prev_date, INTERVAL 1 day) = event_date AND player_id = prev_id 입니다. 이 코드로 정답을 체크해 보았을 때 wrong answer라 뜨지만, A FROM절 안에서 event_date, rnk의 순서를 LAG 앞으로 바꾸어 주었을 땐 정답 처리가 되었습니다. 왜 그런걸까요?? 아래는 순서를 바꿨을 때 정답처리 되었던 코드 입니다. SELECT ROUND(COUNT(player_id) /(SELECT COUNT(DISTINCT player_id) FROM Activity),2) as fraction FROM ( SELECT player_id, event_date, RANK() OVER (PARTITION BY player_id ORDER bY event_date) AS rnk, LAG(player_id) OVER (ORDER BY player_id) AS prev_id, LAG(event_date) OVER (ORDER BY player_id) AS prev_date FROM Activity ) A WHERE rnk = 2 AND DATE_ADD(prev_date, INTERVAL 1 day) = event_date AND player_id = prev_id

  • sql
  • mysql
  • 코딩-테스트
soiejung 댓글 2 좋아요 1 조회수 448

1-G 9996번 질

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

안녕하세요 큰돌님 강의 잘 듣고 있습니다. 1-G번 문제 질문드립니다. https://www.acmicpc.net/source/share/7c68255b14c740b9b87c4053d0d0c0db 왜 자꾸 틀렸다고 하는지 모르겠네요 ㅠ 강의 듣고 사이즈 예외처리까지 다 된건 줄 알았는데 if ((input.find(temp1) != string::npos) && (input.find(temp2) != string::npos)) { cout << "DA" << '\n'; } else { cout << "NE" << '\n'; } 이 부분이 왜 오류나는지 알 수 있을까요? 감사합니다.

  • c++
  • 코딩-테스트
sangwhi127 댓글 1 좋아요 0 조회수 263

11.문자열 압축 문제 결과가 맞게 나오는거 같은데 채점사이트에서 오답이라고 합니다. 피드백 주시면 감사하겠습니다.

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

import java.util.*; public class Main { public String solution(String str){ StringBuilder answer = new StringBuilder(); char [] tmp = str.toCharArray(); int dis_Count = 1; for(int i=0; i<tmp.length; i++){ //연속으로 들어올때 if(i>0 && tmp[i]== tmp[i-1]){ dis_Count++; } //연속으로 들어오다 끊길 때 else if(i>0 && tmp[i]!= tmp[i-1]){ if(dis_Count > 1){ answer.append(dis_Count); dis_Count = 1; } } if(dis_Count == 1){answer.append((tmp[i]));} } return answer.toString(); } public static void main(String[] args) { Main Main = new Main(); Scanner kb = new Scanner(System.in); String str = kb.next(); System.out.println(Main.solution(str)); } }

  • java
  • 코딩-테스트
현이 댓글 2 좋아요 0 조회수 335

이런식으로 풀어도 될까요?

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

indexOf를 사용했습니다. const Sol7 = () => { const s = "CBA"; const sub = "CBDAGE"; const solution = (s, sub) => { let answer = "YES"; let queue = s.split(""); for (let j = 0; j < sub.length; j++) { let subArr = sub.split(""); if (queue.includes(subArr[j])) { if(queue.indexOf(subArr[j]) !== 0) return answer = "NO" queue.shift(); } } return answer; }; console.log(solution(s, sub)); return <div></div>; }; export default Sol7;

  • javascript
  • 코딩-테스트
복실묘 댓글 1 좋아요 0 조회수 204

백준 13023 질문있습니다.

미해결

Do it! 알고리즘 코딩테스트 with C++

문제의 의도가 파악이 되지 않아 질문 남깁니다. 모든 노드에서 DFS를 돌리는경우도 유튜브 채널 댓글 보면서 이해를 했습니다. 위의 설명을 보니 이해가 바로 되었습니다. 근데 문제에서 A는 B와 친구다. B는 C와 친구다. C는 D와 친구다. D는 E와 친구다. 라는 것을 보고 깊이가 4일 때를 하드코딩으로 코드에 넣으셨는데 저는 이것을 보고 그냥 DFS로 n -1번까지 다 연결되어 있으면 1을 출력하라는 것이구나~ 하고 이해를 하였는데 어디에 근거하여 깊이가 4인 경우가 발생하면 1을 출력하라고 어떻게 이해하셨는지 궁금합니다. #include <iostream> #include <vector> #include <queue> #include <algorithm> #include <deque> #include <cmath> using namespace std; #define ll long long #define endl "\n" int n; bool flag = false; vector<vector<int>> adj; vector<bool> visit; void DFS(int now, int depth) { visit[now] = true; if (depth == n - 1) { flag = true; return; } for (int next : adj[now]) { if (visit[next] == false) DFS(next, depth + 1); } visit[now] = false; } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int m; cin >> n >> m; adj.resize(n); visit.resize(n); for (int i = 0; i < m; ++i) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } for (int i = 0; i < n; ++i) { DFS(i, 0); if (flag) break; } if (flag == false) cout << 0; else cout << 1; return 0; } 위는 제가 처음에 짠 틀린 코드입니다. DFS의 조건문에서 depth가 n - 1과 같으면 flag를통해 return하도록 하였습니다.

  • c++
  • 코딩-테스트
  • 알고리즘
starkshn 댓글 1 좋아요 0 조회수 228

섹션 2. 1, 2차원 배열 탐색 - 1번문제

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

섹션 2. 1, 2차원 배열 탐색 - 1번문제 앞의 숫자보다 크면 출력하는건데 let arr=[7, 3, 9, 5, 6, 12]; arr이 이럴때, 7앞부분엔 아무것동 없는데 정답 출력에 왜 7이 들어가는지 잘모르겠어서요.

  • javascript
  • 코딩-테스트
qwer12323 댓글 1 좋아요 0 조회수 162

긍정왕 홍철이 문제 질문입니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

문제를 보고 아래와 같이 풀었으나 // Online C++ compiler to run C++ program online #include <bits/stdc++.h> using namespace std; const int n = 3; //4방향 이동 int dy[4] = { -1, 0, 1, 0 }; int dx[4] = { 0, 1, 0, -1}; int visited[n][n]; vector<int> v; //기본 맵 int a[3][3] = { {10,20,21}, {70,90,12}, {80,110,120} }; void print() { for(int i : v) { cout << i << " "; } cout << "\n"; } // 완탐 재귀 함수 void go(int y , int x) { //기저 조건 if( y == n-1 && x == n-1 ) { print(); return; } for(int i = 0; i < 4; i ++) { int ny = y + dy[i]; int nx = x + dx[i]; //범위 체크 if( ny < 0 || ny >= n || nx < 0 || ny >= n ) continue; if( visited[ny][nx] ) continue; visited[ny][nx] = 1; //방문 처리 v.push_back(a[ny][nx]); go(ny, nx); visited[ny][nx] = 0; //원복 v.pop_back(); } } //완탐과 원복 : 예제_ 긍정왕 홍철이의 구걸 여행행 int main() { visited[0][0] = 1; v.push_back(a[0][0]); go(0,0); return 0; } 출력이 위와 같이 0이 껴서 이상하게 나옵니다. 큰돌님 코드와 비교해 봤는데 다른 점을 못찾겠어요ㅜㅜ 제가 실수한 것이 있을까요??

  • c++
  • 코딩-테스트
kamin_s2 댓글 2 좋아요 0 조회수 276

이중 연결 리스트 AddNewNode 함수 질문

해결됨

독하게 C를 배운 사람을 위한 선형 자료구조

안녕하세요! 항상 좋은 강의 만들어주셔서 감사합니다! 강의 완강 후 복습하며 자료구조 구현 중에 질문이 있습니다. 이중 연결 리스트 구현 중 새로운 노드를 추가한 뒤, 앞뒤 노드의 pPrev와 pNext를 바꿔주는 과정에서 처음에는 pPrevNode를 새로 정의하지 않고 주석 처리한 부분으로 앞 노드와 관계를 정리했는데, 이렇게 하니 이전 노드의 pNext의 값이 pNewNode의 주소로 제대로 바뀌지 않는 것 같았습니다. 혹시 이렇게 되는 이유가 궁금합니다

  • c
  • 코딩-테스트
  • 알고리즘
  • vc++
이제제 댓글 1 좋아요 0 조회수 360

[질문은 아니고 해결법&코드 공유] deque로 풀어봤어요!

미해결

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

저는 37번 LRU 문제를 Deque랑 삽입 정렬로 풀었습니다. 삽입 정렬은 강사님 설명대로 반복된 입력값을 정렬시킬 때 사용했습니다. deque는 캐시메모리 크기를 초과할 때 pop(제거)를 위해 사용했습니다. 처음에는 vector로 풀었는데, 이럴 경우 입력값 : 1 2 3 2 6 2 3 5 7 index : 0 1 2 3 4 vector<int> v : 1 6 2 3 5 에서 처음 입력됐던 1이 삭제돼야하는데, vector는 pop_back()만 있어서 앞쪽인 1이 아니라 뒤쪽인 5가 삭제됩니다. 그래서 pop_front() 혹은 pop_back()랑 push_front가 동시에 컨테이너가 없을까 찾아보다가, 양방향 입력/제거 가능한 deque를 사용했습니다! (queue도 앞으로 들어오고 뒤로 나가는 거지만 정렬하기 힘드니까 패스!) 아래 코드 첨부합니다! 최근에 해시 공부하면서 익힌 iterator(반복자)도 사용했는데, iterator가 처음이신 분들은 대충 index처럼 요소 접근하는걸로 이해해주시면 됩니다!(정확히는 주소 접근이지만!) #include<iostream> #include<deque> #include<algorithm> using namespace std; int main() { int S{}, N{}; deque<int> dq; // 중복 값 정렬 cin >> S >> N; for (int i = 0; i < N; i++) { int tmp{}; cin >> tmp; // 중복값 찾기 deque<int>::iterator it = find(dq.begin(), dq.end(), tmp); if (it == dq.end()) dq.push_front(tmp); // 중복 없으면 그냥 앞에서 삽입 else { // 중복값 있다면 // (tmp = *it을 할 필요없음 : 그 값이 그 값이니까) // 하나씩 뒤로 밀기. 제일 앞쪽에 도착하면 it-1을 못하니까 반복 종료 for (it; it != dq.begin(); it--) { *it = *(it - 1); } *it = tmp; } // 제일 뒤쪽 삭제 if (dq.size() > S) dq.pop_back(); } for (int i = 0; i < dq.size(); i++) cout << dq[i] << " "; }

  • c++
  • 코딩-테스트
  • deque
  • 자료구조
이제옌 댓글 1 좋아요 0 조회수 329

카드 점수 정확성 테스트 경우의 수 문의

미해결

입문자를 위한 코딩테스트 핵심(이론과 문제풀이) [Python]

안녕하세요 선생님 그리디 카드점수 문제 경우의수 문의입니다. 입출력 예에서 nums 리스트에 2, 3, 7, 1, 2, 1, 5 에서 왼쪽 맨카드나 오른쪽 끝 카드 중 둘 중 하나만 가져갈 수 있다고 가정하고 가져갈 수 있는 카드의 개수 K가 주어졌을때 K가 4 라면 경우의수가 5개 밖에 나오지 않는다고 강의를 들었는데 5가지 말고 더 나오지 않은가 해서 문의드립니다. 1: 2,3,7,1 2: 2,7,1,2 3: 2,2,1,5 4: 2,1,2,1 5: 2,3,1,2 6: 2,3,1,5 7: 1,2,1,5 이 말고도 4가지 카드를 뽑을 수 있는경우의수는 조금더 나오질 않나요? 제가 잘못 이해하고 있는지 문의드립니다.

  • python
  • 코딩-테스트
합격가자 댓글 1 좋아요 0 조회수 230

이렇게 풀어도 괜찮은걸까요?

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. function solution(arr) { let answer = arr; for (let i = 1; i < arr.length; i++) { for (let j = 0; j < i; j++) { if (arr[i] < arr[j]) { arr.unshift(arr[i]); arr.splice(i + 1, 1); } else { if (arr[i] < arr[j + 1]) { arr.splice(j + 1, 0, arr[i]) arr.splice(i + 1, 1) } } } } return answer; } let arr = [11, 7, 5, 6, 10, 9]; console.log(solution(arr));

  • javascript
  • 코딩-테스트
wodms4525 댓글 1 좋아요 0 조회수 181

1-N 1629 홀수 일 때의 처리가 이해가 되지 않습니다.

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

#include <bits/stdc++.h> using namespace std; long long A, B, C; long long go(long long a, long long b) { if (b == 1) { return a % C; } long long ret = go(a, b / 2); ret = (ret * ret) % C; if (b % 2 == 1) { ret = (ret * a) % C; } return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> A >> B >> C; cout << go(A, B) << '\n'; } B가 홀 수 일 때, 홀수 처리를 하기 직전 ret = A^(B-1) % C 입니다. 그러면 홀수처리가 진행 될 때 ret = ((A^(B-1) % C) * A) %C 가 코드의 상황 인데 이게 최종 결과인 A^B % C 와 같아지는게 이해가 안됩니다. 나머지 연산의 합동공식이 (a * b) % c = (a % c * b % c) % c 이기 때문에 A^B % C = (A^(B-1) * A) % C = (A^(B-1) % C * A % C) % C 위와 같은 식이 나와야 하고 ret = (ret * a) % C가 아니라 ret = (ret * a % C) %C 가 되어야 하는 것 아닌가요? 백준에서는 둘다 맞게 처리 되는데 이해가 되지 않습니다.

  • c++
  • 코딩-테스트
전지훈 댓글 1 좋아요 0 조회수 315

강의보기전 직접 풀 수 있는 문제 오랜만입니다. ㅠㅠ

미해결

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

이전 2문제에 비해 다소 쉬웠습니다. function solution(cards, orderNum) { let answer = []; let n = cards.length; // n개 카드수에서 3개를 더한 합의 값이 제일 큰 순서대로 나열 // k번째로 큰 수를 리턴 for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { if (i === j) continue; for (let z = 0; z < n; z++) { if (i === z) continue; if (j === z) continue; answer.push(cards[i] + cards[j] + cards[z]); } } } answer = answer.sort((a, b) => b - a); return Array.from(new Set([...answer]))[orderNum - 1]; } const k = 3; console.log(solution([13, 15, 34, 23, 45, 65, 33, 11, 26, 42], k));

  • javascript
  • 코딩-테스트
rhkdtjd_12 댓글 1 좋아요 0 조회수 242

4-C 질문입니다

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

http://boj.kr/f816b7f59d3247c7958683ceae5d6b76 선생님 안녕하세요. 모든 경우의 수 마다 구역을 색칠해서 dfs가 2번호출되면 최솟값을 갱신하는 로직으로 짰습니다. 테스트케이스는 다맞는데 왜 틀리는지 이유를 모르겠습니다.

  • c++
  • 코딩-테스트
kkh185924 댓글 1 좋아요 0 조회수 214

강의교재p107

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

if(mp.find(1) == mp.end()) 이런 반복문 조건이 나오는데요 mp[1]을 할당하지 않기 위해서 이렇게 조건을 쓰신것 같은데요 조건식같은경우는 일단 할당된것이 하나밖에 없으니깐 처음과 끝이같다 그래서 참이다가 맞나요?그런데 그렇게되면 할당을 한것이랑 똑같지 않나요?

  • c++
  • 코딩-테스트
김우진 댓글 1 좋아요 0 조회수 151

강의교재 p106 질문

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

cout << mp[1] << '\n'; cout << mp2["aaa"] << '\n'; 이 코드에서요 위의 코드는 key에 1 값에 0을 저장하는 것은 알겠습니다.그리고 두번째 코드에서도 key에 aaa까지는 알겠는데 코드 실행결과를 보면 값이 %가 나와있습니다. 왜 그렇게 값이 나오는건가요?

  • c++
  • 코딩-테스트
김우진 댓글 1 좋아요 0 조회수 139

강의교재p104

미해결

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

mp.erase("kundol"); auto it = mp.find("kundol"); if(it == mp.end()){ cout << "못찾겠네 꾀꼬리\n"; } 이 코드결과 "못찾겠네 꾀꼬리"가 실행이 되는데요 제 생각에는 kundol을 erase 했으니 mp에 find를 실행하면 kundol이 없으니깐 0을 반환해서 it이 0이되고 그리고 mp.end는 지금 key값이 3개가 있으니 인덱스값이 2가되서 if반복문이 실행이 안되야하는거 아닌가요?

  • c++
  • 코딩-테스트
김우진 댓글 1 좋아요 0 조회수 210

인기 태그

인프런 TOP Writers

주간 인기글