강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

hongjm1022님의 프로필 이미지
hongjm1022

작성한 질문수

세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)

순열 알고리즘 [문제풀이] : BOJ 10974

라이브러리 사용

해결된 질문

작성

·

74

0

안녕하세요! 강의 너무 잘 듣고있습니다.

강의를 들으면서 궁금했던 점이

조합이나 순열 같은 경우 라이브러리가 존재하는데

이를 적극적으로 사용하는 것이 좋은지 아니면

조합이나 순열 관련 문제를 풀때마다 직접 구현해서 사용하는 것이 좋은지 궁금해서 이렇게 질문 남기게 되었습니다.

답변 2

0

알리 Ally님의 프로필 이미지
알리 Ally
지식공유자

안녕하세요, hgjm1022님!

해당 부분은 강의를 제작하면서 고민했던 부분 중 하나인데요.

 

결론적으로는 아래와 같은 2가지 이유 때문에 직접 구현하는 과정을 강의에 넣었습니다.

  1. 구현하는 과정을 통해 조합과 순열 알고리즘에 대해 깊게 이해할 수 있기 때문
    - 조합과 순열 알고리즘을 라이브러리로만 공부하는 경우에 흔히 시간 복잡도 조차 정확히 계산하지 못하는 경우가 종종 있습니다. 이런 경우를 방지하며 해당 알고리즘들이 어떻게 구현되는지 이해할 수 있도록 하기 위해 직접 구현하는 과정을 넣었습니다.

  2. 조합/순열 알고리즘을 응용해야 하는 경우엔 직접 구현해야 하기 때문
    - 조합 또는 순열을 이용하는 문제 중에서 백트래킹 유형에 속하는 문제들은 직접 조합/순열 알고리즘을 구현하여 몇몇 부분을 고치는 작업을 해야 합니다. 따라서, 라이브러리에만 의존하는 경우에 이러한 문제를 못 푸는 것이죠.
    - 즉, 조합/순열의 모든 경우를 살펴보는데 중간중간에 살펴보지 않아도 되는 경우는 생략하며 탐색하는 백트래킹 구조는 직접 구현해야 합니다. (백트래킹 관련 내용은 브루트 포스 알고리즘 [문제풀이] : BOJ 1342 강의 영상을 참고하시면 됩니다.)

 

실제 문제를 풀 때는 어떻게 해야 할까?

실제 문제를 푸실 때는 라이브러리를 사용하는 것을 권장합니다. 파이썬의 경우 조합/순열 라이브러리가 사용하기 편리하며 잘 구현되어 있기 때문에 사용하는 것이 구현의 정확성/속도 측면에서 유리합니다. (실제 강의 또한 초반 부분을 제외하면 라이브러리를 적극 활용합니다.)

 

다만, 라이브러리를 쓰는 경우에도 시간 복잡도는 정확히 계산할 수 있어야 합니다. 그리고, 백트래킹 관련 문제가 나오면 조합/순열을 직접 구현해야 하는 경우가 있을 수 있기 때문에 로직에 대해서 어느 정도 숙지하는 것을 추천드립니다.

 


질문에 대해 만족스러운 답변이 되었기를 바랍니다!

추가로 궁금하신 점이나 더 자세한 설명이 필요하시다면 언제든지 말씀해 주세요. 😄

5점 수강평을 남겨주시면 향후 더 나은 강의를 만드는 데 큰 도움이 됩니다. 🌟

0

안녕하세요, 인프런 AI 인턴입니다. hongjm1022님!

조합과 순열 문제를 해결할 때 라이브러리를 사용하는 것과 직접 구현하는 것 사이에 고민이 있으신 것 같습니다. 이 부분은 코딩 테스트와 실전 프로그래밍에서 매우 중요한 전략입니다.

라이브러리 사용

  • 장점: 파이썬의 경우 itertools 모듈을 사용하면 조합(combinations)과 순열(permutations)을 쉽게 구현할 수 있습니다. 이를 사용하면 코드가 간결해지고 실수를 줄일 수 있습니다. 특히 시간 내에 문제를 해결해야 하는 코딩 테스트에서는 라이브러리를 활용해 효율적으로 문제를 푸는 것이 유리합니다.
  • 단점: 라이브러리에 지나치게 의존하면 알고리즘의 본질적인 이해가 부족해질 수 있습니다. 따라서 기초 개념을 탄탄히 이해하고 라이브러리를 사용하는 것이 중요합니다.

직접 구현

  • 장점: 직접 구현함으로써 알고리즘의 동작 원리를 깊이 이해할 수 있습니다. 이는 문제 해결 능력을 키우는 데 도움을 줄 뿐만 아니라, 특정 문제에서 커스터마이징이 필요할 때에도 유용한 지식을 제공합니다.
  • 단점: 구현에 시간이 많이 소요되고, 실수할 가능성이 높아질 수 있습니다. 특히 구현 복잡도가 높은 경우 시간 초과 등의 문제가 발생할 수 있습니다.

결론

일반적으로 기본적인 코딩 테스트에서는 라이브러리를 사용하는 것이 권장됩니다. 시간을 절약하고 정확도를 높이는 데 도움이 되기 때문입니다. 그러나 학습 초기 단계에서는 직접 구현을 통해 개념을 이해하고 이후에 라이브러리를 통해 효율성을 극대화하는 방향이 좋습니다.

관련된 학습 전략에 대한 유사한 질문이 여기에도 있으니 참고하시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

hongjm1022님의 프로필 이미지
hongjm1022

작성한 질문수

질문하기