싱글톤 패턴 이 글은 점프 투 자바 를 정리하여 작성하였습니다. 싱글톤 패턴은 단 하나의 객체만을 생성하게 강제하는 디자인 패턴 입니다. 즉, 클래스를 통해 생성할 수 있는 객체는 유일하도록 만드는 것이죠. static 개념을 이해한다면 싱글톤을 이해하는 데 도움이 됩니다. 정적(Static) 변수와 메서드 변수/메소드 앞에 static 키워드를 붙여서 사용합니다. static 변수 항상 값이 변하지 않는 경우, static 키워드로 정적 변수로 사용하면 메모리 할당을 한번만 하게 되어 메모리 사용에 이점을 얻을 수 있습니다. 아예 값을 상수로 사용하기 위해 final 를 붙여 값을 변경할 수 없도록 할 수도 있습니다. 클래스 내의 변수를 static 으로 설정하면 같은 곳의 메모리 주소만을 바라보는 클..
추상클래스 & 인터페이스 참고 블로그 를 바탕으로 작성하였습니다. 메서드는 선언부와 구현부로 구성되어있습니다. 선언부만 작성하고 구현부는 작성하지 않은 메서드를 추상메서드 라고 합니다. 추상클래스와 인터페이스는 모두 추상메서드를 포함하며 상속을 위한 클래스이기 때문에 객체를 생성할 수 없습니다. 즉 상속받은 클래스에서 선언된 메서드를 구현하게 됩니다. 추상클래스 (abstract class) 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스로 미완성 설계도 라고 할 수 있습니다. 구현부를 지닌 일반 메서드 또는 멤버변수를 가질 수 있고, 클래스 구현부 내부에 추상메서드가 하나 이상 포함됩니다. abstract 키워드로 정의해서 사용하고, 상속을 통해 자식클래스에서 exten..
동기식/비동기식 프로그램 동기식 프로그램 어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다린 후 다음 작업을 수행하도록 구현된 프로그램입니다. 데이터를 주고받는 '순서'가 중요할 때 사용됩니다. 한 작업에 대한 시간이 길어질 경우, 전체 응답이 지연될 수 있습니다. 작업이 끝날 때 따로 이벤트를 감지하고 처리하는 과정에 소요되는 시간이 없습니다. 비동기식 프로그램 어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다리지 않고(작업을 위임하고), 다음 작업을 수행하도록 구현된 프로그램입니다. 요청했던 작업이 끝나면 결과를 받고, 그에 따른 추가 작업이 있다면 수행합니다. 요청 순서에 상관없이, 동시에 다수의 작업을 처리할 수 있습니다. 작업이 끝날 때 따로 이벤트를 감지하고 결과를 받아 그에 따른 ..
Process & Thread Program : 특정 작업을 위해 실행할 수 있는 파일 Process : 연속적으로 실행되고 있는 프로그램 컴퓨터 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체)입니다. 운영체제로부터 시스템 자원을 할당받는 작업의 단위이기도 합니다. 할당받는 시스템자원 : CPU, Code/Data/Stack/Heap 구조로 되어있는 독립된 메모리영역 각 프로세스는 별도의 주소 공간에서 실행되며, 서로 다른 프로세스의 데이터에 접근할 수 없습니다. 서로 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 합니다. Ex) 파이프, 파일, 소켓 등을 이용한 통신 방법이 있습니다. Thread : 프로세..
TAP(Task based Asynchronous Programming) 마이크로소프트 Docs 문서 를 바탕으로 내용 정리하였습니다. 동기식 프로그래밍 vs 비동기식 프로그래밍 코드는 일련의 명령문으로 이루어집니다. 다음 명령문이 시작되기 전에 각 명령문이 완료되는 구조입니다. 동기식 프로그래밍은 스레드에서 작업을 실행하는 동안 다른 작업을 수행하지 못하도록 차단합니다. 마치 어떤 데이터를 다운받는 동안 그 데이터를 다운받는 것을 지켜보며 어플리케이션이 멈춰있는 것처럼 보이는 것이죠. 비동기식 프로그래밍은 외부 리소스 할당과 작업 완료 시점에 따라 복잡한 순서로 코드를 사용하도록 설정합니다. 어떤 데이터를 다운받는 동안에도 어플리케이션이 다른 동작을 하도록 멈추지 않는 것이죠. 위의 예시처럼, 클라이언..
2021.05.17 공유기설치 Solution 가장 인접한 두 공유기 사이의 최대거리를 x라고 하겠습니다. x의 최소값은 두 집이 인접할 때의 거리인 1이고, 최대값은 가장 오른쪽집 - 가장 왼쪽집이 됩니다. (1 = C: return True else: return False def solution(N, C, home): ret = None home.sort() dist = [] for i in range(N): for j in range(i+1, N): if home[j]-home[i] not in dist: dist.append(home[j]-home[i]) dist.sort() # Binary Search start = 0 end = len(dist) - 1 if CanBuild(N, C, hom..
2021.05.17 카드정렬하기 Solution 계속해서 두개씩 합치는 작업을 해야하고, 합쳐진 묶음은 하나의 묶음이 됩니다. 합치는 작업의 횟수는 결국 N-1번이고, N-1동안 최소로 합치는 작업을 하기 위해서는 계속해서 제일 작은 두 묶음을 합쳐야합니다. 이를 위해서 Heap 자료구조를 사용해서 가장 작은 값 두개를 pop 해서 합한 값을 push 하도록 구현하였습니다. import heapq N = int(input()) myHeap = [] result = 0 for _ in range(N): heapq.heappush(myHeap, int(input())) while len(myHeap) > 1: num1 = heapq.heappop(myHeap) num2 = heapq.heappop(myHea..
2021.05.10 실패율 Solution index는 스테이지-1로 되도록 리스트를 사용. 스테이지에 도달했던사람, 클리어하지 못한스테이지 인원 파악 스테이지에 도달했지만 아직 클리어 하지 못한 사람이 속한 스테이지를 notClear에 기록. 현재 속한 스테이지 전까지는 도달 후 클리어한 경우이므로 visited에 기록. 인원으로 튜플리스트 만들기. 튜플은 (실패율, 스테이지)로 이루어짐. 튜플리스트 sorting (실패율은 내림차순, 스테이지는 오름차순) sorting된 튜플리스트에서 스테이지만으로 리스트 구성 def solution(N, stages): answer = [] visited = [0 for _ in range(N)] notClear = [0 for _ in range(N)] for n..
2021.05.10 안테나 Solution 이 문제는 정답이 중간값이라는 것을 파악하는 게 핵심이다. 이외의 다른 곳에 설치하면 이동하는 쪽 반대에서 거리가 더 발생하게 된다. 정렬한 뒤 중간값을 출력해주면 된다. 홀수개일 경우 중간값(index : N//2)에 안테나를 설치하면 최소값이다. 짝수개일 경우 중간값이 두개이고 두개가 정확히 동일하다. 따라서 그 중 작은 값을 선택하면 된다. N = int(input()) homes = list(map(int, input().split())) homes.sort() if N % 2 == 0: print(homes[N//2 - 1]) else: print(homes[N//2])
2021.05.10 국영수 Solution 조건대로 lambda를 이용해 정렬 import sys sys.stdin = open('input.txt', 'r') N = int(input()) students = [] for n in range(N): tmp = list(map(str, input().split())) for i in range(3): tmp[i+1] = int(tmp[i+1]) students.append(tmp) students.sort(key=lambda x:(-x[1], x[2], -x[3], x[0])) for n in range(N): print(students[n][0])
Comment