전체 글 107

[Clean Code] 9장. 단위 테스트 : Unit Tests

[Clean Code 시리즈 포스팅] [Clean Code] 1장. 깨끗한 코드: Clean Code [Clean Code] 2장. 의미 있는 이름 : Meaningful Names [Clean Code] 3장. 함수 : Functions [Clean Code] 4장. 주석 : Comments [Clean Code] 5장. 형식 맞추기 : Formatting [Clean Code] 6장. 객체와 자료구조 : Objects and Data Structures [Clean Code] 9장. 단위 테스트 : Unit Tests (Now) ❑ TDD 법칙 세가지 첫째 법칙 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다 둘째 법칙 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트..

[Java] Java Array와 Hash의 데이터 접근/삽입 속도 비교

1. 서론Codility Lesson4. MissingInteger 문제를 풀면서 Hash와 Array간 데이터 접근/삽입 속도의 차이를 크게 체감할 수 있었다. 해당 문제에서 array로 접근하기엔 size를 100만개로 줘야 했기에 사이즈가 좀 크지 않은가 하는 생각에 Hash, Priorty Queue로 접근했는데 아무리 머리를 굴려봐도 Time Out이 났다. 그래서..! 메모리 제한도 없고, 그냥 배열로 풀라는 뜻인가 해서 배열로 풀었더니 바로 Pass. 도대체 Hash와 Array간 속도 차이가 얼마나 나길래 이런것인가 싶어서 직접 테스트해봤다. 2. 테스트 개요 array, HashMap, ConcurrentHashMap 세 가지에 대해 데이터 삽입/접근을 테스트한다 데이터 삽입(Add El..

Back-End/Java 2022.03.06

[프로그래머스] KAKAO RECRUITMENT 2022 신고결과받기

문제 https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 접근 제한시간은 [정확성 테스트: 10초]만 존재하므로 불필요한 반복만 줄이면 된다. 네 개의 Hash 자료구조를 사용했다. 1. abuseCntMap: 아이디 별 신고 당한 횟수 Map 2. abuseAndReportIdMap: 각 신고당한 사람이 어떤 사람(아이디)에게 신고 당했는지 기록 3. reportAndAbuseIdMap: 신고한 사람이 ..

Algorithms 2022.03.04

[Java] JUnit5 기본 Annotation

1. @Test 테스트 메서드임을 나타내는 어노테이션. 테스트 하려는 메서드에 붙여서 사용할 수 있다. public class MyTestClass { @Test void myTest1() { System.out.println("myTest1"); } } 2. @BeforeAll, @AfterAll: 생명주기 어노테이션 2.1. @BeforeAll 클래스가 실행되기 전 한 번만 실행되는 메서드 2.2. @AfterAll 클래스의 모든 테스트 메서드가 실행된 후 한 번만 실행되는 메서드 2.3. @BeforeEach 클래스의 각 테스트 메서드가 실행되기 전 매번 실행되는 메서드 2.4. @AfterEach 클래스의 각 테스트 메서드가 실행된 후 매번 실행되는 메서드 @Test 여러개 있을 때 Before/..

Back-End/Java 2022.03.03

[Codility] PermMissingElem

분석 문제는 워낙 간단하고 쉽다. 단 해당 문제의 Lesson 주제가 Time Complexity인 만큼 시간 복잡도를 최소화하는 것이 문제의 의도로 보인다. 가장 쉽게 떠올릴 수 있는 방법은 N개의 크기 배열 A를 받았을 때 (1부터 N+1)까지의 숫자를 전부 Hash의 Key로 넣고 하나씩 Remove 하는 것이다. 이렇게 하면 가장 마지막에 남는 Key가 답이 된다. 하지만 이 방법은 Hash에 넣는데 N+1번, 그리고 A배열을 순회하며 찾는데 N번 걸리므로 O(n^2)이다. O(N)으로 끝낼 수 있는 방법은 배열을 딱 한 번만 순회하는 것이다. 처음 A 배열을 받으면 1~N+1 숫자의 합을 구한다. 그리고 A 배열을 순회하면서 합에서 값을 한 개씩 뺀다. 이렇게 하면 없는 숫자는 뺄 수 없으므로 ..

Algorithms 2022.02.28

[Codility] OddOccurrencesInArray

제약사항 N is an odd integer within the range [1..1,000,000]; each element of array A is an integer within the range [1..1,000,000,000]; all but one of the values in A occur an even number of times. 간단한 문제다. A에 들어가는 값이 1~10억이므로 배열의 인덱스와 동일하게 처리하기엔 사이즈가 너무 큼 그래서 Hash를 이용해서 발생한 숫자를 Key로, 발생한 횟수를 Value로 사용함 그리고 2로 나눈 나머지가 0이 안되는 것이 홀수번 발생한 것이므로 해당 숫자를 답으로 리턴 Code class Solution { public int solution(in..

Algorithms 2022.02.26

[Codility] CyclicRotation

예외사항을 생각해야 한다. Empty array, input 배열의 크기보다 rotation 횟수가 더 클때, K가 0일 때 등을 추가 테스트 케이스로 넣어준다 Additional Test Case ([], 3) ([1,2,3,4], 5) ([1,2,3,4], 0) Code class Solution { public int[] solution(int[] A, int K) { int[] res = new int[A.length]; // K 값이 A 배열의 길이보다 클 때 중복해서 rotation 하는 것이므로 나머지를 대입 if (A.length != 0 && K > A.length) { K = K % A.length; } // A배열의 크기가 K와 동일하면 로테이션 필요 없음 // A배열의 크기가 0이거..

Algorithms 2022.02.24

[Java] Process & Thread 개념

❑ 프로세스(Process)와 쓰레드(Thread) 프로세스와 쓰레드의 개념 및 관계 프로세스는 간단히 말해 '실행 중인 프로그램(Program)'이다 쓰레드는 프로세스를 구성하는 한 가지이자, 작업을 처리하는 일꾼이다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성되어 있다. 쓰레드를 프로세스라는 공장에서 작업을 처리하는 일꾼으로 생각하면 이해하기 쉽다. 스레드를 경량화된 프로세스라고도 한다 컴퓨터는 프로세스마다 자원을 분할해서 할당한다. 한 프로세스의 스레드들은 같은 공간(분할된 자원)에서 진행된다. 각 스레드는 Stack 영역만 독립적으로 갖고 그 외 부모 프로세스의 자원을 공유한다. 그렇기 때문에 Context Switching처럼 하나의 프로세스를 다 ..

Back-End/Java 2022.02.21

[프로그래머스] 모의고사

문제 https://programmers.co.kr/learn/courses/30/lessons/42840 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr class Solution { public int[] solution(int[] answers) { int[] answer = {}; Solver sovler = new Solver(); int[] res = new int[3]; for (int i = 0; i < answers.length; i++) { int[] solve = sovler.solve(a..

Algorithms 2022.02.20