일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- GC
- 면접복기
- github
- 브루트포스
- 이진탐색
- 문제풀이
- deque
- g1gc
- 배열 돌리기1
- 회고
- 몬티홀
- 구현
- 프로세스
- Greedy
- 백준
- BFS
- 분할정복
- 적정 스레드
- DP
- Stack
- 빌더패턴
- springboot
- 그래프 탐색
- 정수론
- Markdown
- GarbageCollector
- 마크다운
- 그래프탐색
- Python
- 그리디
- Today
- Total
목록프로그래밍 (40)
FeelingXD
❓ Problem 🤔 How 기존 이동가능 한 통로(0) 은 항상 0이다 반환해야 할 map 형태는 벽을 깬이후 이동할수있는 거리의 최대값 이다. 각 위치에서 최대 이동거리를 기록한다. 최적화 벽을 깬이후 해당 위치에서 상 하 좌 우 를 탐색하며 갈수있는거리를 구하는건 굉장히 비효율적이다. 이를 위해 미리 캐싱해두는 법이 필요하다. 이제 이를 이동 가능한 통로를 다음과 같이 그룹으로 묶어 줄 수 있다. 위의 그림에서는 연두색이 5칸, 분홍색이 4칸 주황색이 1칸 인 그룹으로 구분 된다. 이를 그룹별로 나누고 그룹의 크기가 얼마나 되는지 표시한 자료구조가 필요하다. 깰벽을 기준으로 상하 좌우 탐색을 하고 (기본값+1 : 깨진벽은 통로가 될수 있으므로) 과 상 하 좌 우를 탐색해서 만날수 있는 통로의 그룹을..
❓ Problem 🤔 How ❗ Solve # 나이트 투어 import sys input =sys.stdin.readline ROWS=COLOUMS=6 visited=[[False]*6 for _ in range(6)] moves=[[2,1],[-2,1],[1,2],[1,-2],[-1,2],[-1,-2],[2,-1],[-2,-1]] # 나이트의 이동 def board_to_pos(word): # 체스보드 위치를 좌표로 변환 x=ord(word[0])-ord('A') y=ROWS-int(word[1]) return (y,x) def validate_move(s_pos,t_pos): # 현재위치와 다음위치 비교 global visited cy,cx=s_pos for dy,dx in moves: ny,nx=c..
이 글은 @staticmethod, @classmethod, @property 등 다양하게 사용되는 Python의 데코레이터에 대해서 다룹니다. 해당글은 깃허브 에서도 볼 수 있습니다. 데코레이터란 ? 👀 파이썬의 데코레이터는 함수나 메서드 에 적용되어, 사용하려는 함수, 메서드의 기능을 확장하거나 변경하는 역할을합니다. 데코레이터(Decorator) 말 그대로 꾸며주는 기능을 합니다. 기본적으로 데코레이터는 함수를 인자로 받고 추가기능(데코레이터) 를 추가한 고차함수를 반환 합니다. 데코레이터 맛보기 👅 - 예시 데코레이터는 언제 사용해야할까 ? 함수, 혹은 메서드를 사용 하는데 공통적으로 사용되는 다른 기능(함수)이 있을때 사용하는게 좋다. 설명이 모호한 관계로 예시와 함께 알아보자! 🤔 다음 함수를..
OOP (Object-Orient-Programming) 이 글에서는 프로그래밍 패러다임 중 하나인 OOP(객체지향개발)에 대해 서술한 글 입니다. 1. OOP 이전에는 .. 👀 초기의 컴퓨터 프로그래밍은 단순 명령어 집합 혹은 일렬을 과정에따른 순서대로 처리하는 절차 지향 프로그래밍 방식 이였다. 과거에는 컴퓨터 성능이 크게 좋지않고 그에따라 구동가능한 프로그램의 크기 또한 제한적이기에 절차 지향 프로그래밍 으로 충분히 문제를 해결 할 수 있었다. 2. 절차지향의 문제와 새로운 패러다임 OOP 인류의 발전으로 컴퓨터 성능의 발전과 그에따른 프로그램의 요구사항이 많아짐에 따라 기존의 절차 지향 프로그래밍 의 문제점들이 드러나기 시작했다. 2-1. 절차지향의 문제점들 유지보수 , 디버깅의 어려움 : 절차지..
Python GC는 어떻게 동작하는가 파이썬 GC 에대한 글입니다. 파이썬 GC는 어떻게 동작 하는지에 대해 서술합니다. Python 의 GC 파이썬에서는 기본적으로 garbage_collection 이외에도 reference counting을 통해 할당된 메모리를 관리한다. 기본적으로 refernce counting은 각객체의 참조 횟수가 0이면 도달할수 없는객체로 판단하여 collecting을 한다. 하지만 참조횟수가 0은 아니지만 도달할수없는 경우의 문제도 있다. 이를 해결하기위해 Python 에서는 추가적으로 cyclic garbage collection 을 통한 가비지 컬렉션을 추가적으로 사용한다. 레퍼런스 카운팅 파이썬에서 다른객체가 객체를 참조할때 참조하는 객체의 레퍼런스 카운트를 증가시킵니..
Java 9 이후로 GC(Garbage Collector) 의 표준이 된 G1GC에 대해 작성하는 글 입니다. G1GC: Garbage 1(first) Garbage Collector G1GC 는 이름에서 알수 있듯 가바지 수집이 최우선이 되는 가비지 컬렉터입니다. Java9 부터 Java 진영의 표준 GC 모델이 되었으며 다읍과 같은 특징이 있습니다. 쓰레기로 가득찬 heap 영역을 집중적으로 수집 큰메모리를 가진 멀티 프로세서 시스템에 사용하기 위해 개발된 GC이다. G1GC는 일시정지시간(STW)을 최소하 하면서, 가능한 처리량도 확보하는것이 G1GC의 목표이다. G1 은 통계를 계산해가면서 GC 작업량을 조절한다. 다음 상황일때 G1GC를 사용하는데 도움이됩니다. HEAP의 50% 이상 라이브 데..
❓ Problem 🤔 How N = 스크린에 대한 몰로코의 입찰가 와 , 현재 최고 입찰가 의 갯수가 주어진다. K = 입찰받아야하는 최소 스크린 수 N 개의 줄에 몰로코의 입찰가 , 현재 최고 입찰가가 순으로 주어진다. diff_fee 를 기록한다. 해당 리스트는 입찰가 차이(현재 입찰 최고가-입찰가)를 모아서 보관 한다. diff_fee 를 정렬하면 입찰가 차이가 낮은순서로 정렬되고 diff_fee 의 K번째 원소(입찰가 차이의 K번째 원소)까지 구매할 수 있어야한다. 최소입찰 금액이 음수일 수 없으니 max(0, diff_fee[K-1]) 로 최소가격은 0으로 출력해 주어야 한다. ❗ Solve # 모바일 광고 입찰 import sys input =sys.stdin.readline def solut..
메서드, 함수를 사용 할때 매개변수 와 전달인자(Parameter and Argument) 혼용해서 사용합니다. 이들의 차이에 대해 작성합니다. 뭐가 다르지 ?.🤔 파이선 뿐만 아니라 자바의 메서드 에서도 간혹 위의 두개를 혼용해서 사용하는 경우가있는데 구분하는 것은 다음과 같습니다. 예제코드와 함께 알아봅시다. def my_function(name,age): # 파라미터 print(f'{name} 의 나이는 {age} 입니다.') my_function('김철수',20) # 아규먼트 위의 예제에서 my_function(name,age) 에서 name, age 부분을 Parameter(파라미터, 매개변수) 라고 부를수있다. 즉 위의 함수에서는 name, age 이 매개 '..
❓ Problem 🤔 How 슈퍼소수 는 소수로 이루어진 집합을 나열했을때 소수번째인 소수들을 '슈퍼 소수' 라고 표현한다 예를들어 소수가 f(n) = [2,3,5, .. .. ] 있을때 슈퍼소수는 f'(n)=[3,5 ...] 즉 슈퍼소수는 f(f(n)) 임을 알 수 있다. 소수집합을 아리스토 테네스체 알고리즘을 통해 얻고 그중 소수번째인 소수 친구들을 모아준다. 입력값에대한 소수를 반환한다. ❗ Solve # 슈퍼 소수 import sys input =sys.stdin.readline def aristo_stick(): global aristo aristo = [False,False] + [True]*(318137-1) for i in range(2,318137): if arist..
❓ Problem 🤔 How 설명 요약 크기가 같은 두 큐가 주어지고 각 큐의 원소의 총합이 같도록 각큐는 poll 과 append 를한다. 문제에는 언급되지 않았지만 원소의 총합이 같을때 각 큐의 크기가 같을 필요는 없다. '큐의 원소의 총합' 하도록하는 최소 횟수를 반환하여야한다. 큐의 크기가 되어야하는값을 설정해야한다. 각 큐의합이 같아야하므로 (큐1 과 큐2 의 원소의 총합)/2(큐의 갯수) 가 목표치(target) 이 된다. 큐1과 큐2 중 하나를 기준삼아 현재 원소의 총합과 target과 비교를통해 다음행동을 한다. 합이 target과 같은경우 : 이경우는 현재 까지 한 행동 횟수를 반환한다. 합이 target보다 작은경우 : 이경우 반대큐에서 값을 하나 가져온다. 합이 target보다 클경우..
❓ Problem 자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어지는 자두를 받아서 먹고는 한다. 자두를 잡을 때에는 자두가 허공에 있을 때 잡아야 하는데, 이는 자두가 말랑말랑하여 바닥에 떨어지면 못 먹을 정도로 뭉개지기 때문이다. 매 초마다, 두 개의 나무 중 하나의 나무에서 열매가 떨어지게 된다. 만약 열매가 떨어지는 순간, 자두가 그 나무의 아래에 서 있으면 자두는 그 열매를 받아먹을 수 있다. 두 개의 나무는 그다지 멀리 떨어져 있지 않기 때문에, 자두는 하나의 나무 아래에 서 있다가 다른 나무 아래로 빠르게(1초보다 훨씬 짧은 시간에) 움직일 수 있다. 하..
❓ Problem 🤔 How 답이될수 있는 경우 👀 1. 현재 보고있는채널(100) 에서부터시작해서 +/- 버튼으로만 목표 채널까지 이동하는 경우 2. 버튼을 사용해서 특정 채널로 변경한후애 +/- 버튼을 추가로 사용해 목표 채널까지 이동하는 경우 (2가지 : 위로가는 경우와 아래로가는 경우)접근방법 답이 될수있는경우 [1]번 으로 정답값을 초기화해준다. 그후 목표 채널로부터 위/ 아래로 값을 탐색해 고장난 버튼을 사용하지 않고 이동할수있는 최초의 수를 찾아서 원래 가고자한 목표채널과의 차이를 더해주고. 답이 최소값이 될경우 갱신한다. 현재 구하고자하는것은 버튼누르는 횟수이므로 처음 채널이동시 누르는 버튼횟수도 생각하여야한다. ex) 7751 채널로 이동시 버튼을 4번누른다. ❗ Solve # 리모컨 i..