전체 글 74

[객체지향의 사실과 오해] 2. 이상한 나라의 엘리스

아기들을 포함한 세상 사람들은 세상을 뚜렷한 경계를 가진 객체들의 집합으로 바라본다. 객체지향과 인지 능력 객체란 인간이 분명하게 인지하고 구별할수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. 하지만 실세계와 소프트웨어 세계의 객체의 유사성은 여기까지이다. 실세계의 객체는 사람의 도움없이 스스로 무언가를 할 수 없다. 소프트웨어 세계의 객체는 스스로 무언가를 할수 있다. 즉, 자율적이다. 객체, 그리고 이상한 나라 이상한 나라의 엘리스 이야기를 생각하며 객체란 무엇인지 알아보자 엘리스는 음료수를 마시면 키를 변경할수 있다. -> 엘리스는 키를 가지고있으며 상태를 변경가능 음료수를 마시면 키가 변경한다 -> 엘리스는 음료수를 마시는 행동을 했고 행동을 통해서 상태가 변경 음료수 마시기전 키가 1..

study with book 2021.07.17

백준 14469(JAVA)

문제 소가 입장하는 시간을 최소로 하라! 풀이 소가 도착하는 시간을 기준으로 정렬 -> 같으면 소가 대기하는 시간을 기준으로 정렬을 한다. 그다음 걸리는 시간을 계산하면 소가 대기하는 시간을 최소, 즉 버리는 시간을 최소로 할수있다. 코드 package baekjoon.그리디; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; class Cow{ int arrive; int time; public Cow(int arrive, int time){ this.arrive = arrive; this.time = time; } public int getArrive..

algorithm 2021.07.17

[OS] 운영체제 Process Management

이제 OS의 기능별로 하나씩 정리할 건데, 먼저 OS가 어떻게 프로세스를 관리하는지, 프로세스란 뭔지에 대해서부터 알아보자. (OS는 시스템의 자원들을 효율적으로 관리해서 성능 향상을 높이는데 목적이 있는 소프트웨어이다.) Job vs Process Job / Program 실행 할 프로그램 + 데이터이다. 실행할 이므로 실행 요청전의 상태이다. Process 실행을 위해 커널에 등록된 Job을 의미한다. 커널에 등록된다는 의미는 OS에의해 관리를 받는 다는 것이고, 커널에 의해 관리를 받으면 효율적으로 관리를 받기에 시스템 성능 향상을 이룰수 있다. Job과 Process 실행 요청전 디스크내에 존재하는 Job을 볼수있고 오른쪽에는 시스템에 의해 관리되는, 즉 커널에 의해 관리되는 Process를 볼수..

computer science 2021.07.17

백준 11000(JAVA)

문제 수강신청의 마스터 김종혜 선생님에게 새로운 과제가 주어졌다. 김종혜 선생님한테는 Si에 시작해서 Ti에 끝나는 N개의 수업이 주어지는데, 최소의 강의실을 사용해서 모든 수업을 가능하게 해야 한다. 참고로, 수업이 끝난 직후에 다음 수업을 시작할 수 있다. (즉, Ti ≤ Sj 일 경우 i 수업과 j 수업은 같이 들을 수 있다.) 수강신청 대충한 게 찔리면, 선생님을 도와드리자! 즉, 최소의 강의실을 배정할수 있도록 하라는 문제이다. 입력은 강의실의 개수가 입력되고 그다음부터 각 강의의 시작시간과 끝시간이 입력된다. 풀이 입력되는 강의실의 개수가 최대 200,000개이다. 완전탐색으로는 시간초과가 날게 뻔하다. 일단 시작시간을 기준으로 오름차순 정렬해야한다. 시작시간이 같다면 끝나는 시간을 기준으로 ..

algorithm 2021.07.16

[객체지향의 사실과 오해] 1. 협력하는 공동체

실세계와 객체지향 세계 객체지향에 대해서 배울때, (JAVA를 처음 배울때) 모든 사물(유형이던 무형이던)을 하나의 객체로 보는 실세계를 소프트웨어의 세계와 동일하다는 관점에서 객체지향을 배웠다. 그러나 실세계와 객체지향 세계에는 유사성이 매우 적고 거리가 멀다. 객체지향의 목적은 새로운 세계를 창조하는것!!! (실세계를 모방하는 것이 아니다.) 단순히 객체지향의 기반을 이루는 철학적 개념을 설명하는데 '실세계의 모방'이라는 문장이 적합할 뿐이다. 단순히 이 이유때문에 많은 곳에서 객체지향을 설명할 때, 실세계에 빗대며 설명한다. 그래도 실세계에 빗대어 설명하는 것만큼 이해가 쉬운게 없음! 협력하는 사람들(in 실세계) 협력, 역할, 책임 실세계에서 모든 것은 협력, 역할, 책임으로 이루어..

study with book 2021.07.16

백준 9009(JAVA)

문제 입력되는 수에 대해서 최소의 개수의 피보나치의 합이 어떠한 수가 되는 피보나치 수들을 구하여라 풀이 문제를 보자마자 든 생각은 일단 dp테이블에 피보나치의 결과를 메모이제이션 해야겠단 생각이 들었다. 피보나치의 합을 구하는데 피보나치의 개수가 최소의 개수가 되야하므로 입력되는 정수 num에 가장 근접한(같거나 작은) 피보나치의 결과를 num에서 빼나가면 되겠단 생각이들었다. 어떠한 수는 피보나치 하나의 값이거나 여러개의 합으로 구성될수 있으므로 어떠한 수가 입력되던간에 정답은 나온다. 입력되는 수에 가장 근접한 수를 빼나가면 최소의 개수의 피보나치일것이다. 즉, 그리디알고리즘이다. 코드 package baekjoon.그리디; import java.io.*; import java.util.ArrayL..

algorithm 2021.07.14

백준 9081(JAVA)

문제 사전순 정렬시, 바로 다음에 올 문자열을 구해라 바로 다음 순열, next permutation을 구하는 문제이다. 풀이 이문제를 보자마자 떠오른 생각은 백트래킹으로 순열을 구한다음 중복을 제거하며 List에 단어를 넣고 List에서 원본 문자열을 찾은뒤 바로 다음 문자열을 출력하자 라는 풀이가 떠오름 거슬렸던건 입력되는 문자열의 길이가 99가 최대라는 것임. 무조건 시간초과가 날게 뻔함요 ㅠ.ㅠ 그래서 한참을 헤매다가 next permutation을 구하는 로직이 존재하다는걸 알게되었고 적용을 하였더니 맞았다. next permutation in JAVA 뒤에서 부터 증가하지않는 첫번째 위치를 찾는다. 또 다시 뒤에서부터 1에서 찾은 위치의 원소보다 처음으로 큰 위치를 찾는다. 두 위치의 값을 서..

algorithm 2021.07.14