라벨이 Python coding인 게시물 표시

파이썬 자료구조 :: 그리디 알고리즘 (Greedy)

이미지
  그리디(Greedy) 알고리즘 탐욕법이라고 하며, 현재 상황에서 지금 당장 좋은 것만 고르는 알고리즘 뒷 날, 미래, 큰그림은 생각안하고 현재 지금 now 눈앞의 것 중에서 젤 좋아보이는 걸 고르는 것이다. (설명 및 문제는 '이것이 코딩테스트다' 책 참고함) 루트 노드부터 시작하여 거쳐 가는 노드 값의 합을 최대로 만들고 싶습니다.   Q. 최적의 해는 무엇인가요? 애초에 노드의 수가 별로 없어서 눈으로 봐도 최적의 해를 알 수 있습니다. 5 > 7 > 9 이 순서로 이동하게 되면 노드 값의 합이 21로 가장 큰 경우의 수가 되는 것을 알 수 있습니다.     Q. 단순히 매 상황에서 가장 큰 값만 고른다면 어떻게 될까요? 해당 경우에는 총 합 19 임을 알 수 있으며, 최적의 합인 21보다 낮은 값입니다. 즉, 그리디 알고리즘은 이처럼 단순히 매상황에서 가장 큰 값만 고르는 방식임을 알 수 있습니다.   일반적인 상황에서 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많습니다. 하지만 코딩 테스트에서의 대부분의 그리디 문제는 탐욕 법으로 얻은 해가 최적의 해가 되는 상황에서, 이를 추론할 수 있어야 풀리도록 출제됩니다.   [문제] 큰 수의 법칙  큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때, 주어진 수들을 m번 더하여 가장 큰 수를 만드는 법칙이다. 이 때, 배열의 특정한 인덱스에 해당하는 수가 연속해서 k번을 초과하여 더해질 수는 없다. 예를 들어, m이 8, k가 3이고, 배열 arr가 [2, 4, 5, 4, 6]이라고 할 때, 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5로, 46이 된다. 이 때, 다른 인덱스에 있는 값이 같은 경우에도 이는 서로 다른 것으로 간주한다. 따라서 arr가 [3, 4, 3, 4, 3]일 때, 두번째 4와 네번째 4는 서로 다른 것이므로 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4가...

파이썬 : 입력 값 처리

이미지
  파이썬 문제에 따라서, 입력값 받는걸 유연하게 써야한다.  1.  strip() 제거를 안하면, 입력값 + 엔터까지 다 포함된다.  ex) 입력값이 12345 일때  strip()을 안쓰고, list로 형변환하면 출력값은 [1, 2, 3, 4, 5, '\n']로 엔터까지 포함됨 그래서, 엔터를 포함 안시킬려면, 입력값을 받고, strip()으로 공백 제거해야한다.  strip()  #1. strip 안씀 l = list(map(str, sys.stdin.readline())) #2. strip() 씀 l = list(map(str, sys.stdin.readline().strip())) strip()은 입력값의 양쪽/왼쪽/오른쪽 공백을 제거하는 역할을 한다.  strip()은 양쪽 lstrip()은 왼쪽만 공백 제거  rstrip()은 오른쪽만 공백 제거  2.  입력을 여러 줄을 받을때 여러 줄을 시간초과 안나게 받을려면, 입력받은 줄 만큼 for문을 돌려야한다.  import sys input = sys.stdin.readline T = int(input()) for i in range(T): a,b = map(int, input().split()) print(a+b) 상황에 따라, 변수 개수랑 자료형은 달라짐  참고 블로그 

파이썬 - 시간 라이브러리 (datetime) 정리

이미지
  Python - 시간 라이브러리 (datetime)  1. 라이브러리  from datetime import datetime  import datetime 으로하면, 메서드를 사용할때  datetime.datetime.now() 이렇게 써야하는 불편함이 있기에, from datetime 모부터 쓸것  2. 함수 / 메서드 종류  a = datetime.now() a = datetime.today() 이렇게 선언했다고 했을때 아래 메서드를 이렇게 표현할 수 있다.  메서드명 출력 예시 설명 a.now() a.today() 2024-02-28 08:57:41.221849 현재 날짜와 시간을 출력 * 여러값이 같이 출력되므로 함수() 형식 a.year 2024 현재 연도를 출력 a.month 2 현재 월을 출력 a.day 28 현재 일을 출력 a.weekday() 2 요일을 출력 ( 0이 월요일) a.isoweekday() 3 ISO 규격에 따른 요일을 출력 (1이 월요일) a.date() 2024-02-28 날짜를 출력 *함수() a.time() 08:57:41.221849 시간을 출력 *함수() a.hour 8 현재 시간의 시를 출력 a.minute 57 현재 시간의 분을 출력 a.second 41 현재 시간의 초를 출력 3. now()와 today() 차이점 datetime.now(), datetime.today() 둘다 정말 똑.같.은 값을 리턴한다.  하나의 차이점은 now()는 매개변수로 국가별 타임시간대를 출력할 수 있다는 것이다.  기본값은 today와 동일하게 현재 있는 지역의 시간대, 날짜를 리턴함 * datetime 모듈의 메서드 및 함수 주의할 점  1) 괄호  여러 함수, 메서드들이 있다. 이 중에서 어떤것이 괄호를 입력하는 건지 헷갈렸다.  now(), today(), date(), time(), w...

프로그래머스 파이썬 기초 트레이닝 :: 정수를 나선형으로 배치하기 (*)

이미지
                문제 설명  프로그래머스 URL https://school.programmers.co.kr/learn/courses/30/lessons/181832 프로그래머스 코딩 카테고리  코딩 기초 트레이닝 Day 25 - 정수를 나선형으로 배치하기  Lv.0 문제 내용  양의 정수 n이 매개변수로 주어집니다. n × n 배열에 1부터 n2 까지 정수를 인덱스 [0][0]부터 시계방향 나선형으로 배치한 이차원 배열을 return 하는 solution 함수를 작성해 주세요. 넘나 어려운 문제다..  ----------------------------------- 나선형으로 도는거기 때문에, 시계방향으로 돈다.  방향은 R  →   D  →   L  →  U 이렇게 고정이 되어있다.  4가지 경우에 따른 방향 설정 dir = R(1) → D(2) → L(3) → U(4) def solution(n): answer = [[0]*n for i in range(n)] x, y = 0, 0 dir = 'r' #dir로 방향조정 : r, d, l, u if n == 1: return [[1]] for i in range(1, n*n+1): answer[x][y] = i if dir == 'r': y += 1 if y == n-1 or answer[x][y+1] != 0: dir = 'd' elif dir == 'd': x += 1 if x == n-1 or answer[x+1][y] != 0: ...

이 블로그의 인기 게시물

KT 에이블스쿨 : 6-7차 미니프로젝트 - 제안서 기반 솔류션 기획 및 설계

KT 에이블스쿨 : 핀테크 아이디어 공모전

쿠팡 제품