전체 글

Android 및 취미 활동을 공유하는 블로그입니다!!
이야기/후기

2020 제 3회 정보처리기사 필기 - 후기

점수 (가채점) 1 과목 : 75, 2 과목 : 95, 3 과목 : 85, 4 과목: 95, 5 과목 : 65 이번 연도 3월에 진행한 1회 정보처리기사 필기시험에 신청해서 2주 정도 공부하다가 코로나 19로 인해 4월로 6월로 연달아 밀리다 보니 그 당시 포기하고 3회가 돼서야 보게 되었습니다. 전공자 이기도 하고 올해 3월에 1회 필기시험을 공부하려고 시나공 책을 구매해서 2주 정도 기간 동안 1 회독을 마친 상황 때문인지 공부의 큰 압박은 없었습니다. 1주일 전, 8월 15일부터 다시 준비했습니다. 공부방법은 주로 시나공 책의 기출문제와 1,2회 통합 기출문제를 풀어보았고, 수제비 NCS에서 더 많은 개념이 나온다는 소문을 들어 해당 카페에 가입하여 공부했습니다. 모의고사, Daliy 문제, 족보 ..

Android/Common

[Android] MVP 적용해보기 - View와 Presenter

MVP Architecture MVP는 Model과 View, Presenter로 나누는 패턴이다. MVC와 비교하여 View와 Model이 서로 존재를 몰라 의존성이 줄어든다. 이말은 쉽게 View와 Model 클래스를 변경, 수정할 수 있고 MVC에 비해 Model 클래스의 유닛 테스트를 쉽게 시도할 수 있다. Model Local DB, Remote DB, sharedPreference .. 등 데이터를 수정, 관리하는 Class Presenter 사용자의 액션을 받아 로직을 처리하고, Model에게 Data 변경을 요청하거나 UI 업데이트하는 로직을 처리하는 Class ViewContract : View and Presenter의 설계 사용자 액션을 Presetner에 떠넘기고, UI 업데이트하는..

Algorithm_Java

[수학] 백준 1676 - 팩토리얼 0의 개수

문제본문 문제 해석 입력으로 들어오는 N!의 결과 값에서 뒤에서 부터 0이 아닌 숫자가 나올때까지 0의 개수를 구하라 문제를 이해하는 데 시간이 필요했다. 결론적으로 말하면 N!의 결과 값이 301200라고 한다면 뒤에서 부터 0이 2번 나오고 그 다음으로 2가 나온다. 따라서 0이 아닌 숫자가 나올 때까지 0의 개수는 2라고 답할 수 있다. 문제에서 주어지는 N의 범위는 0

Algorithm_Java

[알고리즘] 백준 2981 - 검문

문제본문 문제 해석 어떠한 수 V(i)에 대해서 몫이 a고 나머지가 r이라면 아래의 수식이 성립한다. V(i) = a(i) * m + r(i) 그리고 V(i-1) 수식을 V(i) 뺀다면 아래와 같은 수식이 된다. V(i) - V(i-1) = (a(i) - a(i-1)) * m + (r(i) - r(i-1)) 자! 문제에서 원하는 답은 N개의 수에 대해서 M으로 나누었을 때 나머지가 같게되는 M을 모두 찾는 것이다. 나머지가 같다는 것은 위 수식에 대입해보면 답은 V(i) - V(i-1)의 숫자를 나머지가 0으로 만드는 M을 찾는 것이다. N개의 수를 오름차순으로 정렬하기 long[] nums = new long[n]; for (int i = 0; i < nums.length; i++) { nums[i] ..

Algorithm_Java

[알고리즘] 백준 1541 - 잃어버린 괄호

문제 본문 그리디 알고리즘, 탐욕법이라고 불리는 이 알고리즘은 원하는 답을 구하기 위해 모든 경우를 탐색하는 것이 아니라 문제를 해결하는 과정에서 최적이라고 생각하는 과정을 선택하는 알고리즘입니다. 문제 해석 Input: 55-50+40 output: -35 문제를 설명하자면 괄호가 생략된 수식에서 괄호를 집어넣어 최솟값을 만들어라!입니다. 예시로 주어진 입력으로 만들어 낼 수 있는 최솟값의 수식은 55-(50+40)입니다. 여기서 우리가 문제를 풀기위해 적용해야 하는 그리디 알고리즘 괄호를 수식에서 숫자를 제외한 모든 곳에 넣어서 결과를 계산한 후 최소 값을 찾는 것이 아니라 답을 구하기 위한 문제의 최적 방법을 찾는 것이죠. 최소 값을 구하기 위한 최적 방법은 최대한 크게 빼는 것입니다. Input:..

Android/Common

[Android] Executor - 기능 별 Thread 분리

최근 Google Architecture MVP Sample project를 참고하여 MVP를 공부하던 도중 Executor의 클래스를 처음 보게 되었다. 그 후 구글링을 통해 네트워크 IO 통신과 디스크 IO 작업, UI 작업등 Background 작업을 위해 해당 클래스가 사용되었고 kotlin의 coroutine이 출시되기 이전 Thread를 유용하게 사용한 방법이었다. - Executor Inferface import java.util.concurrent interface Executor { void execute(Runnable command); } 구조로만 보면 Runnable 객체를 실행하는 단순한 구조이다. 클래스 자체로 어떤 Background 프로세스가 생성되는 것이 아닌 틀만 제공해준..

Algorithm_Java

[알고리즘] 백준 12865 - 평범한 배낭

문제본문 입력 [물건의 개수] [최대 무게] 4 7 [물건 무게] [물건 가치] 6 13 4 8 3 6 5 12 ________________ 출력 [최대 가치] 14 동적프로그래밍의 대표 문제 불리는 Knapsack 알고리즘은 dp를 사용하여 무게와 가치 두 가지 요소로 가질 수 있는 최대 가치를 구하는 문제 유형이다. 문제 해설 동적프로그래밍은 dp를 어느 부분으로 잡는 지가 관건 인듯하다. Knapsack은 이중 배열로 dp를 설정한다. dp[i][j]라고 가정하면, i번째까지 물건을 집어 넣는 다고 했을 때, 남아있는 무게가 j라면 얻을 수 있는 최대가치를 뜻한다. 해당 알고리즘은 테이블로 과정을 묘사하면 이해가 더 쉽다. 무게 1 2 3 4 5 6 7 1번째 물건 0 0 0 0 0 13 13 2..

Algorithm_Java

[알고리즘] 백준 2565 - 전깃줄

문제 본문 동적 프로그래밍이란 동적 프로그래밍 방법은 문제의 해결 과정에서 이전에 구했던 과정을 또 다시 반복하여 실행되는 것을 방지하는 방법으로, 불필요한 코드 실행이 줄어 시간을 단축시킬 수 있습니다. 하지만 O(n)의 메모리가 할당 되어야 합니다. 문제 해설 전깃줄은 백준 사이트에서 LIS(Longest Increasing Subsequence)의 응용으로 분류된 문제입니다. N개의 전깃줄을 겹치지 않게 제거해야 하는 최소 개수의 전깃줄을 구해야 합니다. 문제 설명 그대로 풀려고 해서 방법이 도저히 생각나지 않다가 사람들의 힌트를 보고 깨달았습니다. ㅎ.. 해답은 제거가 아니고 설치입니다. 최소 개수의 전깃줄을 제거하여 겹치지 않게 설치된 남은 전깃줄은 겹치지 않게 설치될 수 있는 최대 전깃줄 입니..

Android/Common

[Android] MVC 적용하기

해당 포스팅의 코드와 설명에 오류가 있다면 댓글로 말해주시면 감사하겠습니다. 며칠 전, 출시 된지 꽤 지난 어플이 사용하던 API 서버 호출 오류로 내부 로직이 꼬여 먹통이 되어 버렸다. 해당 프로젝트는 기능 동작만 생각하던 옛날의 내가 Ctrl + c, Ctrl + v를 수행한 중복 코드도 많고 매우 비효율 적으로 구현한 작품. 다시금 스스로 작성한 코드를 보면서 디자인 패턴의 중요성을 느끼고 가장 기초적인 MVC 패턴부터 적용하기로 마음을 먹었다. Model-View-Controller 패턴 프로젝트의 기능과 비례하게 코드의 양이 늘어난다. 디자인 패턴을 적용하지 않은 프로젝트는 Activity 클래스 파일에 모든 코드가 들어가 있고 해당 클래스 파일의 코드의 수는 몇 천줄이 되어 어떤 한 기능을 수..

Data structure_Java

ArrayList와 Linked List 비교

N사 면접 질문 ArrayList와 LinkedList의 차이점과 장단점은 무엇일까요? 비슷한 성격의 두 List의 차이점 ArrayList와 Linked List는 저장해야하는 객체의 수를 정확히 모를 때 사용하곤 했죠. 원하는 위치에 저장하거나 순차적으로 삭제, 접근할 때 등등 사용하는 입장에서 기능적으로는 비슷한 두 List는 구조적인 설계 측면에서 보면 차이점을 알 수 있습니다. ArrayList ArrayList는 re-size array기반으로 구현된 List 입니다. 내부적으로 크기가 고정인 배열로 이루어져 있고 값이 포화가 될 경우 전보다 더 길이가 긴 배열을 새로 생성하여 이전 값들을 복사하는 방식으로 무한한 객체를 저장하도록 구현한 것입니다. Linked List Linked List는..

점냥
점냥's Log