inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

1주차 문제들의 시간 복잡도 확인

282

김제하

작성한 질문수 32

1

1주차 문제들의 큰돌님 코드의 시간 복잡도 계산을 확인받고자 질문 올립니다.

 

A

B: O(n)

C: O(n)

D: O(n)

E: O(n)

F: O(n)

G: O(n)

H: O(n)

I: O(n)

J: 패션왕 신해빈 문제인데, while문과 그 안에 for문이 있기 때문에 O(n^2)으로 생각해야하나요? 아니면 테스트케이스로 주어진 while문 내부만 고려해서 O(n)으로 생각해야 하나요?

K: O(n)

L: O(n^2)

M: O(n^2)

N: O(long N)

O: 아직 문제 이해를 잘 못해서 더 고민해보겠습니다..

c++ 코딩-테스트

답변 1

1

큰돌

안녕하세요 제하님 ㅎㅎ

A

  • 순열로 풀었을 때

    • for 문 -> next_permutation 그리고, 내부에 for문 -> for문으로 출력 순으로 진행했는데, next_permutation 내부에 for문이 있으므로 O(n^2) 인가요?

  • 조합으로 풀었을 때

    • solve()에서 for문 중첩이므로 O(n^2)인가요?

>> 아닙니다. 순열을 nPr의 시간복잡도를 가지고 조합은 nCr의 시간복잡도를 가집니다.

 

답변드리기 앞서 확인을 하고자하는데요.

각 문제에 대한 제 해설코드의 시간복잡도를 물어보시는 것 맞나요?

감사합니다.

0

김제하

네 그렇습니다! 질문이 모호한 면이 있었군요. 댓글로도 남기겠지만, 질문도 다시 수정하겠습니다.

그리고, 강의 잘 듣고 있습니다. c++로 코테 준비가 처음이라 걱정이 많았지만, 좋은 코드이고, 좋은 문제들을 미리 뽑아주셨고, 미리 교안도 있어서 시간을 많이 아낄 수 있는 것 같습니다.
이걸로 작년 초에 코테 준비했었으면 헤매는 일이 없었을 것 같은데 많은 아쉬움이 있습니다.

답변 잘 부탁드립니다.

0

김제하

그렇다면 시간복잡도 작성 형식에 따라 작성하면 O(nCr)로 입력하면 되나요?

예를 들어 5_C_3 이라고 할 때 5! / (3! * 2!) = 10 이므로 O(10) 으로 생각하면 될까요?

1

큰돌

그렇다면 시간복잡도 작성 형식에 따라 작성하면 O(nCr)로 입력하면 되나요?

>> 네 맞습니다.

예를 들어 5_C_3 이라고 할 때 5! / (3! * 2!) = 10 이므로 O(10)

>> 변수가 아니라 입력값으로 들어가게 되면 그렇게 되는게 맞습니다. 다만, 10이라고 하시면 됩니다. O(10)이라고 하지는 않습니다.

1

큰돌

안녕하세요 제하님 ㅎㅎ

요청하신 해설코드의 시간복잡도입니다. O()는 중복되서 제외했으며 해당 부분 확인해보시고 궁금하신 부분이 있으시면 질문주세요.

A : max(nlogn, nPr)

B : n

C : 1

D : n

E : 1

F : n

G : n

H : n

I : m * logn

J : n

K : 1

L : n^2

M : n * s.size()

N : logb

O : 알 수 없음.(얼마나 나머지 연산을 해야 하는지는 미지수입니다. )

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

0

김제하

큰돌님 안녕하세요! 위 질문과 관련된 게 아닌 2주차 개념과 관련하여 질문을 남기고자 합니다.

저는 bfs는 queue를 사용하고, dfs는 stack을 사용한다고 이해해왔는데요.

2주차 개념 블로그 내용 정리를 보면 bfs에서만 queue를 사용하고, dfs에서는 사용안하시고 코드를 짜신 걸 이해했습니다.

그리하신 이유는 stack을 사용하지 않고 짜는게 더 코드가 짧아서 그리하신 건가요?

제가 stack을 사용하여 짠 dfs 코드는 다음과 같습니다.
종화는 방구쟁이야! 를 stack을 사용해서 해봤습니다.

```cpp

#include <bits/stdc++.h>
using namespace std;
const int max_n = 104;
int m, n, adj[max_n][max_n], visited[max_n][max_n], y, x, ans;
int dy[] = {-1, 0, 1, 0};
int dx[] = {0, 1, 0, -1};

void dfs(int y, int x)
{
    cout << y << " : " << x << '\n';
    visited[y][x] = 1;
    stack<pair<int, int>> s;
    s.push({y, x});
    while (s.size())
    {
        tie(y, x) = s.top();
        s.pop();
        for (int i = 0; i < 4; i++)
        {
            int ny = y + dy[i];
            int nx = x + dx[i];
            if (nx < 0 || ny < 0 || nx >= n || ny >= n)
                continue;
            if (adj[ny][nx] && !visited[ny][nx])
            {
                visited[ny][nx] = 1;
                s.push({ny, nx});
            }
        }
    }

    return;
}

int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m;
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cin >> adj[i][j];
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            if (adj[i][j] && visited[i][j] == 0)
            {
                ans++;
                dfs(i, j);
            }
    }
    cout << ans << '\n';
    return 0;
}


```

1

큰돌

안녕하세요 제하님 ㅎㅎ

2주차 개념 블로그 내용 정리를 보면 bfs에서만 queue를 사용하고, dfs에서는 사용안하시고 코드를 짜신 걸 이해했습니다.
그리하신 이유는 stack을 사용하지 않고 짜는게 더 코드가 짧아서 그리하신 건가요?

>> DFS + stack으로도 할 수 있지만 stack을 사용하지 않아도 해당 로직을 구현할 수 있기 때문에 stack을 사용하지 않는게 좋습니다. 네 맞습니다. 코드가 더 짧고 그럼으로써 복잡성도 낮아집니다.

그리고 탐색만 하는 알고리즘이라면 BFS보다는 stack을 사용하지 않은 dfs를 추천드립니다.

 

감사합니다.

4 - A

0

26

2

코딩살구클럽 입장이 안됩니다

0

65

2

4-F 경우의 수 질문입니다.

0

33

2

코딩살구클럽 가입이 안됩니다.

0

76

2

살구 클럽에 대한 질문있습ㄴ디ㅏ

0

57

1

교안 158페이지 문의드립니다

0

45

2

코딩살구클럽 관련 건의사항

0

116

1

코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다

0

44

1

진행 방법 질문드립니다!

0

81

2

2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.

0

63

2

2주차 개념#12 트리 순회

0

32

2

백준사이트가 종료된다고 합니다.

0

316

2

백준 서비스 종료

9

952

1

sk 하이닉스 코테 대비

0

386

2

3-G 최댓값 질문

0

54

1

모듈러 연산 값이 10이 아닌 경우도 있지 않나요?

0

84

2

3-I 코드 질문드립니다.

0

65

2

3-N 질문 있습니다.

0

68

2

학습방법

0

105

2

4-H 질문 있습니다 (코드 리뷰)

0

69

2

코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.

0

183

2

2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.

0

72

2

2주차 개념 #4-2. 인접행렬 질문있습니다.

0

65

2

1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.

0

53

2