파이썬 알고리즘 1주차 : 기초 문제

정글일지 2

1.개발 진행 및 완료상황

  • 1주차 Python Algorithm 기초 문제 완료
  • 1주차 Pyton Algorithm 문제 진행중
  • Python Algorithm 1,2강 학습 완료
  • 업무, 개발 중 발생한 이슈/고민 또는 이를 해결한 내용

  • data 라는 list에 원소를 추가할 때 문제가 발생했다. 위의 코드는 new_data가 nonetype이 되어버려 뒤 코드에서 말썽을 일으켰다. 밑에 방식으로 해야 data가 원소만 추가한채로 유지되어 이후에도 계속 사용할 수 있다.

new_data = data.append(N) data.append(N)

  • 오늘 푼 문제들 중 소수(prime number) 다루는 문제가 많았다. 교과서에서는 소수 2,3을 list에 넣고 자신보다 작은 소수에게 나누어 떨어지지 않으면 소수라는 개념으로 반복문의 계산횟수를 줄였다. 백준 문제풀이에서는 딱히 사용할 일이 없었다. 그저 주어진 값이 소수인지만 중요해서 2부터 자신의 제곱근보다 작은 수까지 나머지 값이 0이 아닌지 반복해서 찾도록 코드를 구성했다.
  • sys.stdin.readline()함수를 이용해 python의 여러 줄의 input값을 이용하는데 어려움이 많았다. 특히 표본의 갯수 N을 두번째 줄에 넣는 문제는 정말 힘들었다. 밑 코드를 이용해 두 줄만 읽어내고 첫 줄에서 두개, 두번째 줄에서 표본 갯수에 관한 값을 찾아냈다.

import sys data = [] for i in range(2): data.append(list(map(int,sys.stdin.readline().split()))) N = data[1][0] X, Y = data[0][0], data[0][1]

  • 골드바흐의 추측(짝수는 소수의 합으로 되어있다?)문제에서 발상을 잘못했다. 각 수의 모든 구성을 구한 뒤 두 값의 차를 이용해 정렬하려고 생각했는데 너무 복잡했다. 그냥 반으로 쪼개고 1씩 하나는 빼고, 나머지는 더하면서 소수 list에 있는지 탐색하는게 훨씬 좋았다.
  • 낮에 전진, 밤에 후진하는 달팽이 문제는 결국 낮에 전진을해야 도착한다는 사실을 너무 늦게 알았다. 최종 거리에서 낮의 이동거리만큼 빼고 하루 전진거리로 나누니 편했다. 문제풀이를 다양한 방식으로 생각하는게 중요해보인다.
  • 역순으로 배열하는 것도 배웠다. 기억하자.

inner = list(str(x)) r_inner = inner[::-1]

  • 새로 만든 list가 말썽일땐 len(list())를 안다면 [None]*N으로 만들자. null이 말썽인 경우가 힘들었다.
  1. 새로 배운 내용
  • 반복문과 조건문을 이용한 소수(prime number)찾기.
  • 참고할 만한 레퍼런스들

  • 자료구조와 함께 배우는 알고리즘 입문 파이썬편(BohYoh Shibata 지음, 강민 옮김, 이지스 퍼블리싱)
  • 특이사항

  • CSAPP를 손도 못대고 있다. 사실 백준 문제풀기도 버거운건 사실이다.
  • 30분 이상 안되면 답을 보고 공부하는 습관을 들였더니 진도가 조금 빨라졌다.
  • 내일은 시험 답안 제출 연습이 있다.
  • 회고

  • 열심히 했다. 후회없다.
  • TO-DO-LIST
  1. 시험 답안 제출 연습
  2. 1주차 알고리즘 백준 문제 풀기
  3. 하루의 마무리를 개발일지로 하기