[백준 #13335 파이썬] 트럭
2022. 12. 21. 11:15
Algorithm
n,w,l = map(int,input().split()) truck = list(map(int,input().split())) bridge = [0]*w cnt = 0 while bridge: cnt += 1 bridge.pop(0) if truck: if sum(bridge) + truck[0] > l: bridge.append(0) else: bridge.append(truck.pop(0)) print(cnt) 예전에 프로그래머스에서 풀어본 경험이 있어서 복습 겸 다시 풀어보게 되었다. 생각한 방법 1. 비어있는가? => 무조건 추가 2. 비어있지 않은가? 2-1 다리위에 새로운 걸 추가해도 되는가? yes : 추가한다. no : 패스 이 생각을 가지고 구현을 시작했다. 여기서 더 고려되어야 하는 ..

Garbage Collector
2022. 12. 20. 23:06
CS
GC가 필요한 이유 프로그램이 동적으로 할당했던 메모리 영역 중 필요 없게된 영역을 알아서 해제한다. 동적으로 할당한 메모리 영역 : heap 영역 필요 없게된 영역 : 어떤 변수도 가리키고 있지 않은 영역 이러한 메모리를 제대로 해제하지 않으면 Memory Leak(필요하지 않은 메모리를 점유하고 있는 현상) 이 발생하다. 자바에서는 이를 자동으로 관리해주어 메모리 누수를 방지한다. 장점 메모리 누수 방지 해제한 메모리에 접근 방지 해제한 메모리를 다시 해제하는 것을 방지 단점 GC 작업은 순수 오버헤드(어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 / 메모리 ) 작업이다. 즉, 메모리 해제 대상을 검사하고 해제하는 것은 프로그램이 자신의 일을 하지 못하도록 방해하는 요소이다. 또한 GC의 메모리..
[백준 #16234 파이썬] 인구 이동
2022. 12. 19. 11:39
Algorithm
생각한 방법 전형적인 그래프 탐색이나 bfs 문제라고 생각했다. 바이러스 처럼 퍼지는 유형의 경우 dfs로 활용해서 푸는 것은 뎁스가 너무 깊어지기 때문에 이부분은 미리 배제하고 시작했다. 전형적인 bfs 풀이 방식으로 계획해야겠다고 생각한 이후 더 생각해야 하는 부분을 고려했다. 1. 전체 탐색 그래프에 있는 모든 값과 그를 중심으로 한 주변 값의 차이를 조사해야 한다. 어디에서 인구 이동이 일어날 지는 예측할 수 없으므로 모든 값에 대한 bfs 탐색이 필요하다. 2. 전체 탐색의 반복 인구 이동은 2일 이상 소요될 수 있다. 인구 이동이 일어난 이후 인구 이동이 일어난 지역과 일어나지 않았던 지역끼리 다시 비교해보면 새로운 인구 이동의 가능성이 있을 수 있다. 그러므로 bfs는 반복되어야 한다. 3...

JVM
2022. 11. 24. 15:52
Java
JVM이란 java virtual machine java는 OS에 종속적이지 않습니다. 그래서 os위에서 java를 실행하기 위해선 무언가가 필요한데, 자바를 인식하고 실행하게 해주는 가상 컴퓨터가 바로 JVM입니다. java 소스코드(.java 파일)는 CPU가 인식할 수 없어 기계어로 컴파일이 필요합니다. 여기서 java compiler를 통해서 Java bytecode(.class파일)로 변환을 먼저 합니다. java compiler는 jdk를 설치하면 bin에 존재하는 javac.exe를 의미합니다. 그래서 javac 명령어를 통해 .class파일로 컴파일이 가능하다. javac 파일명.java 하지만 bytecode도 아직 기계어는 아닙니다. 그래서 이때 JVM이 OS가 bytecode를 이해할..

TCP / IP 4계층에 대해 알아보기
2022. 11. 23. 20:18
CS
TCP/IP는 개발 공부를 하면 정말 정말 많이 나오는 소재중 하나입니다! 근데 볼 때마다 정말 새롭고 생소하고 어렵습니다 ㅎㅎ 그래서 이참에 조금 더 자세히 내용을 정리해볼까 합니다! 계층 구조 TCP/IP 계층은 네 계층으로 이루어져 있으며 OSI 7계층과 많이 비교되곤 합니다. TCP/IP는 어플리케이션 계층(L4, 응용 계층), 전송 계층(L3), 인터넷 계층(L2), 링크 계층(L1)으로 이루어져 있습니다. 이 계층들은 특정 계층이 변경되었을 떄 다른 계층이 영향을 받지 않도록 설계되어 있습니다. 어플리케이션 계층 어플리케이션 계층은 FTP,HTTP,SMTP,DNS,SSH 등 응용 프로그램이 사용되는 프로토콜 계층입니다. 즉, 웹서비스, 이메일 등 응용 프로그램 간에 데이터를 주고받으며 사용자에..

[빅데이터] 도시 물류 혁신 계획
2022. 11. 22. 15:57
프로젝트 일기
SOLID 객체 지향 설계
2022. 10. 13. 12:39
Java
객체(클래스)에게 데이터를 요구하지 말고 작업(기능)을 요청하라 SOLID란? SRP (단일 책임 원칙), OCP (개방 폐쇄 원칙), LSP (리스코프 치환 원칙), ISP (인터페이스 분리 원칙), DIP (의존 역전 원칙) 이고 이 다섯가지 개념을 의미한다. 단일 책임 원칙 (Single Responsibility Principle) 하나의 클래스는 하나의 책임만 가져야 한다. 클래스는 기능이나 존재 자체에 목적이 있다. 클래스는 그 책임을 완전히 캡슐화해야 한다. 가장 중요한 부분은 유지보수성이다. 수정이 필요한 경우 수정되는 이유는 단 하나 때문이어야 한다. 소프트웨어는 트랜드나 문제, 클라이언트 요구사항 등 다양한 요인이 있을 수 있어 그럴 경우마다 변화에 대응을 해야 한다. 그래서 어떤 변경..

[백준 #2178 파이썬] 미로 탐색
2022. 10. 8. 00:50
Algorithm
2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net DFS로는 시간초과가 나는 이유 : 전체 탐색 문제를 보면 처음에는 이건 무조건 그래프 탐색이다 라는 감이 됩니다. 다만, dfs로 풀지, bfs로 풀 지 고민을 하게 됩니다. 체감상 bfs로 푸는 게 조금 더 쉬운 느낌이 드는데, 사실 명확한 이유가 있습니다. dfs 방식으로 푼다면, 모든 노드를 탐색해야 하는 결과가 나타날 수 있습니다. 그러한 방식으로 탐색을 하면 결과를 확인할 수 는 있지만, 최단거리임을 확인하기 위해서 더 많은 연산이 필요합니다. 따라서 이 경우에는 bfs를 통해 가장..