ldy51001   2년 전

안녕하세요 저는 특성화고를 나와서 한 스타트업에 실습하고 있는 한 고3 학생입니다. 스타트업은 파이썬 장고로 앱을 개발해 운영하는 회사인데요. 파이썬은 처음 접해 보았고 3달 정도 실습하는 동안 파이썬으로 알고리즘 공부, 장고 튜토리얼 실습, 문서 읽고 내용 정리, aws 기초 자격증 취득 등을 했는데 정규직 채용 조건 중 하나가 백준 16단계까지 정도의 알고리즘 문제 풀이입니다. 이 테스트가 1주 정도 남은 시점에서 저는 현재 코드를 보았을때  이해는 다 가지만 브루트 포스 정도의 문제는 직접 구현하기 어렵습니다. 3달동안 공부했으면 파이썬으로 브루트포스 정도의 문제는 구현해야 정상인가요? 냉정하게 조언 부탁드려요

jiminp   2년 전

https://www.acmicpc.net/step 요거 말씀하시는 것 같은데, 사람마다 정도의 차이가 있겠지만 프로그래밍을 처음 접하는 상황에서 알고리즘 뿐만 아니라 Django, 문서 정리 및 AWS 자격증 공부까지 3달동안 하면서 DP를 익숙하게 하는 것은 결코 쉽지 않아 보입니다.

3달 동안 프로그래밍 공부에 비중을 얼마나 뒀을지 전 잘 모르기 때문에 저는 질문에 곧바로 답변을 드릴 수는 없습니다. 다만 회사에서 요구하는 사항이 (소수 관련 수학 지식, 백트래킹이나 DP를 제외하면) 대부분의 프로그래밍 작업을 할 때 요구되는 스킬이고, 특히 브루트포스 단계의 문제의 경우 "문제를 풀 수 있는 제일 간단한 방법을 코드로 옮길 수 있는" 매우 중요한 능력을 필요로 하기 때문에, 3달이라는 기간과 상관 없이 꼭 지나가야 할 단계라고 생각합니다.

"파이썬으로 브루트포스 문제를 구현하는 것"의 어느 부분이 문제인지 모르겠지만, 혹시 다음과 같은 경우들 중 하나라면 조언을 드릴 수는 있습니다.

  1. 문제를 봤을 때 어떻게 풀어야 할지 감이 오지 않는 경우
    • 브루트포스 단계의 문제의 경우, 보통 "가능한 모든 경우에 대해 무언가를 계산하고, 각 경우에 대한 결과를 취합해 정답을 구한다"라는 꼴이 해답이 됩니다
    • 예를 들어, 1018번 문제의 경우 문제 지문으로부터 "체스판을 잘라내고 칠할 수 있는 모든 경우의 수에 대해 다시 칠하게 되는 정사각형 개수를 구하고, 그 개수의 최솟값을 구한다"라는 것을 캐치해 낼 수 있어야 합니다.
  2. 문제를 어떻게 푸는지 설명하라면 서술할 수는 있지만, 코드로 옮기라고 하면 옮기지 못하는 경우
    • 브루트포스 문제의 경우, 다음과 같은 방식으로 어느 정도 감을 잡을 수 있습니다. (이걸 일종의 공식으로 생각하면 안 됩니다. 익숙해지면 아래 적힌 것들을 일일히 생각하는 게 아니라 "뭘 해야 하는지"로부터 바로 코드를 작성할 수 있게 됩니다.)
    • 문제에서 "한 가지 경우"가 무엇인지, "모든 경우를 얻는 방법"은 무엇인지, "각 경우에 대해 무엇을 계산해야 하는지"를 우선 파악해야 합니다.
    • 그 다음, "한 가지 경우"를 어떤 변수들의 모임으로 표현할지 정해야 합니다.
    • 그 다음, "한 가지 경우에 대해 원하는 것을 계산하는" 함수를 작성해야 합니다.
    • 그 다음, "모든 경우에 대한 변수값들을 얻는 방법"을 생각하고, 코드(보통 for 루프)로 표현해야 합니다.
    • 이제 위에서 작성한 함수를 이용해 코드를 완성시키면 됩니다.
    • 예를 들어, 위에서 언급한 1018번 문제의 경우
      • "위치가 정해진 체스판을 잘라내고, 이 체스판의 왼쪽 위 구석을 검은색 혹은 흰색으로 칠하는 경우"가 "한 가지 경우"가 되고,
      • 위치는 체스판의 왼쪽 위 꼭지점의 좌표를 담은 정수 변수 x, y, 체스판의 왼쪽 위 구석의 색깔("B" 혹은 "W")은 문자열 변수 c로 표현할 수 있습니다.
      • 따라서 "한 가지 경우"는 x, y, c로 표현할 수 있습니다.
      • 그 다음, 세 가지 인자 x, y, c를 입력으로 받았을 때 몇 가지 칸을 다시 칠해야 하는지를 반환하는 함수를 작성합니다.
      • 그 다음, 모든 가능한 x, y, c에 대해 그 함수를 호출하는 코드를 작성하고, 결과값의 최솟값을 찾으면 됩니다.
      • 자세한 건 첨부된 코드를 확인하세요.
  3. 다른 프로그래밍 언어(C, C#, Java등)로는 풀 수 있지만, 파이썬으로는 풀지 못하는 경우
    • 알고리즘을 공부하기보다는 파이썬에 대한 경험이 더 필요합니다.
    • 백준 문제를 많이 풀어보거나, 튜토리얼에서는 뼈대(서버는 어떻게 실행하고, 라우팅은 어떻게 해야 하고 등등...)만 참고하고 Django로 자신만의 간단한 웹앱을 만들어 보세요.
    • 파이썬 문서 페이지를 자주 참고하세요. https://docs.python.org/ko/3/

댓글을 작성하려면 로그인해야 합니다.