ABOUT ME

비 전공자, 초보 개발자가 작성하는 개발일지 블로그입니다. 초보 및 비 전공자가 작성하기 때문에 실수도 많고 잘못 알고 있는 부분이 많습니다. 많은 피드백 부탁 드립니다!

  • 12월 20일 - TIL
    스파르타 부트 캠프/TIL 2021. 12. 20. 21:48

    오늘 한 일 

    1. 개인 프로젝트 진행 - UP Down 게임  

    2. 알고리즘 문제 풀기 및 이해 - 2 문제

    3. 웹프로그래밍 A-Z 5주차 완강

     

     


    1. 개인프로젝트 

     

    이번 주차 부터 개인 프로젝트가 아침 발제시간에 나오고 해당 프로젝트를 오후 4시에 해설을 하는 방법으로 시간표가 정해졌다. 

    오늘 개인으로 진행되는 프로젝트는 python을 이용한 게임 프로젝트로 간단한 UP/Down 프로젝트를 진행. 

     

     

    # 업다운 게임 만들기 

     

    <기본 기능 외에 추가된 기능들>

    • 공백이 있어도 무시
    • 게임을 다시 시작할 수 있는 기능 추가
    • 남은 횟수 표기
    • 숫자 입력시 숫자가 아니면 숫자가 아님을 알려주는 기능

     

     

     

    # 업다운 게임 by Computer 

    <기본기능 외에 추가된 기능들 >

     

    • 공백 무시 
    • 시작숫자가 100이상 이면 재입력
    • index를 이용한 중간값 찾기 
    • 총 시행한 횟수 출력
    • 이외에도 리스트를 만드는 방법, 소숫점 예외 처리 등이 있음 

     

     

    <전체 코드>

    https://colab.research.google.com/drive/1QWxiZZxUmrEQ8ipSSa90wBA9LSV0difm?usp=sharing 

     

    Google Colaboratory Notebook

    Run, share, and edit Python notebooks

    colab.research.google.com

     

     

    <소감> 

    • 간단한 게임임에도 예외 처리할 사항이 생각보다 많았다. ( 공백, 소문자, 대문자, 숫자인지 문자인지, 공백 등등 )
    • 추가 해설 - 0부터 100까지 숫자를 설정하여 중간에 값을 나눠주는 방식으로 코딩했지만 리스트를 만들어 리스트를 줄이는 방법으로하면 소수점같은 예외처리가 쉬울 수 있다. 

     

     


    2. 알고리즘 문제 풀기 및 이해 

     

    오늘 푼 알고리즘문제는 라면공장문제로 

     

    남은 밀가루양 : 4

    보급할 수 있는 날짜 : [ 4, 10, 15 ]

    보급할 수 있는 양 : [ 20, 5, 10 ]

    버텨야하는 날짜 : 30 

     

    이 4개의 데이터로 얻을 수 있는 보급중 가장 적게 보급할 수 있는 방법을 찾는 알고리즘 인데 

     

    처음에는 해당 단원에서 배운 재귀함수와 트리구조를 이용하여 전체 경우의 수를 찾는 방법인 줄 알았다. 

    1. supply_dates에 따라 각각 보급을 할지 안할지 모든 경우의 수를 파악한다. -> 트리구조로 경우의 수 판단
    
    Ex) * 4일째 보급을 받을 경우 
                 상황:  남은 stock : 20개 
                  
                  * 10일째 보급을 받을 경우
                      상황 : 남은 stock : ( 20-6 ) + 5 = 19
    
                        * 15일째 보급을 받을 경우 (마지막 보급)
                           상황 : 남은 stock : (19-5) +10 = 24     --> success
    
                         * 15일째 보급을 안 받을 경우 (마지막 보급)
                           상황 : 남은 stock : (19-5) = 14      --> fail (<15)
    
    
    
               
                  * 10일쨰 보급을 안받을 경우
                       상황 : 남은 stock : 20 - 6 = 14
    
    
                        * 15일째 보급을 받을 경우 (마지막 보급)
                              상황 : 남은 stock : (14 - 5) + 10 = 19       --> success
    
                         * 15일째 보급을 받을 경우 (마지막 보급)
                               상황: 남은 stock : (14-5)  = 9      --> fail 
    
    
          * 4일째 보급을 받지 않을 경우 
                  상황 : 남은 stock : 0개 --> fail break; 
    
    
    재귀함수 x 
    for문을 통해 적용 2진트리를 만들어 적용?

     

    라는 생각으로 재귀함수를 작성하려고 했지만 재귀함수에 대한 이해가 아직 잘 되질 않아서 진도가 안나갔으며 TIP에서는 heapq모듈을 사용하면 된다고 했지만 해당 방법으로는 heapq모듈을 쓰질 않는다고 판단 함

    >> 넘겨줘야 하는 값 판단이 부족했다. 

     

    그래서 해설을 보면서 이방법이 맞나 확인했지만 이방법으로 하는게 아니라 남은 stock보다 낮은 일수 중 받을 수 있는 최대양을 구하는 방법을 쓴다. 

     

    처음에는 이 방법이 무슨 소린가 싶었지만 차분히 생각해보니 그냥 경우의 수를 전체 구하는 방법은 마지막에 사용하는 방법이고 해당 문제에서는 한정적인 제약이 있기 때문에 굳이 경우의 수를 다 확인하지 않아도 된다는 것이다. 

    우선 날짜는 항상 왼쪽에서 오른쪽으로 순서대로 정렬이 되어있고 보급이 가능한 날짜 중 가장 큰 것만 선택한다면 자동적으로 가장 적은 보급을 할 수 있다는 것이 경우의 수로 풀지 않고 최대, 최소 정렬인 heap을 사용하는 방법이다. 

     

    해당 알고리즘문제는 이외로 매우 간단하게 코드가 적혀있는데 이를 이해하는데 시간이 좀 걸렸다. 

    특히 남은 stock의 양이 많이 헷갈렸는데 4번째 날 보급시 남은 stock은 20개가 되야하는데 해당 모범코드에서는 24가 나와서 멘붕이 많이 되었다. 정답은 기준을 지금으로 잡으면 되는 문제였다. (각 날자별로 필요한 보급을 세지 않음 ) 

    //////////////////////////  모범답안   ///////////////////////////////////////////////
    
    
    
    재고가 바닥나는 시점에서 가장 큰 재고량을 찾아 선택한다. 
    
    Ex) ramen_stock = 4
    supply_dates = [4, 10, 15]
    supply_supplies = [20, 5, 10]
    supply_recover_k = 30
    
    ramen_stock이 4일으므로 4일이내에 수급할 수 있는 날짜 선택 
    >>> 4 - 20 
    
    남은 stock : 20
    남은 기간 : 30 - 4 = 26
    
    20일 이내에 수급할 수 있는 날짜 선택
    >>> 10 - 5
             15 - 10 
    
             이 중 가장 큰 값을 선택 
              >>> 15  - 10 선택
    
    나은 stock  : 20 - 15 + 10 = 15 
    남은 기간 : 26- 15 = 11

     

     

     

    이후로 2번째 문제인

     

    로봇 청소기 문제를 풀려고 했으나 작동방식을 이해하는데 2시간정도 시간을 쓴것같다. 

    현재  방향에서 왼쪽을 탐색한다고 했는데

    예를들어 북쪽을 보고 있다면 북쪽의 왼쪽인 왼쪽위 대각선을 뜻하는 건지 단순히 왼쪽인 서쪽을 말하는 건지 이해하는데 어려움이 있었다. 또한 2번 반복 이런식으로 되어 있어서 생각보다 이해하는데 시간이 걸렸고 결국 해설지를 보며 조금씩 움직여보고 나서야 작동방식이 이해가 됬다...( 글을 잘 읽자..)

    ppt에서 그려본 맵 구조

    또한 해당 방법이 맞는지 ppt로 맵구조를 그려가며 로봇의 위치를 파악하려했지만 유독 헷갈리기도 하고 옮겨가는 갯수가 많아 자주 틀렸다. 앞으로는 작게 줄여서 테스트를 해봐야겠다. 

    간단한 큰 방법만 정리하고 마무리했다. 나머지는 내일 이어서 생각해 볼예정이다. 

     

    <로봇 작동 방식 정리>

    ///////////// 로봇 문제 ///////////////////
    
    1. 왼족 확인
        있다면 >> 이동 후 1번 반복
    
        없다면 >> 회전 후 왼족 확인
                        
         cnt == 4이면 
                   뒤에 벽이 있음? >> 후진
                   뒤에 벽에 없음 >> 중단

     


    3. 웹프로그래밍 5주차 수업 완 

     

    지난번에 들었던 수업과 비슷하게 내가 만든 서버를 웹사이트로 보내는 작업을 하였다. 

     

    배운 내용을 간단히 적어 보자면

     

    • 가비아 - 도메인 구매
    • 파일질라 - 가상 컴퓨터로 파일 전송
    • EC2 - 서버용 컴퓨터 대여 및 반납 ( OS : ubuntu )
    • ubuntu Setting 및 설치(Flask, dnspython, pymongo) 
    • Port 번호 변경 ( 80으로 들어온걸 5000으로 바꿔줘라 )
    • nohup 으로 계속해서 서버 돌리기 및 끄기 
    • meta tag 설정 (이미지, 설명, 타이틀) 
    • etc

    이고 하다가 중간에 막혔던 부분은 pymongo 부분이다. 이번 강의는  들었던 강의와는 다르게 컴퓨터에 내장된 Local 데이터 베이스를 안쓰고 온라인에 있는 Atlas라고 하는 곳에서 데이터를 봤는데 실행 도중 

    SeverSelectiontTimeOut : (~~~~~)

    라는 문구가 뜨며 계속 오류가 났다. ( 캡쳐를 못따서 기억나느 것만 적음 ) 

     

    시도해본 것

    • mongoDB 컴퓨터에 설치
    • pymongo, dnspython 재설치
    • 링크다시 재입력
    • mongoDB ubuntu에 설치
    • Collection 확인 

    각각의 방법들을 진행했지만 소용이 없었고 

    stackoverflow를 통해 고쳤는데 

     

    요약하자면 Atlas 왼쪽 메뉴에서 Nework Access에 들어가 현재 접속하려는 IP를 추가해줘야한다는 것이다. 

    이글 을 토대로 추가해줬더니 정상작동 아마 아무나 해당 DB에 접속하지 못하도록 해놓은 듯 싶음

     

    https://stackoverflow.com/questions/59162342/mongodb-connection-error-mongotimeouterror-server-selection-timed-out-after-30

     

    MongoDB connection error: MongoTimeoutError: Server selection timed out after 30000 ms

    I am trying to create a fullstack app reading the following tutorial: https://medium.com/javascript-in-plain-english/full-stack-mongodb-react-node-js-express-js-in-one-simple-app-6cc8ed6de274 I

    stackoverflow.com

     

     

     

    추가로 진행한 내용 : 블로그정리 및 이미지 삽입 등

     

    여기까지 오늘 진행한 내용들이다. 오늘하루 알고리즘문제로 많은 시간을 뺏겨서 다른 정리를 못한 것같다. 

    내일 프로젝트도 있는데 빨리 만들고 정리를 해야겠다. 

    추가로 알고리즘 문제 너무 어려워서 연습이 많이 필요한듯

     

     

     

     


    '스파르타 부트 캠프 > TIL' 카테고리의 다른 글

    TIL - 12월 25일  (0) 2021.12.26
    TIL - 12월 24일  (0) 2021.12.25
    12월 23일  (0) 2021.12.23
    12월 22일 - TIL  (0) 2021.12.22
    웹 프로그래밍 (12/ 15일) 개발일지  (0) 2021.12.20

    댓글

Designed by Tistory.