전체 글
-
[자바] 객체지향적인 설계에 대한 정리자바 2022. 10. 27. 22:41
Object 책을 읽고 나름대로의 정리입니다! 패러다임 - 하나의 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계 그렇다면, 프로그래밍 패러다임은 무엇일까? 프로그래밍 패러다임은 특정 시대의 어느 성숙한 개발자 공동체에 의해 수용된 프로그래밍 방법과 문제, 해결 방법, 프로그래밍 스타일을 의미한다 프로그래밍 패러다임은 무엇을 위한 것 일까? 동일한 규칙과 방법을 공유하여, 불필요한 의견 충돌을 방지하기 위함이다. 자바는 이러한 프로그래밍 패러다임중 "객체지향 패러다임 "을 기반으로 하는 언어이다. 객체지향 설계 객체지향 설계는 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다. 결국, 객체지향 설계의 핵심은 책임이며, 초점을 객체에 맞춰야..
-
[CS] - Computer ArchitectureCS 2022. 10. 24. 15:50
캐시 메모리 이는, 속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다 예시 ) cpu 코어와 메모리 사이의 병목 현상 완화 cpu가 주 기억장치에서 저장된 데이터를 읽어올 때, 자주 사용하는 데이터를 캐시 메모리에 저장한 뒤, 다음에 이용할 때 주 기억장치가 아닌 캐시 메모리에서 먼저 가져오면서 속도를 향상시킨다. 속도라는 장점이 있지만, 용량이 적기도 하고 비용이 비싼 점이 있다. cpu 에는 일반적으로 3개의 캐시 메모리를 사용한다 L1 → L2 → L3 인데, 이들은 순차적으로 속도와 크기에 따라 분류한것인데, 일반적으로 L1 캐시부터 먼저 사용된다. ( L1에 가장 먼저 접근하고, 여기서 찾지 못하면 L2 캐시로 이동한다. ) L1 : CPU 내부에 존재..
-
[CS] Computer ArchitectureCS 2022. 10. 24. 15:43
cpu는 연산장치, 제어장치, 레지스터 3가지로 이뤄져 있다. 연산 장치 산술 & 논리 연산 수행 ( 산술 논리 연산 장치라고도 불린다. ) 레지스터로부터 연산에 필요한 데이터를 가져오고, 연산의 결과를 보낸다. 제어 장치 제어 장치는 명령어를 순서대로 실행할 수 있도록 제어하는 장치 주기억장치로 부터 프로그램 명령어를 꺼내 해독하고, 그 결과에 따라 명령어 실행에 필요한 제어 신호를 기억, 연산, 입출력 장치로 보낸다. 또한, 이들 장치가 보낸 신호를 받아 다음에 수행할 동작을 결정한다. 레지스터 레지스터는 메모리 계층구조의 최상위에 존재하는 고속 기억장치이다. 명령어 주소, 코드, 연산에 필요한 데이터, 연산 결과 등을 임시로 저장하는데, 즉, cpu의 데이터와 명령을 빠르게 허용, 저장 전달하는데 ..
-
[CS] - Computer ArchitectureCS 2022. 10. 24. 15:38
컴퓨터의 구성 컴퓨터의 구성 ( 하드 & 소프트 ) 하드 - 컴퓨터를 구성하는 기계적 장치 소프트 - 하드웨어 동작을 지시하고 제어하는 명령어 집합 하드웨어 중앙처리장치 (cpu) 기억장치: RAM, HDD RAM : 기억된 정보를 읽기, 다른 정보를 기억시킬 수 있는 메모리로서 주 기억장치다 HDD : hdd는 하드 디스크 드라이브로서 내부에 디스크를 여러개 두고 저장하는 용도로 쓴다 sdd는 반도체를 사용해 데이터를 저장하는 방식이다. 입출력 장치 : 마우스, 프린터 소프트웨어 시스템 소프트웨어 : 운영체제, 컴파일러 운영체제 : 사용자가 컴퓨터를 사용하기 위해 필요한것이다. ( 모든 프로그램들을 운체에서 관리하고 제어한다. ) 컴파일러 : 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언..
-
[알고리즘] 백준 1010 다리놓기알고리즘 2022. 10. 22. 13:13
1. 문제 https://www.acmicpc.net/problem/1010 2. 접근 1. 문제를 손으로 풀다보면 반복되는 연산 구조를 볼 수 있다. 2. 그 연산구조에서 2가지 방법을 볼 수 있는데, 일반적으로 수학적으로 푸는 방법, DP 로 푸는 방법이 있다. - 수학 nCm 의 방법을 쓰면 되는데, 우리가 쓰는 combination은 보통 리스트에서 사용을 한다. 하지만, 우리는 여기서 정수로 input을 받기에 combination이 아닌, nCm = m! // ((m-n)! * n!) 이 방법을 쓰면된다 두개의 정수 n,m을 map 함수로 받아서 적용하면 된다. 참고로 factorial은 math.factorial 도 되고, factorial 험수를 만들어도 된다 참고, def fact(n):..
-
[알고리즘] 이코테 - 1이 될 때까지 ( 2018 E 기업 알고리즘 대회 )알고리즘 2022. 10. 18. 00:58
1. 문제 2. 접근 - n이 k로 나눠지는지를 체크한다 - 나눠진다면 n값을 k로 나눈값으로 대체하고, 안나눠진다면 나눠 질 때 까지 -1 을 해준다 3. 풀이 내 코드 # 1이 될 때 까지 import sys input = sys.stdin.readline n, k = map(int, input().split()) count = 0 while n != 1: if n % k == 0: n //= k count += 1 else: n -= 1 count += 1 print(count) 1. 이코테 코드 n,k = map(int,input().split()) res = 0 while n >= k: while n % k != 0: n -= 1 res += 1 n //= k res += 1 while n > ..
-
[알고리즘] 이코테 - 큰 수의 법칙 - 2019 국가 교육기관 코테알고리즘 2022. 10. 17. 23:18
1. 문제 2. 접근 - 3 4 3 4 3의 예시에서 인덱스가 다르다면 숫자가 같더라도 다르게 본다는 점에 유의하기 - 받아온 리스트를 내림차순으로 받고 index = 0과 index = 1의 값이 같은지 체크 - 같다면 가장 큰값을 m번 곱해서 결과값에 넣기 - 다르다면 k만큼 큰값을 더하고 2번째 값을 한번만 더하고 다시 큰 값을 다시 k 만큼 더함을 반복한다 3. 풀이 내 풀이 # 큰 수의 법칙 import sys input = sys.stdin.readline n, m, k = map(int, input().split()) data = list(map(int, input().split())) data = sorted(data, reverse=True) count = 0 ans = 0 # 가장 큰수..
-
[알고리즘] 프로그래머스 - 배달알고리즘 2022. 10. 2. 15:40
1. 문제 2. 접근 1. 모든 노드에서 모든 노드로 가는 간선의 길이가 다 주워져있고, 모든 노드로 접근을 하기에 플로이드로 접근을 해보았다 2. a b 가는 통로가 하나가 아니라 두개가 되기에 나올 수 있는 간선의 길이 중 최단거리를 구한다 3. a == b 인 경우는 간선의 길이가 0임을 보인다 4. 시작이 1부터임을 알 수 있기에, graph[1]을 기준으로 갈 수 있는 노드들의 간선의 길이의 합이 k보다 작은게 있다면 count를 늘려준다 3. 풀이 # 양방향 , 1 ~ n, 1번에서 시작, k 시간 내, def solution(n, road, K): INF = int(1e9) graph = [[INF]*(n+1) for _ in range(n+1)] # a == b 이면 같은 노드이기 때문에 ..